Bonjour,
Je constate que tu es tenace ;)
Je voudrais juste te conseiller
- de lire et relire les fondamentaux des instructions sBasic,
- de récrire une macro qui semble ne pas fonctionner en la décomposant
en sous éléments ET de vérifier au fur et à mesure que chaque élément
(procédure ou fonction) donne bien le résultat escompté.
- de pas oublier de garder à l'esprit d'une part ce que l'on souhaîte
obtenir, d'autre part les moyens que l'on met en oeuvre pour y aboutir.
Souvent, nez dans le guidon, on ne prête pas/plus assez attention à
certains "détails".
Dans ton cas,
avec l'appel de la fonction Remplacer1SchPar1Car("=E8", "é"), que
souhaîtes-tu ?
1) rechercher une chaine (ou fragment) => "=E8"
2) remplacer cette chaine par une autre => "é".
Or, dans le corps de la procédure je lis ceci :
> with jeCherche
> .SearchString= "Sch"
> .SearchWords=false
> end with
ce qui sous entend qu'avec .SearchString= "Sch", tu forces la fonction à
ne rechercher que la chaine "Sch", c'est à dire les caractères _Sch_.
Ce n'est bien entendu pas cela que tu désires.
Ton but, en appelant la fonction Remplacer1SchPar1Car(Sch As String, Car
As String) est de trouver la chaine passée en premier paramètre Sch As
String et de la remplacer par une autre, second paramètre, Car As String.
MAIS tu as confondu le litteral "Sch" avec le contenu de la variable
Sch, et de fait ta macro ne répond pas exactement bien qu'elle semble
fonctionner correctement.
Il te faut donc modifier .SearchString= "Sch" en .SearchString= Sch,
ainsi que trouv(x).String="Car" par trouv(x).String=Car
Voila, je te laisse continuer tes découvertes.
Francois
Jean Sympa a écrit :
Bonjour Bernard
J'ai posé une nouvelle question car je pensais être confronté à un
nouveau problème.
A ) - J'ai tenu compte de tes conseils (Je possède la version 2.0)
Je procède de la manière suivante:
a - j'ouvre le fichier à corriger;
b - Je vais dans Outils/Macros/Gérer les macros/OpenOffice.org
Dans le paneau Macros OpenOffice.org je sélectionne un module et la
macro qui m'intéresse.
c - Je clique sur Editer
d - Dans l'éditeur basic(Mes macroos et boîtes de
dialogue.Standard-OpenOffice.org)je clique sur la roue dentée, cela
ouvre un paneau que j'appelerrai Paneau de la roue dentée. Je
sélectionne la macro qui m'intéresse.
Je clique sur Exécuter: le panneau de la roue dentée disparaît.
Je constate que l'exécution n'a pas lieu et que le curseur se place en
regard de la première instruction affichée dans l'éditeur.
Autrement-dit, je ne parviens pas à lancer la macro sélectionnée dans le
panneau de la roue dentée!
B ) - J'ai créé un nouveau module, dans lequel j'ai placé, uniquement,
le code de l'application. Voici ce code:
REM ***** BASIC *****
Option Explicit
Rem --- Macro mise en question
Sub RemplacerNSchParNCar()
Remplacer1SchPar1Car("=E8", "é")
End Sub
Rem
---------------------------------------------------------------------------
Function Remplacer1SchPar1Car(Sch As String, Car As String)
Dim monDocument as Object
Dim jeCherche As Object, trouv As Variant
Dim x As Long
monDocument=ThisComponent
jeCherche=monDocument.createSearchDescriptor
with jeCherche
.SearchString= "Sch"
.SearchWords=false
end with
trouv=monDocument.findAll(jeCherche)
'print "Nombre d'occurences: " & cstr(trouv.count)
for x=0 to trouv.count-1
trouv(x).CharBackColor=1234567 'Fond vert sombre
trouv(x).String="Car"
Remplacer1SchPar1Car= "Résultat Correct"
' ne s'affiche jamais!!
next
End Function
a ) Dans le paneau de la roue dentée je sélectionne RemplacerNSchParNCar
b ) je clique sur Exécuter
la macro ne s'exécute pas.
La fenêtre de la roue dentée se ferme,
je suis revenu à l'éditeur basic.
c ) J'exécute, pas à pas, la macro RemplacerNSchParNCar située au début
de l'éditeur.
Je constate que le curseur se place successivement devant chaque
intruction de la macro. Il marque une pause en disparaissant à End Sub
puis, revient à la première instruction.
L'exécution boucle sur la macro. La fonction Remplacer1SchPar1Car n'est
jamais appelée
j'en conclue qu'il a une erreur dans mon code.
C ) - Modifications apportées au code
Je modifie en tâtonant la macro qui devient finalement
Sub RemplacerNSChParNCar()
Dim SChPar1Car As String
SChPar1Car = "Début"
Remplacer1SChPar1Car("=E9","é")
' affiche une fenêtre: Nombre d'occurences = 0
SChPar1Car = Remplacer1SChPar1Car
' affiche une fenêtre: Nombre d'occurences = 0
Print SChPar1Car
' affiche une fenêtre avec uniquement OK et Annuler: Nombre
d'occurences = 0
End Sub
Je constate que
le pas à pas boucle sur la macro;
un message apparaît trois fois et,
la fonction n'est pas appelée.
Curieusement, une fois la fonction a été appelée. Dans le texte qui
n'était pas celui à corriger mais celui-ci, c'est à dire cette réponse,
les sous chaînes [Sch] ont été remplacées par la sous chaîne [Car] et
non pas par [é]. Mais, je n'ai pas réussi à appeler une seconde fois la
fonction.
Conclusion Ma macro ne lance pas la fonction.
Je sollicite ton aide et celle de la liste quand j'arrive à une impasse.
Je te remercie ainsi que tous ceux qui répondent à mes questions.
Bon Noël à tous
Cordialement
Papy
Bernard Marcelly a écrit :
Bonsoir Jean Sympa
Message du 2006-12-23 15:20:
Bonjour à toutes et à tous,
Echec du lancement d'une macro dans l'Editeur Basic
tu pouvais continuer le fil de messages en cours, puisque le problème
n'est pas encore résolu. Il suffit de faire "Répondre" dans Thunderbird.
Bernard vient de m'expliquer comment lancer une macro qui n'est pas
éditée la première dans un module. Dans l'éditeur Basic, actuellement
j'ai dans l'ordre les codes d'une macro, d'une fonction et d'une macro:
Sub RemplacerSChParCar()
Function Remplacer1SChPar1Car(Sch As String, Car As String)
Sub RemplacerNSChParNCar()
Question 1
La fenêtre du module affiche:
RemplacerSChParCar()
Remplacer1SChPar1Car(Sch As String, Car As String)
RemplacerNSChParNCar()
Non, je ne vois pas ce que tu décris.
Quand tu cliques la roue dentée cela affiche le panneau de la figure
3-6 du livre, page 37. Il comporte:
- à gauche une petite fenêtre avec une arborescence; il devrait
afficher en sélection le nom de ton module, sinon il faut le chercher
dans l'arborescence (cliquer les signes + )
- à droite une petite fenêtre avec les noms des Sub et Function de ce
module. Et seulement les noms ! pas les arguments !
Cliquer une fois sur le nom qui t'intéresse afin de le sélectionner,
puis cliquer sur le bouton "Exécuter" sur la droite du même panneau.
La macro s'exécute immédiatement.
Où rien n'indique que la deuxième ligne représente une fonction.
Est-ce normal?
Oui. Une fonction peut être appelée comme une Sub, sans utiliser le
résultat en retour.
Ai-je commis une erreur?
Certainement. Mais je ne sais pas ce que tu as fait exactement.
Tu peux vérifier que ta macro est appelée en insérant à son début une
instruction d'affichage du genre:
print "je suis passé ici"
Bernard
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]