IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Arrêter boucle à la fin du document


Sujet :

VBA Word

  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 31
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    With Selection.Find
       .Text <> "ATT124"
    ...


    Si tu as une autre idée je suis preneur.
    Merci

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 22
    Par défaut
    Au fait, si tu notes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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...?

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/11/2009, 16h22
  2. [WD-2003] Comment arrêter une macro à la fin du document Word
    Par jessicaz dans le forum VBA Word
    Réponses: 8
    Dernier message: 28/04/2009, 08h48
  3. Réponses: 1
    Dernier message: 16/03/2007, 14h26
  4. Boucle sans fin : danger pour le serveur ?
    Par Rémiz dans le forum Langage
    Réponses: 4
    Dernier message: 09/12/2005, 16h52
  5. [SQL SERVER 2000] Fonction utilisateur : boucle sans fin
    Par galinijay dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/09/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo