Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/12/2011, 15h49   #1
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Par défaut Recherche de toutes les occurences ressemblant à

Bonjour

J'ai un document word dans lequel des TAGS (sous forme de chaines de caractères) sont positionnés.

ex : [EX-y-aze] ou 'y' et 'AZE' sont variables.

Le but est de retrouver toutes les occurences présentes dans un document donné et de les recopier dans Excel.

La commande Find me permet juste de savoir si ca existe ou pas mais pas d'avoir la position dans le doc de ladite chaîne de caractères.

D'avance merci pour votre aide
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 19h07   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

La position exacte, si, mais il faut une ou deux manipulations supplémentaires.
Par contre, si c'est simplement pour recopier les occurences, c'est facile, Find appliqué à un objet Selection le déplace d'occurence en occurence.
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 10h23   #3
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Par défaut Retrouver des chaines dans un document

Bonjour

J'ai un gros document (environ 300 pages) duquel je dois retrouver et extraire des chaines de caractères.

Ces chaînes sont de la forme : [XY-ZE-abc] où bien sur XY, ZE, abc sont soit des les lettres ou des chiffres.

Pour compliquer légèrement je fais celà depuis excel mais c'est juste une petite indirection supplémentaire.

J'ai donc tenté la commande "find" mais celle ci me dit que la chaine existe mais c'est tout.

Le code suivant :

Code :
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 Recherche_Occurence()
 
    Dim Ltexte As Word.Words
 
    ' On ouvre le fichier
    Ouverture_word
 
    ' Recherche des occurences
 
    If Not GwordDoc Is Nothing Then
       Set Ltexte = GwordDoc.Content.Words
 
       Lligne = 1
       For Li = 1 To Ltexte.Count
         If Left(Ltexte(Li), 4) = "[XY-" Then
            ActiveWorkbook.Sheets("Feuil3").Range("A" & Lligne).Formula = Ltexte(Li)
            Lligne = Lligne + 1
         End If
       Next Li
       'Loccurence = GwordDoc.Content.Find.Execute(FindText:="{AI-T-PER-010}", Forward:=True)
    End If
 
    ' On referme le fichier
    Fermeture_word
End Sub
Mais malheureusement ce bout de code prend des siècles pour s'executer....

Je suis donc à la recherche d'une méthode rapide (c'est à dire qq minutes) et efficace.

D'avance merci de votre aide et bonnes fêtes de fin d'année.
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 10h27   #4
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Bonjour

Je ne retrouvais plus ma demande et donc je viens d'en créer une autre

Donc, si je comprend bien, il est simple de connaitre la position de l'occurence trouvée dans le texte, de la recopier ensuite dans excel et ensuite de passer à la suivante.

J'avoue être preneur des 2, 3 manip supplémentaires que j'ignore complètement.

Bonnes fêtes de fin d'année.
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/12/2011, 11h45   #5
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

Je vais te donner un lien vers un Tuto qui n'est pas encore terminé mais qui contient ce que tu cherches.

http://heureuxoli.developpez.com/off...emplacer/#L3-B

On y fait une boucle de recherche.
Dans le tuto, je fais cette boucle sur plusieurs mots différents de plusieurs documents.

Dans ton cas, c'est juste un boucle sur un document.
Chaque fois qu'une occurrence est trouvée, elle est utilisée.

A toi de voir si ce tuto peut t'aider.

Dis nous quoi.
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h34   #6
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Bonjour et tous mes voeux pour cette nouvelle année,

Tout d'abord merci pour ce tutorial qui a le mérite d'expliciter le fonctionnement de la fonction recherche.

Par contre, celà ne correspond pas tout à fait à mon besoin.

Ce que j'essaye de faire, c'est :
1> ouvrir un document word depuis Excel (là pas de souci)
2> Dans ce document, je veux retrouver ttes les occurences du type [EX-y-aze] ou 'y' et 'aze' sont variables. Bien sur je ne connais pas à l'avance les valeurs possibles de 'aze'.
3> Si une occurence est trouvée, je veux pouvoir aller lire cette occurence et recopier la valeur trouvée dans une cellule Excel.

La difficulté pour moi est que la fonction Find me permet éventuellement de trouvé ma chaine avec des patterns mais je ne sais pas du tout où se trouve cette chaine dans le document. Je suis donc incapable d'aller au début de la chaine et de récupérer l'info.

D'avance merci de m'indiquer s'il y a des pistes à explorer. Il me semble que ce que je demande n'est pas si extraordinaire que ça mais j'avoue mon impuissance à trouver la solution.
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h46   #7
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 26
Localisation : France, Haute Loire (Auvergne)

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

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 597
Points : 1 597
Envoyer un message via MSN à carden752
Bonjour,

Citation:
La difficulté pour moi est que la fonction Find me permet éventuellement de trouvé ma chaine avec des patterns mais je ne sais pas du tout où se trouve cette chaine dans le document. Je suis donc incapable d'aller au début de la chaine et de récupérer l'info.
Est-ce que tu peux nous dire quel est pour toi "le début de la chaine" ? Le début d'une phrase? Le début du paragraphe? Le début de la page? Le début de la section?
La fonction find renvoie un objet range avec lequel tu peux te déplacer dans le document.
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 14h43   #8
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Bonjour

Ce que j'appelle "début de chaine" c'est la position exacte dans le texte de l'occurence.

Comme lorsque l'on recherche dans un texte donné une chaine avec la commande "Instr", on récupère ensuite la position de la première occurence t donc on est capable ensuite de manipuler le texte.

Dans mon cas, j'ai un document dont je ne connais pas à postériori le contenu. Je sais juste que j'ai des Tag dans ce document avec le format cité précedement.

Mon objectif est de trouver ttes les occurences, d'identifier chaque chaine et ensuite de les mettres dans un tableau.

Donc il faut que je puisse faire une boucle sur chaque réponse correspondant à mon pattern, ensuite je regarde les X caractères suivants (c'est ma chaine) et que je la stocke dans un tableau.

A la fin, j'ai un beau tableau avec ttes les chaines répondants aux critères de recherche.

J'espère avoir été plus clair.
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 18h21   #9
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 343
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 343
Points : 29 254
Points : 29 254
Salut,

C'est ce qu'il y avait dans mon lien non ?
__________________
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 15h58   #10
Membre du Club
 
Inscription : janvier 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 134
Points : 47
Points : 47
Le lien que tu as mis m'a permis de mieux comprendre le fonctionnement de Word et de VBA.

Par contre, mon souci est plus basé sur le fait que je ne connais pas à l'avance ce que je recherche. Mais en compulsant plusieurs infos glanées ça et là, j'ai pu mettre au point cette petite macro qui pour l'instant répond à mon besoin.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Lligne = 1
    If Not GwordDoc Is Nothing Then
        Gappli.Selection.HomeKey Unit:=wdStory
        Ltrouve = True
        Do
            Gappli.Selection.ClearFormatting
            With Gappli.Selection.Find
                .Text = "[EX-"
                .Execute
                Ltrouve = .Found
            End With
 
            If Ltrouve Then
                Gappli.Selection.Extend "]"
                Lvaleur = Gappli.Selection.Text
                ActiveWorkbook.Sheets("Feuil3").Range("A" & Lligne).Formula = Lvaleur
                Lligne = Lligne + 1
            End If
 
            'Permet de passer au suivant
            Gappli.Selection.Collapse Direction:=wdCollapseEend
        Loop While Ltrouve
    End If
Pour l'instant, je vais me contenter de celà.
Encore merci pour ton aide
basto est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h52.


 
 
 
 
Partenaires

Hébergement Web