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

Word Discussion :

Problème de remplacement de mot dans une boucle


Sujet :

Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Par défaut Problème de remplacement de mot dans une boucle
    Bonjour à tous,

    Je suis nouveau ici et cela fait à peine une semaine que j'ai débuté à faire des macro VBA sur word dans le cadre d'un stage.
    Je m'excuses donc par avance si je dit de grosses bêtises ou si je ne comprends pas bien tout.

    Voila mon problème:

    Je dois créer un macro qui corrige directement des mots ou des phrases dans un document word. Ces mots ou ces phrases étant toujours les mêmes j'ai donc pu le faire à l'aide de "Sélectionner/remplacer". Cependant à un moment j'ai dû effectuer la recherche en fonction d'un mot variable mais toujours positionné à une position spécifique. J'ai donc réussi à rechercher ce mot que je doit alors corriger en fonction de cinq mots possible. J'ai d'ailleurs créé un Userform pour cela.

    Mon code de recherche

    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
     Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "<liseré> <(*)>"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
        Selection.Find.Execute
        While Selection.Find.Found
            aMotTrouve = Selection.Range.Words(2)
            If ((Not ("violet " = aMotTrouve)) And (Not ("rouge " = aMotTrouve)) And (Not ("orange " = aMotTrouve)) And (Not ("vert " = aMotTrouve)) And (Not ("bleu " = aMotTrouve))) Then MsgBox aMotTrouve, vbCritical, "Erreur couleur liseré"
            If ((Not ("violet " = aMotTrouve)) And (Not ("rouge " = aMotTrouve)) And (Not ("orange " = aMotTrouve)) And (Not ("vert " = aMotTrouve)) And (Not ("bleu " = aMotTrouve))) Then Correc_couleur.Show
    Selection.Find.Execute
           Wend
    Avec le code pour le UseForm "Correc_couleur " qui est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Corriger_Click()
    With Selection.Find
        .Text = Fenetre_EDD.aMotTrouve
        .Replacement.Text = Correc_couleur.Liste_couleur.Value
        .Forward = True
        .ClearFormatting
        .Wrap = wdFindContinue
        .Execute Replace:=wdReplaceAll
    End With
    Selection.Find.Execute
    Unload Me  ' Ferme le UserForm
     
    End Sub

    Le problème, c'est que quand j'effectue cette macro, elle me propose de corriger le premier mot qui à un problème d'orthographe mais pas les suivants si il y en a ...
    J'ai l'impression que c'est un problème lié au Select.Find mais je n'en suis pas sûr et j'ai essayé plusieurs choses sans succès

    Pouvez vous m'aidez s'il vous plaît. J'espère avoir été suffisamment clair.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Par défaut Solution provisoire
    Bonjour à tous!

    J'ai trouvé une solution "moyenne" pour pallier à mon problème mais je pense quand même qu'il y a mieux à faire ...
    J'ai créé une boucle for avant mon code pour qu'il le répète un certain nombre de fois:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Dim i As Integer
    i = 1
     
    For i = 1 To 10
     Selection.HomeKey Unit:=wdStory
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "<liseré> <(*)>"
            .Forward = True
            .Wrap = wdFindContinue
            .Format = False
            .MatchCase = False
            .MatchWholeWord = False
            .MatchAllWordForms = False
            .MatchSoundsLike = False
            .MatchWildcards = True
        End With
        Selection.Find.Execute
        While Selection.Find.Found
            aMotTrouve = Selection.Range.Words(2)
            If ((Not ("violet " = aMotTrouve)) And (Not ("rouge " = aMotTrouve)) And (Not ("orange " = aMotTrouve)) And (Not ("vert " = aMotTrouve)) And (Not ("bleu " = aMotTrouve))) Then MsgBox aMotTrouve, vbCritical, "Erreur couleur liseré"
            If ((Not ("violet " = aMotTrouve)) And (Not ("rouge " = aMotTrouve)) And (Not ("orange " = aMotTrouve)) And (Not ("vert " = aMotTrouve)) And (Not ("bleu " = aMotTrouve))) Then Correc_couleur.Show
     
        'Selection.Find.ClearFormatting
        'With Selection.Find
         '   .Text = "<liseré> <(*)>"
         '   .Forward = True
         '   .Wrap = wdFindContinue
         '   .Format = False
         '   .MatchCase = False
         '   .MatchWholeWord = False
         '   .MatchAllWordForms = False
         '   .MatchSoundsLike = False
         '   .MatchWildcards = True
      '  End With
     
            Selection.Find.Execute
           Wend
    Next i
    Le problème de cela est que si il y a plus d'erreurs que le nombres de fois où je répète la boucle alors la macro ne corrigera pas toute les erreurs, mais si je mets un nombre trop important de répétition de la boucle, le macro plante ...
    Cependant je n'ai pas trouvé de meilleur solution que celle ci pour l'instant

    Help please

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par yberard Voir le message
    Bonjour,

    Sans la méthode Find mais en testant la présence des chaînes dans chaque paragraphe :

    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
    27
    28
     
    Sub VerificationCouleursLisere()
     
    Dim DocEnCours As Document
    Dim I As Integer, J As Integer
    Dim MesCouleurs As Variant
    Dim MotTrouve As Boolean
     
        MesCouleurs = Array("violet", "rouge", "orange", "vert", "bleu")
        Set DocEnCours = ActiveDocument
     
        With DocEnCours
             For I = 1 To .Paragraphs.Count
                 If InStr(1, .Paragraphs(I).Range.Text, "<liseré> <(*)>", vbTextCompare) > 0 Then
                    MotTrouve = False
                    For J = LBound(MesCouleurs) To UBound(MesCouleurs)
                        If InStr(1, .Paragraphs(I).Range.Text, MesCouleurs(J), vbTextCompare) > 0 Then MotTrouve = True
                    Next J
                    If MotTrouve = False Then
                       MsgBox "Erreur couleur liseré au paragraphe " & I
                       ' Suite du programme
                    End If
                 End If
             Next I
        End With
        Set DocEnCours = Nothing
     
    End Sub

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Comment remplacer un mot dans une chaines de caractere?
    Par lakhdharani dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/02/2009, 11h58
  3. Problème de découpage de mots dans une phrase
    Par claire_cartier dans le forum C
    Réponses: 2
    Dernier message: 26/05/2008, 14h36
  4. remplacer un mot dans une ligne
    Par italiasky dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 08/04/2007, 19h19

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