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 :

Rechercher dans un texte le contenu du presse-papiers à l'aide d'une macro


Sujet :

Word

  1. #1
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut Rechercher dans un texte le contenu du presse-papiers à l'aide d'une macro
    Bonjour,

    Je cherche à écrire une macro (principalement à l'aide de l'enregistreur de macros, car mon niveau est très faible en VBA) qui, à un moment, trouve dans un texte le contenu du presse-papiers.

    Je m'explique : mon but est d'identifier la prochaine ligne débutant par un texte qui se présentera sous la forme " XXX : " (où XXX est un texte défini par l'utilisateur).
    Ma macro ira copier ce texte puis lancer une recherche avec "With Selection.Find"
    Mais je ne sais pas comment indiquer à Word que le texte à chercher est le contenu du presse-papier.
    J'ai lu sur un forum qu'on pouvait faire une recherche sur ^c mais ça ne marche que pour un Rechercher/Remplacer, donc pas pour une simple recherche.

    J'espère avoir été suffisamment clair et que ma question inspirera quelqu'un.
    Merci.

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

    Ce que vous cherchez à faire correspond à l'exemple indiqué dans cette discussion #4 rechercher-2-mots-proches-meme-paragraphe-meme-page et qui ramène sur mon blog.

    Pour cet outil, j'utilise la collection Variables de Word.

    Vous avez une explication sur l'utilisation de la collection Variables sur mon blog également sauvegarder-lire-macro-infos-collection-variables-document-word

    Pour mémoriser le contenu du presse papier donc pour mémoriser le contenu de la variable, je rattache la macro à la barre d'outil d'accès rapide dans le document et non au Normal.dot.

  3. #3
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Bonjour,

    Merci pour votre réponse, mais ça dépasse largement mon niveau et le temps que je peux consacrer à combler mes lacunes en VBA (et accessoirement, je ne dispose que de Word 2003).

    Je propose de fonctionner autrement : j'ai collé ci-dessous la macro que j'ai créée.
    Elle fonctionne, sauf que j'aimerais que la recherche s'effectue sur le texte sélectionné au moment de lancer la macro.
    Si vous (ou qqn d'autre) pouvez m'aider à vaincre cette difficulté, je serai super heureux.

    En gros le fonctionnement idéal est simple :
    1/ dans la ligne de départ je sélectionne un texte
    2/ je lance la macro
    3/ si elle trouve plus bas le même texte que le texte sélectionné, elle coupe la ligne de départ et la colle au-dessus de la ligne où elle a trouvé le texte identique
    Comme ça j'ai regroupé 2 lignes qui comportent le même texte en début de ligne

    J'ai conscience que c'est du brutal, mais j'apprends petit à petit...

    Merci !
    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
    Sub regrouper_lignes()
    '
    ' copie le texte sélectionné
        Selection.Copy
        Selection.HomeKey Unit:=wdLine
     
    'insère un texte qui servira de repère en fin de macro
        Selection.TypeText Text:="µµµµ"
     
    'coupe la ligne où j'avais sélectionné mon texte
        Selection.EndKey Unit:=wdLine, Extend:=wdExtend
        Selection.Cut
     
    'cherche le texte sélectionné au départ (c'est celui qui est dans le presse-papier, mais que je ne sais pas indiquer comme texte recherché)
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "TRAVAIL : "
            .Replacement.Text = ""
            .Forward = True
        End With
        Selection.Find.Execute
     
    'insère le texte coupé
        Selection.HomeKey Unit:=wdLine
        Selection.Paste
        Selection.HomeKey Unit:=wdStory
     
    'cherche le "repère" que j'ai inséré au début
        Selection.Find.ClearFormatting
        With Selection.Find
            .Text = "µµµµ"
            .Replacement.Text = ""
            .Forward = True
        End With
        Selection.Find.Execute
     
    'efface le repère
        Selection.Delete Unit:=wdCharacter, Count:=1
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gloub gloub Voir le message
    Vous pouvez coller le contenu du presse papier via un InputBox. Ce que vous appelez ligne est en réalité un paragraphe dans votre document.
    Testez ce code et faîtes apparaître la fenêtre Exécution (Ctrl-G) :

    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
     
    Option Explicit
     
    Sub RepererLesLignes()
     
    Dim DocEnCours As Document
    Dim I As Long, IndexListe As Long
    Dim ChaineATrouver As Variant
    Dim ListeDesParagraphes() As Variant
     
     
        ChaineATrouver = InputBox("Collez la chaine à rechercher")
     
        Set DocEnCours = ActiveDocument
        With DocEnCours
     
             ReDim ListeDesParagraphes(.Paragraphs.Count - 1, 1)
             IndexListe = 0
     
             For I = .Paragraphs.Count To 1 Step -1
                 ListeDesParagraphes(IndexListe, 0) = I
                 If InStr(1, .Paragraphs(I).Range.Text, ChaineATrouver, vbTextCompare) > 0 Then
                    ListeDesParagraphes(IndexListe, 1) = "X"
                 End If
                 IndexListe = IndexListe + 1
             Next I
        End With
     
        For IndexListe = LBound(ListeDesParagraphes, 1) To UBound(ListeDesParagraphes, 1)
            If ListeDesParagraphes(IndexListe, 1) = "X" Then
               Debug.Print ListeDesParagraphes(IndexListe, 0) & " : " & ListeDesParagraphes(IndexListe, 1)
            End If
        Next IndexListe
     
        Set DocEnCours = Nothing
     
    End Sub
    Dans la fenêtre exécution, vous aurez la liste des paragraphes contenant la chaîne recherchée. Il ne vous restera plus qu'à couper ces paragraphes avec une boucle sur la matrice des paragraphes (ListeDesParagraphes) en commençant par la fin (sinon vous allez perdre l'indexation de vos paragraphes) et les recoller à la fin du document. En clair, la suite de votre code doit remplacer la ligne Debug.print...

  5. #5
    Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Septembre 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Septembre 2018
    Messages : 56
    Points : 45
    Points
    45
    Par défaut
    Hem hem...

    C'est très gentil d'avoir répondu à mon message....mais ça dépasse mes compétences.
    J'espérais qu'il y avait juste un petit truc à savoir, je me rends compte qu'il me faudrait acquérir des notions que je n'aurai pas le temps de chercher ni d'assimiler, tout ça pour une macro qui devait à la base m'apporter un petit confort supplémentaire.
    Du coup, je laisse tomber.
    Mais merci d'avoir fait l'effort de m'aider

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/09/2007, 09h46
  2. Réponses: 5
    Dernier message: 13/07/2007, 14h46
  3. Recherche dans champs texte SQL 2005
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 15/03/2007, 17h23
  4. [Regexp] Recherche dans un texte formaté html
    Par YavaDeus dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 09/02/2006, 17h46
  5. [Debutant] TStrings et recherche dans le texte
    Par muquet dans le forum Langage
    Réponses: 3
    Dernier message: 11/01/2006, 16h02

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