Recherche d'une occurrence dans un répertoire de fichiers Word

Je te le souhaite en tout cas.

Peut-être qu'en postant ce message à la rubrique Office, tu auras plus de chances d'obtenir une solution.

OK je tente ;-)

Re-bonsoir mon ami(e)

J'ai trouvé ce code sur un forum, pourrais-tu m'aider à l'adapter à mon problème ?

17new-code.txt (2.73 Ko)

Bonjour , ci joint un essai :

26sn2.xlsm (22.33 Ko)

dans le bas d'excel dans la partie statut, le code indique quelle ligne est en cours de traitement...

excelpratique2

car en fonction du nombre de fichiers présents dans le dossier devis... et le nombre de ligne a rechercher.... cela peut-être long a s'exécuter

ps : fonctionne sur office 2019 sur mon poste... il faudrait que tu précise ta version d'office dans ton profil

Fred

BORDEL DE MER........ ça fonctione !!!!!!!!!!!!!!

Alors toi tu es trop fort !!!!!!

Merci, Merci et Merci ..........

Merci bcp à toi et 3GB de m'voir aidé à résoudre mon problème.

Bon we à vous 2 et tous les membres de ce site génial ;-)

C'est super ! Parfois, ça ne tient à pas grand-chose...

Et quel code as-tu utilisé finalement ?

j’ai utilisé le code que tu as corrigé avec c:\devis

Il marche au top...

Je l’ai lancé il est en train de tourner sur 1000 numéros de série 😀😀😀😀

A bientôt j’espère

Est-ce que tu pourrais le poster pour qu'on ait le code opérationnel ? Car on a fait des modifications au niveau de la ligne Find donc je sais pas trop duquel tu parles.

On sait jamais, ça pourrait servir à quelqu'un, à moi aussi peut-être un jour...

Merci ! Et bonne inspection alors !

A bientôt,

Pas de souci je fais ça dès que mon pc m’aura rendu la main...d’ici 1 ou 2 jours je pense 😂😂😀

! Ah oui, par contre, ouvrir tous les fichiers pour chaque numéro de série, ça prend du temps ! Et bien, bon week-end alors

Re bonjour

Alors cela en est où ??? quelle ligne /1000 ???

@3GB

pour info la recherche dans le document word :

         With WApp.Selection.Find
            .Text = ws.Cells(i, "A") '"CZ37191HYJ"
            .Forward = True
            .Execute
            If .Found = True Then ws.Cells(i, 2) = sNomFichier
        end with

une fois la recherche effectuée... il faut savoir si cela a été trouvé... donc.found

https://docs.microsoft.com/fr-fr/office/vba/api/word.find.found

Fred

Merci Fred !

Mais justement, la méthode find, je l'avais trouvée sur Microsoft Docs mais elle ne fonctionnait pas apparemment, et je n'étais pas sûr d'avoir bien sélectionné tout le document juste avant :

.wholestory '???

'ou

.range(0,0).select
selection.moveend wdstory '???

C'est ça que j'aimerais savoir.

Cdlt,

On fait une instance word

WApp = createobject.....

donc même si word était déjà lancer on fait une nouvelle instance et ensuite on ouvre fichier word par fichier word... dans cette instance

Donc en faisant :

WApp.Selection.Find

On fait une recherche sur l'instance Wapp et donc comme il n'y a qu'un seul fichier ouvert c'est forcément le bon sur lequel on fait la recherche

Fred

J'avoue que je n'avais jamais fait avant... et j'ai fait des recherches pour pouvoir répondre à ce fil...

C'est comme cela que j'interprète la chose... mais je me trompe peut-être...

Fred

Moi je n'ai pas pu tester donc je ne sais pas ce qui se passe dans quel cas. Mais j'avais cru comprendre qu'il fallait stipuler une sélection de la totalité du document avant de lancer la méthode find pour être certain d'obtenir la correspondance.

Sinon, wApp.odoc.selection peut valoir la première range du document ou bien la sélection sans pour autant qu'il s'agisse du document.

Mais est-ce que tu as testé avec cette partie de code ?

En tout cas, merci pour tes recherches !

Non pas tester...

Je regarderais demain.. car là sur le téléphone c'est pas possible...

Bonne soirée

Fred

Bonjour les amis,

Le code fonctionne à merveille ... j'ai pu retrouver presque tous les fichiers.

C'est ce code qui fonctionne ;-)

Merci encore ;-)

17sn2.xlsm (19.98 Ko)

Bonjour Hedi,

Merci pour ton post ! Je voulais que le code soit affiché en fait, pour qu'il puisse être visible directement. Je l'ai cependant modifié comme j'estime qu'il devrait être (d'après ton énoncé initial), et plus ou moins comme je l'avais codé au départ, à savoir sans effectuer de sortie de la boucle while dès qu'il y a une correspondance car il n'est pas impossible que plusieurs fichiers contiennent un même numéro de série.

Sub Importation_Donnees_Word()

    Dim ws As Worksheet         'onglet Excel dans lequel on importe les données
    Dim sChemin As String       'répertoire contenant les fichiers Word
    Dim sNomFichier As String   'nom du fichier Word
    Dim WApp As Object, WDoc As Object, WSel As Object
    Dim i%, n%

    ' -- Initialisation des variables
    Set ws = Thisworkbook.Sheets(1)
    sChemin = "C:\Devis" & "\"
    Set WApp = CreateObject("Word.Application") 'pour créer un objet Word
    WApp.Visible = True                        'ne pas afficher Word pendant l'exécution

    Application.ScreenUpdating = False

    For i = 2 To ws.Range("A" & Rows.Count).End(xlUp).Row
        sNomFichier = Dir(sChemin & "*.doc*")       'pour ouvrir tous les fichiers .doc*. 1er fichier.
        Do While Len(sNomFichier) > 0
            Set WDoc = WApp.Documents.Open(sChemin & sNomFichier)   'ouvre le document Word
            With WApp.Selection.Find
                .Text = ws.Cells(i, 1)
                .Forward = True
                .Execute
                If .Found = True Then
                    n = n + 1 'incrémentation de n, ligne d'import
                    ws.Cells(n, 2) = sNomFichier 'col 2 prend nom de fichier
                    ws.cells(n, 3) = "n° " & i - 1 'colonne 3 prend position du n° série dans la liste en col A
                end if
            End With
            WDoc.Close False                'fermer le document Word sans enregistrer
            sNomFichier = Dir               'prochain document
        Loop    
    Next i

    Application.ScreenUpdating = True
    WApp.Quit

End Sub

Merci pour ton retour et bonne continuation !

👍👍👍👍👍👍👍👍👍👍👍👍👍👍

Rechercher des sujets similaires à "recherche occurrence repertoire fichiers word"