Vba Word 2013 - Boucle For Each sur répertoire

Résolu
Hantar - Modifié par Hantar le 9/01/2016 à 11:20
 Habtar - 9 janv. 2016 à 12:25
Bonjour,

J'ai une macro qui, via une boucle
For each
balaie tous les documents qui se trouve dans un même dossier, elle fonctionne très bien (elle exécute toutes les instructions sur tous les documents du répertoire) sauf qu'à la fin, bien qu'elle ait traité tous les documents du répertoire, elle ne sort pas de la boucle... J'ai réfléchis pour forcer la sortie selon un test avec un
Exit For
ou un
GoTo
, mais je n'arrive à aucun résultat. Il faudrait, après avoir traité le dernier "oFil" du répertoire, que la boucle For s'arrête... Mais elle continue et me mets ensuite un message d'erreur sur la ligne :
Set oDocTrv = Documents.Open(oFil.Path)

Est-ce que quelqu'un aurait une idée ?

Voici la partie du code en question :
Dim oFso As FileSystemObject
Dim oFol As folder
Dim oFil As File
Dim oDlg As FileDialog
Dim stFolder As String
'Deux document, un qui recevra le résultat et un dans lequel
Dim oDocSource, oDocCible, oDocTrv As Document
Dim p, i As Integer

'Affectation des variables
Set oFso = New FileSystemObject
Set oDlg = Application.FileDialog(msoFileDialogFolderPicker)

'Affichage de la boîte de dialogue
oDlg.Show

For Each oFil In oFol.Files
        'ouverture des fichiers
        Set oDocTrv = Documents.Open(oFil.Path)
        'selection du fichier
        oDocTrv.Select
        'renvoie en début de ligne
        Selection.HomeKey Unit:=wdLine
        'boucle sur la table contenant les mots

        For Each oRw In oTbl1.Rows
            For p = 1 To Fin
     ....CODE....
            Next p
        Next oRw
        'Fermeture du document dans lequel nous effectuons la recherche
        oDocTrv.Close SaveChanges:=wdDoNotSaveChanges
    End If
Next oFil

4 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/01/2016 à 11:33
Bonjour,
Pourquoi t'acharnes-tu à passer par ce lourdaud de FSO (qui ne fonctionnerait d'ailleurs pas sur certaines machines, dont la mienne, où VBS a été inhibé pour des raisons de sécurité) ?
Je t'ai pourtant mis sur la voie dans cette autre discussion :
http://codes-sources.commentcamarche.net/forum/affich-10058812-extraction-de-paragraphes-selon-mots-cles#3
(que tu as ouverte sous le pseudo Habtar et continuée sous le pseudo Hantar)
Citation, donc :
- L'utilisation de la fonction Dir te permet de parcourir tous les fichiers .doc de ton répertoire

Avec ton FSO, tu utilises une pelle Pauclain pour planter ... un géranium, alors que la fonction Dir est native de VBA et fait tout cela très simplement !
Regarde cet exemple vite fait (bâclé) :
chemin = "d:\monoutil\"
filtre = "*.txt"
fichiers = Dir(chemin & filtre, vbHidden Or vbNormal)
Do While fichiers <> ""
MsgBox fichiers
fichiers = Dir
Loop

Il parcourt en revue tous les fichiers d'extension .txt du répertoire d:\monoutil\

EDIT : et
1) je te signale que ces 2 lignes de déclarations :
Dim oDocSource, oDocCible, oDocTrv As Document
Dim p, i As Integer
font que seul oDocsource est typée "as Document" et que seule p est typée "as Integer" et que toutes les autres variables ainsi déclarées sont typées en Variant !
2) je ne vois aucune déclaration ni initialisation de la variable oTbl1

3) je ne connais pas VBA et ignore ce que représente exactement la variable Rows. Je crains qu'elle n'aille au-delà de ce que tu penses. Vérifie ce point. Essaye par exemple d'afficher ce qu'est le nombre de ces rangs par :
msgbox oTbl1.Rows.Count


_______________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Merci pour la réponse. Je vais tester.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/01/2016 à 11:48
Je ne te reproche pas, bien au contraire, d'ouvrir une discussion séparée pour cette étape distincte de parcours des fichiers d'un dossier.
en revanche tes indications sur la fonction DIR (pour traiter les documents) étaient plutôt légère pour le novice que je suis et ne m'avaient donc pas permis de creuser davantage

il t'aurait pourtant suffi (surtout puisque novice) de regarder ce que dit ton aide vba (sur ta machine) aux rubriques :
Dir, fonction et Dir, fonction, exemple
Même les plus avertis (y compris moi-même) ouvrons et lisons presque systématiquement cette aide VBA.

PS : évite s'il te plait de changer de pseudo (on s'y perd). Utilise de préférence Habtar (qui est celui correspondant à un membre INSCRIT)
N'oublie pas de présenter tes lignes de code entre balises (lis ce qui en est dit dans les règles de ce forum). Un code non présenté entre balises code est peu lisible.


________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Problème résolu avec la fonction Dir
Merci
0
Rejoignez-nous