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]

Répondre à