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 :

Boucle pour supprimer des paragraphes qui finissent par "toto" [WD-2007]


Sujet :

VBA Word

  1. #1
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut Boucle pour supprimer des paragraphes qui finissent par "toto"
    Bonjour,
    je ne comprends pas pourquoi mon code ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DtEx
    'Supprime la ligne
    Dim pAra As Paragraph
    'on revient au début du document
    Selection.HomeKey Unit:=wdStory
    For Each pAra In ActiveDocument.Paragraphs
        'condition : si fin de paragarphe = Toto
        If Right(pAra, 5) = " Toto" Then
            'on sélectionne la ligne
            Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
            Selection.Delete Unit:=wdCharacter, Count:=1   ' Supp
        End If
    Next pAra
    End Sub
    il ne se passe rien
    Merci de votre aide

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je te conseille de faire un debug.print sur le résultat de Left(pAra,5), je pense que tu devrais trouver pourquoi il ne se passe rien.
    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 actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour Heureux-oli,
    Merci de ta réponse, j'ai fait ce que tu m'as conseillé, ma variable renvoie chaque paragagraphe, quelque soit le dernier mot.
    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
    Sub DtEx()
    'Supprime la ligne
    Dim pAra As Paragraph
    'on revient au début du document
    Selection.HomeKey Unit:=wdStory
    For Each pAra In ActiveDocument.Paragraphs
        'condition : si fin de paragarphe = Toto
        If Right(pAra, 5) = " Toto" Then
            'on sélectionne la ligne
            Selection.MoveDown Unit:=wdLine, Count:=1, Extend:=wdExtend
            Selection.Delete Unit:=wdCharacter, Count:=1   ' Supp
        Else
            Debug.Print (pAra)
        End If
    Next pAra
    End Sub
    Seule la partie Else est parcourrue ; Merci

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Ce que je voulais que tu trouves était que pour avoir les cinq derniers caractères, il faut un mid et pas un left.
    Le saut de paragraphe est considéré comme un caractère du paragraphe.

    Ce qui empêche le résultat de la comparaison avec Toto.
    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 !

  5. #5
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    ou bien Right(pAra, 5) Like "Toto?" (ou "Toto*") ou encore Left(Right(pAra, 5), 4) = "Toto"

    ______________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    ______________________________________________________________________________________________________
    Je suis Charlie, Bardo, Sousse
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  6. #6
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci à Marc de se joindre à nous, car malgrès les efforts d'Heureux-oli, je ne vois pas comment utiliser mid...
    Puis-je vous demander d'aller un peu plus loin, car je n'y arrive pas.
    J'arrive à supprimer la 1ère occurence, mais pas les suivantes (je suppose que je perds le fil de mes selections, mais je n'y comprends rien avec les sélections dans Word)

    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
    Sub DtEx1()
    'Supprime la ligne
    Dim pAra As Paragraph
    'on revient au début du document 
    Selection.HomeKey Unit:=wdStory
    For Each pAra In ActiveDocument.Paragraphs
        'condition : si fin de paragarphe = Toto
        If Right(pAra, 5) Like "Toto?" Then
            'on sélectionne la ligne        
            Selection.EndKey Unit:=wdLine, Extend:=wdExtend
            Selection.Delete    'on supprime
        Else    'sinon, on descend la sélection d'une ligne
            Selection.MoveDown Unit:=wdLine, Count:=1 ', Extend:=wdExtend
        End If
    Next pAra
    End Sub
    je commence à m'en sortir avec VBA excel mais avec word, c'est un autre monde...
    Merci

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    L'idée de Marc n'est pas mauvaise et peut-être un peu plus simple.

    Pour le mid, il faut connaître le nombre de caractères du paragraphe et partant de là on peut utiliser le Mid.

    son idée est un peu plus facile, tu récupères 6 caractères avec un Right().
    Et tu élimine le dernier avec un Left().
    tu auras "Toto?".


    Left(Right(pAra,6),5)Mais, il y a souvent un mais, il faut être certain de la structure.
    Si c'est un mot précis que tu cherches et qu'il peut être entouré de ponctuation, InStr() irait un peu mieux.
    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 !

  8. #8
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Merci de ta réponse,

    mon pb, c'est de supprimer tous les paragraphes qui contiennent le mot toto en fin de paragraphe ; il s'agit bien d'un mot précis.

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Donc, ta première étape est de tester si tu trouves bien ton mot dans les paragraphes.
    Essaie avec les astuces que nous t'avons données.
    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 !

  10. #10
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour,
    je te remercie d'avoir pris la peine de répondre, mais ça ne m'aide pas beaucoup, j'ai lu les réponses apportées.
    Je trouve bien toto, mais je ne supprime que la ligne de la 1ère occurence pas les autres.

  11. #11
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Une étape à la fois, le but n'est pas de fournir un code complet, mais de t'aider à écrire ton code.

    Pour quelles raisons passes-tu par des extend ?
    Si c'est pour supprimer le paragraphe, il suffit de supprimer le contenu de l'objet dans ton code.

    Voilà un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SuppressionPara()
    Dim oPar As Paragraph
     
    For Each oPar In ActiveDocument.Paragraphs
    If Left(Right(oPar.Range.Text, 7), 6) = "massa." Then
    oPar.Range.Delete
    End If
    Next oPar
     
     
     
    End Sub
    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 !

  12. #12
    Membre actif
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 631
    Points : 255
    Points
    255
    Par défaut
    Bonjour,
    Une étape à la fois
    Je te rassure, j'ai beaucoup appris dans ce poste ;>
    Pour quelles raisons passes-tu par des extend ?
    Je pensais que c'etait obligatoire pour supprimer la ligne entière.

    Le pb avec vba word c'est qu'on ne voit pas la valeur des variables comme avec Excel ; passer par des debug.print c'est un peu long.

    En tout état de cause, j'ai beaucoup travaillé avec vos idées, je vous en remercie.
    ta dernière proposition fonctionne très bien ; je t'en remercie beaucoup.
    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2012, 13h49
  2. Une boucle pour supprimer des lignes ?
    Par eldoir dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/04/2012, 18h43
  3. sed et boucle pour pour supprimer des lignes
    Par edouardj dans le forum Linux
    Réponses: 15
    Dernier message: 09/11/2007, 12h39
  4. Réponses: 2
    Dernier message: 29/08/2006, 13h59
  5. Shell pour supprimer des lignes d'un fichier
    Par nelsa dans le forum Autres langages
    Réponses: 2
    Dernier message: 20/09/2004, 12h26

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