Visual Basic : repeter une action jusque...

Visual Basic : repeter une action jusque... - VB/VBA/VBS - Programmation

Marsh Posté le 24-01-2003 à 09:53:05    

je souhaite faire une macro sous Word qui fasse une recherche sur un mot et une fois qu'il est trouve, rajoute un truc (ce n'est pas un remplacement).
 
Bref, je voudrais repeter la requete jusqu'a atteindre le document, je ne sais comment ecrire la boucle Do... Loop
 
(ma macro tourne en boucle et je suis oblige de tuer l'application pour en sortir :sweat:)
 
Merci !


---------------
I fart in your general direction
Reply

Marsh Posté le 24-01-2003 à 09:53:05   

Reply

Marsh Posté le 24-01-2003 à 11:25:08    

C'est peut etre que ta condition de fin de boucle ne peut jamais etre remplie.

Reply

Marsh Posté le 24-01-2003 à 11:28:44    

El Tristo a écrit :

je souhaite faire une macro sous Word qui fasse une recherche sur un mot et une fois qu'il est trouve, rajoute un truc (ce n'est pas un remplacement).
 
Bref, je voudrais repeter la requete jusqu'a atteindre le document, je ne sais comment ecrire la boucle Do... Loop
 
(ma macro tourne en boucle et je suis oblige de tuer l'application pour en sortir :sweat:)
 
Merci !


 
poste peut être ta boucle histoire de voir


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 24-01-2003 à 11:31:32    

Je n'osai le demeder.

Reply

Marsh Posté le 24-01-2003 à 12:32:41    

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 24/01/2003 by Tristo
'
Dim Compteur As Integer
 
Compteur = 1
 
Do
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "Test #:"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="FU" + Format(Compteur, "000" )
    Compteur = Compteur + 1
Loop
 
End Sub


 
voila  :whistle:


---------------
I fart in your general direction
Reply

Marsh Posté le 24-01-2003 à 13:09:15    

El Tristo a écrit :

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 24/01/2003 by Tristo
'
Dim Compteur As Integer
 
Compteur = 1
 
Do
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "Test #:"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="FU" + Format(Compteur, "000" )
    Compteur = Compteur + 1
Loop
 
End Sub


 
voila  :whistle:  


 
euh... elle est où ta condition d'arret ?


---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 24-01-2003 à 13:12:16    

Loom the gloom a écrit :


 
euh... elle est où ta condition d'arret ?


 
ben c'est la le probleme, j'aimerais savoir comment poser comme condition d'arret la fin du document ;)
 


---------------
I fart in your general direction
Reply

Marsh Posté le 24-01-2003 à 15:48:36    

Dans certains basiques, y a  
 
do
 
loop while (condition_qui_fait_continuer)
 
ou
 
do
 
loop until(condition_qui_fait_quitter)
 
voire un exit do en cours de code pour sortir du tourbillon infini.
 
Faudrait savoir ce qui provoquera l'arrêt : fin de texte, de sélection, erreur "système" genre "y a plus de caractères".
 
Si y a moyen de savoir avant entrée ds la boucle la taille (nb de caractères) de la sélection, on peut alors comparer à Compteur ?


Message édité par Carbon_14 le 24-01-2003 à 15:50:30
Reply

Marsh Posté le 24-01-2003 à 16:00:20    

El Tristo a écrit :


 
ben c'est la le probleme, j'aimerais savoir comment poser comme condition d'arret la fin du document ;)
 
 

tu fais un goto:
 
do
if condition realisé goto sortie
...
loop
 
:sortie

Reply

Marsh Posté le 24-01-2003 à 19:21:47    

merci les copains, mais justement c'est la condition de sortie que je cherche :fou: :o :D
 

Citation :

ben c'est la le probleme, j'aimerais savoir comment poser comme condition d'arret la fin du document ;)


---------------
I fart in your general direction
Reply

Marsh Posté le 24-01-2003 à 19:21:47   

Reply

Marsh Posté le 24-01-2003 à 20:33:44    

Si ce n'est pas un remplacement ou est ce que tu veut mettre le "truc".
Est ce qu'il y a plusieurs fois le meme mot à chercher dans ton texte.
Une fois que tu l'as touvé tu met ton compteur à 1 et tu fait ta modif.
Si il y est plusieurs fois tu peut peut etre faire ligne par ligne.
 
ps:La condition d'arret il n'y a que toi qui peut la connaitre.
Mais pour ex si tu arrive à la fin du document et que tu as trouvé tous les exemplaires de ta chaine dans ton document tu peut penser à quitter ta boucle.


Message édité par amsterdam le 24-01-2003 à 20:47:24
Reply

Marsh Posté le 24-01-2003 à 22:32:46    

amsterdam a écrit :

Si ce n'est pas un remplacement ou est ce que tu veut mettre le "truc".
Est ce qu'il y a plusieurs fois le meme mot à chercher dans ton texte.
Une fois que tu l'as touvé tu met ton compteur à 1 et tu fait ta modif.
Si il y est plusieurs fois tu peut peut etre faire ligne par ligne.
 
ps:La condition d'arret il n'y a que toi qui peut la connaitre.
Mais pour ex si tu arrive à la fin du document et que tu as trouvé tous les exemplaires de ta chaine dans ton document tu peut penser à quitter ta boucle.


 
ma condition d'arret, c'est : une fois que j'ai atteint la fin du document.
La question est : comment le coder dans ma macro ?
 
(j'ai un fichier de 50 pages de cas de tests que je dois numeroter, et je souhaite le faire de facon automatique)


---------------
I fart in your general direction
Reply

Marsh Posté le 24-01-2003 à 22:34:33    

La fonction  Selection.Find.Execute ne retourne pas de valeur de retour ? Pourrait dire : y a plus rien.
 
J'y connais rien, mais Selection.Find.ClearFormatting devrait pas être hors boucle do ?
 
Y a pas une fonction qui permettrait de savoir si fin de document atteinte ? (genre EndOfDocument, ou qq chose du même style).
 
NB : je ne connais pas VBA d'Office (car je l'ai pas, trop cher) => ce ne sont que des suggestions. :)


