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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018219 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.