Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/12/2010, 10h08   #1
Invité de passage
 
442 Valy
Inscription : octobre 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : 442 Valy

Informations forums :
Inscription : octobre 2010
Messages : 31
Points : 3
Points : 3
Par défaut Arrêter boucle à la fin du document

Bonjour à tous.
J'ai une macro qui, dans un grand texte, supprime toutes les lignes se trouvant entre deux expressions ("ATT124")
Le problème est qu'à la fin du document, la boucle ne s'arrête pas et finit par tout me supprimer.
Comment-lui dire de s'arrêter lorsqu'il n'y a plus de texte?

Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub test()
Dim i As Integer
Selection.HomeKey Unit:=wdStory ' place le curseur en debut du document
 
For i = 1 To 500
    With Selection.Find
    .ClearFormatting
    .Text = "ATT124"
    .MatchWildcards = 0
    .Forward = 1
    .Replacement.Text = ""
    .Replacement.ClearFormatting
    .Execute ' recherche du mot1
    Selection.MoveDown Unit:=wdParagraph, Count:=1 'déplacement à la ligne après le mot
    .Text = "ATT124"
    Selection.Extend ' etendre la selection
    .Execute ' atteindre le mot2
    Selection.MoveLeft Unit:=wdCharacter, Count:=Len("wdParagraph")
    Selection.MoveUp Unit:=wdParagraph, Count:=1
    Selection.Delete
 
 
End With
Next i
 
End Sub
Merci d'avance
valy_442 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 13h17   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 315
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 315
Points : 29 213
Points : 29 213
Salut,

Je pense que ce n'est pas la solution.
Ta boucle doit être basée sur le résultat de la rechercher et pas sur une boucle fixe.

La méthode
Revoie une valeur True tant que la recherche aboutit.
Elle renvoie False dès que la recherche n'aboutit plus.


Base donc ta boucle sur la valeur renvoyée.

Code :
1
2
3
4
5
6
7
Do
With Selection.Find
   .Text = " "
   .Forward = True
   booTrouve = .execute
end with
loop while booTrouve
Dès que la chaîne n'est plus trouvée, la boucle s'arrête.

Dans ton code, que la chaîne soit trouvée ou pas, la ligne suivant est exécutée :

Tu vas donc faire une suppression 500 fois en suivant.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2010, 13h45   #3
Invité de passage
 
442 Valy
Inscription : octobre 2010
Messages : 31
Détails du profil
Informations personnelles :
Nom : 442 Valy

Informations forums :
Inscription : octobre 2010
Messages : 31
Points : 3
Points : 3
Salut Heureux-oli (jeu de mot avec ravi-oli?)
Merci pour ta réactivité.

En fait, je cherche à garder les lignes où il est écrit ATT124.
Je désire supprimer toutes les autres lignes.
Or ton code cherche une expression et la supprime.
Et il est impossible de mettre:
Code :
1
2
3
4
...
With Selection.Find
   .Text <> "ATT124"
...


Si tu as une autre idée je suis preneur.
Merci
valy_442 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 15h25   #4
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
Bonjour,

Je ne sais pas si ta question est toujours d'actualité, mais tu peux quand même baser ta boucle sur l'exécution de ta recherche. Il y a plusieurs façons de le faire : comme le disait Heureux-oli avec un Do et un booléen test pour l'arrêter ou avec un While. Comme je suis une adepte du While cela donnerait :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub test()
Dim i As Integer
Selection.HomeKey Unit:=wdStory ' place le curseur en debut du document
 
With Selection.Find
    .ClearFormatting
    .Text = "ATT124"
    .MatchWildcards = 0
    .Forward = 1
    .Replacement.Text = ""
    .Replacement.ClearFormatting
End With
While Selection.Find.Execute
    Selection.MoveDown Unit:=wdParagraph, Count:=1 'déplacement au paragraphe après le mot
    With Selection.Find
        .Text = "ATT124"
        Selection.Extend ' etendre la selection
        .Execute ' atteindre le mot2
    End With
    Selection.MoveLeft Unit:=wdCharacter, Count:=Len("wdParagraph")
    Selection.MoveUp Unit:=wdParagraph, Count:=1
    Selection.Delete
Wend
 
End Sub
Je ne comprends pas comment se présente ton texte, mais si ta fonction fonctionnait cela devrait te permettre de l'arrêter...
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2010, 17h18   #5
Membre du Club
 
Femme
Inscription : décembre 2010
Messages : 21
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Nord (Nord Pas de Calais)

Informations forums :
Inscription : décembre 2010
Messages : 21
Points : 42
Points : 42
Au fait, si tu notes
Code :
Selection.MoveLeft Unit:=wdCharacter, Count:=Len("wdParagraph")
tu déplaces ton curseur vers la gauche de la longueur de la chaîne "wdParagraph", soit 11 caractères.
Par contre, je ne sais pas comment faire pour garder sa sélection active en y retirant le dernier paragraphe. J'ai le même soucis sur ma macro...
J'ai pu grugé car le début de ma sélection est aussi le début du document, mais sinon tous les mouvements que je fais modifie le début de ma sélection et non la fin...
Si quelqu'un a une idée...?
dewcaro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h52.


 
 
 
 
Partenaires

Hébergement Web