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 :

Selection de mots dans une liste et les mettre en rouge


Sujet :

VBA Word

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Selection de mots dans une liste et les mettre en rouge
    Bonjour, je suis nouveau ici et pas expert en VB, plutôt autodidacte et pas informaticien.
    J'aurais souhaité quelques conseils pour améliorer mes macros sur Word.

    J'ai un long texte de plusieurs pages (~100) et qui change régulièrement.
    Je souhaite faire une recherche dans ce texte de mots (~50) que je définis au préalable mais qui peuvent évoluer au cours du temps (ajout de mots).

    J'ai défini mes mots dans la propriété Caption de CheckBox. J'ai donc une 50n de CheckBox, ce n'est pas pratique du tout (mais ça marche), je ne sais pas comment faire autrement alors je souhaiterais connaitre une autre façon de faire plus efficace et rapide.

    Une macro Check tous les CheckBox en une fois. Et pour chaque CheckBox j'ai défini une macro qui met le texte trouvé (correspondant au caption du CheckBox) en rouge et en gras.

    Voila l'exemple d'un des CheckBox :

    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
     
    Private Sub CheckBox41_Click()
     
    If CheckBox41.Value = True Then
    e = 0
    Selection.HomeKey Unit:=wdStory
     
    While (e <> 1)
    Selection.Find.ClearFormatting
     
    Selection.Find.Text = CheckBox41.Caption
    Selection.Find.Execute
     
    If Not (Selection.Find.Found) Then
        e = 1
    Else
        Selection.Font.Color = wdColorRed
        Selection.Font.Bold = wdToggle
    End If
    Wend
    End If
    End Sub
    Je souhaiterais connaitre une autre façon de faire cela plus rapidement car lorsque je dois faire une mise à jour des Caption des CheckBox et en ajouter de nouveaux cela me prend un temps fou ...

    Sinon je cherche une méthode qui me permettrait de faire quelque chose du genre :

    Pour n=1 à 100
    Selection.Find.Text = CheckBox[n].Caption
    ...
    'Puis qui réalise le contenu de ma macro (mettre en rouge et en gras).


    Merci par avance.

    Axel

  2. #2
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Plusieurs options sont envisageables :
    1. Une liste déroulante si besoin de sélection via userform pour dépasser la limite de 25
    2. Le chargement des mots depuis un fichier texte
    3. Un tableau en indiquant les mots à rechercher dans chaque cellule en première page ou sur un autre document.
    4. Un paragraphe avec tous les mots à rechercher en première page ou sur un autre document dans éventuellement un signet séparés éventuellement par un caractère spécifique (groupe de mots).
    5. Lister dans une variable de type tableau en VBA les mots.


    Cela permettrait éventuellement de garder un historique des mots recherchés et éventuellement les rechercher à nouveau pour tes documents.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Merci Carden pour ces conseils !

    L'option 4 me semble la plus adaptée et la plus simple pour mon projet

    De façon à avoir sur la premiere page :

    #DEBUT LISTE MOTS#

    mot1 mot2 mot3
    mot4
    ...

    #FIN LISTE MOTS#


    Et tout mon texte à partir de la page 2.

    Par contre je ne sais pas comment faire une recherche de ces mots entre balise.
    Quelqu'un peut me donner une piste ?

    Merci beaucoup !

  4. #4
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Tu peux avec la structure suivante :
    Début liste mot
    Mot1 mot2 mot3 mot4
    Fin liste mot

    utiliser une procédure de ce style qui t'affiche tous les mots
    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
    Sub parcoursmots()
    Dim monmot As Object
    Dim rdébutmot As Long, rfinfinmot As Long
    Dim rliste As Range
     
    Selection.HomeKey wdStory
    Selection.Find.ClearFormatting
    'recherche de la zone début liste mot
    With Selection.Find
    .Text = "Début liste mot"
    .Execute
    End With
    '+1 pour éliminer la marque de paragraphe
    rdébutmot = Selection.End + 1
     
    Selection.HomeKey wdStory
    'recherche de la zone fin liste mot
    With Selection.Find
    .Text = "Fin liste mot"
    .Execute
    End With
    '-1 pour éliminer la marque de paragraphe
    rfinmot = Selection.Start - 1
     
    'Initialisation de la zone
    Set rliste = ActiveDocument.Range(rdébutmot, rfinmot)
    For Each monmot In rliste.Words
    MsgBox monmot
    Next
    End Sub
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup !
    J'ai du boulot maintenant ...

    J'ai essayé avec mon bout de code mais cela ne met en rouge que le texte de la liste de mot pas ceux de la suite, normal vu que ca semble faire la boucle dans la liste...

    Faut il que je déclare une autre liste (début/fin) qui part de la 2eme page et qui fini au dernier mot de mon document afin de spécifier de recherche dans mon texte (liste2) les mots indiqués dans la liste1 ?

    Ou alors il y a un moyen plus simple mais je ne le trouve pas.

    Merci d'avance.

  6. #6
    Membre expert

    Homme Profil pro
    Spécialiste progiciel
    Inscrit en
    Février 2010
    Messages
    1 747
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Spécialiste progiciel
    Secteur : Service public

    Informations forums :
    Inscription : Février 2010
    Messages : 1 747
    Points : 3 016
    Points
    3 016
    Par défaut
    Bonjour,

    Effectivement, il te suffit de déclarer une deuxième zone entre la fin de la liste et la fin du document
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dim r as range
    set r=ActiveDocument.Range(rfinmot+1,activedocument.content.end -1)
    puis tu remplaces dans ton code l'objet selection par l'objet range déclaré
    r.find.clearformatting....
    Pour rendre ton code plus portable, le mieux est de faire 2 procédures dont notamment une qui prendrait en paramètre la zone de recherche et le mot à rechercher.
    Il pourrait au final s'agir de quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sub metenrouge (mazone as range, monmot as string)

    Dans le code principal, on aurait donc un appel de ce type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'Définition de la plage de recherche
    set r=ActiveDocument.Range(rfinmot+1,activedocument.content.end -1)
    'Appel pour chaque mot de la fonction
    For Each monmot In rliste.Words
    call metenrouge(r, monmot)
    Next

    Je te laisse essayer d'adapter ce code à ton besoin. Attention, si tu utilises 2 procédures, il te faudra pas oublier de modifier partout les variables passées en paramètre.
    Cordialement,
    Christophe

    Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche

  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,

    Quelques explications là : http://heureuxoli.developpez.com/off...emplacer/#L3-A ?
    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 à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2014
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Merci beaucoup pour les conseils.
    Je vais essayer de voir cà ce week end !

Discussions similaires

  1. Réponses: 35
    Dernier message: 26/09/2010, 21h38
  2. Réponses: 1
    Dernier message: 18/08/2010, 14h32
  3. [J2SE 5.0] Insérer plusieurs type dans une liste. Et les récupérer!
    Par HebusBreizh dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/09/2007, 15h32
  4. comment mettre une image dans une liste avec les values ?
    Par Ekimasu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 15/05/2007, 17h51
  5. Réponses: 1
    Dernier message: 24/02/2007, 12h53

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