Message édité par Carbon_14 le 24-01-2003 à 22:36:41
Reply

Marsh Posté le 24-01-2003 à 22:39:46    

CARBON_14 a écrit :

La fonction  Selection.Find.Execute ne retourne pas de valeur de retour ? Pourrait dire : y a plus rien.
 
J'y connais rien, mais Selection.Find.ClearFormatting devrait pas être hors boucle do ?
 
Y a pas une fonction qui permettrait de savoir si fin de document atteinte ? (genre EndOfDocument, ou qq chose du même style).
 
NB : je ne connais pas VBA d'Office (car je l'ai pas, trop cher) => ce ne sont que des suggestions. :)  


 
je connais encore moins que toi :/
Il existe une fonction EOF, mais ca marche si j'ouvre le document avant au moyen d'une autre fonction, et ca devient compliqué, y a plusieurs modes d'ouverture :sweat:
 
En fait ce qu'il se passe, c'est que la macro tourne trop bien : une fois arrivée à la fin du document, elle recommence depuis le début, indéfiniment :fou:


---------------
I fart in your general direction
Reply

Marsh Posté le 25-01-2003 à 01:24:39    

comme ça sans réfléchir :  
si tu vire ton compteur et que tu remplace le do...loop par un while not (tondocument).eof....Wend
 
 
ça pourrait marcher
dis moi si je me trompe


Message édité par Loom the Gloom le 25-01-2003 à 01:24:58

---------------
Music|Market|Feed|Loom|DVD
Reply

Marsh Posté le 25-01-2003 à 13:54:15    

Loom the gloom a écrit :

comme ça sans réfléchir :  
si tu vire ton compteur et que tu remplace le do...loop par un while not (tondocument).eof....Wend
 
 
ça pourrait marcher
dis moi si je me trompe


 
oki, j'essayerai lundi et je te dis ca :d


---------------
I fart in your general direction
Reply

Marsh Posté le 27-01-2003 à 10:46:56    

Loom the gloom a écrit :

comme ça sans réfléchir :  
si tu vire ton compteur et que tu remplace le do...loop par un while not (tondocument).eof....Wend
 
 
ça pourrait marcher
dis moi si je me trompe


 
ca marche pas [:ruisseau de larmes]
ThisDocument.eof n'existe pas :fou:
 
c'est de la merde en barre VBA [:toad666]


---------------
I fart in your general direction
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed