[VBA] Execution d'une macro sur des fichiers trouvés
Dernière réponse : dans Programmation
Bonjour a tous et a toute,
pour mon stage, je dois passer plein de fichier enregistré au format html office au format html filtré (sans les tags d'office qui alourdissent)
malgré le fait que je suis debutant en Vba et a l'aide d'internet j'ai fais cette macro qui marche
mais le probleme c'est que je dois mettre tous mes fichiers dans un seul dossier. or ils sont tous dans des repertoires particuliers.
je sais qu'il existe des fonction recherches mais j'arrive pas a les excuter.
comment faire pour que ma macro les recherches dans un repertoire et sous-repertoires et les modifies?
Merci d'avance
pour mon stage, je dois passer plein de fichier enregistré au format html office au format html filtré (sans les tags d'office qui alourdissent)
malgré le fait que je suis debutant en Vba et a l'aide d'internet j'ai fais cette macro qui marche
Public Sub BatchMacro()
' Exécute par lot sur une série de fichiers la convertion html->html filtré
' Version légère pour WD2002+ seulement : utilise le FilePicker
' Anacoluthe pour le MPFW et la FAQ à m@rina
Dim NomMacro As String
Dim vFichier As Variant
Dim RetourDL As Long
Dim NbFichOK As Integer
' 1- Sélection des fichiers
' Le FilePicker permet de sélectionner le répertoire puis dedans
' des fichiers avec Maj ou Ctrl ou tous les fichiers avec Ctrl+A
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
fd.Title = "Sélectionner les fichiers à traiter"
If fd.Show <> -1 Then Exit Sub
If MsgBox(fd.SelectedItems.Count & " documents à traiter ", vbYesNo, _
"continuer ?") = vbNo Then Exit Sub
' 2- Exécution de la macro dans tous les fichiers choisis
' la macro doit agir uniquement sur le document actif et le fermer
For Each vFichier In fd.SelectedItems
On Error GoTo Suivant
Application.Documents.Open FileName:=vFichier, _
AddToRecentFiles:=False, ConfirmConversions:=False, _
Visible:=True
On Error GoTo Fermer
NbFichOK = NbFichOK + 1
Fermer:
On Error GoTo Suivant
ActiveDocument.SaveAs FileName:=vFichier, FileFormat:=wdFormatFilteredHTML, LockComments:=False, Password:="", AddToRecentFiles _
:=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
ActiveDocument.Close
Suivant:
On Error GoTo 0
Next vFichier
' 4 fin de la BatchMacro
MsgBox ("La macro a été exécutée sur " _
& NbFichOK & " Fichiers")
Set fd = Nothing
End Sub
mais le probleme c'est que je dois mettre tous mes fichiers dans un seul dossier. or ils sont tous dans des repertoires particuliers.
je sais qu'il existe des fonction recherches mais j'arrive pas a les excuter.
comment faire pour que ma macro les recherches dans un repertoire et sous-repertoires et les modifies?
Merci d'avance
Autres pages sur : vba execution macro fichiers trouves
Lassé par la pub ? Créez un compte
bon j'ai trouvé une solution à la barbare.
je fais une recherche avec l'outil recherche de l'explorateur
j'ouvres tout mes fichiers dans word et aprés je j'execute la macro suivante
avec i fixé suivant le nombre de fichiers que j'ai
c'est bourrin mais ca marche. si vous avez mieu je suis preneur merci d'avance car j'ouvre d'abord tout mes documents d'un coup pour ensuite appliquer la macro ce qui sur une operation de plus de 200 documents fais ramer le pc
donc si vous avez une solution plus "élegante" je suis preneur.
cordialement
je fais une recherche avec l'outil recherche de l'explorateur
j'ouvres tout mes fichiers dans word et aprés je j'execute la macro suivante
avec i fixé suivant le nombre de fichiers que j'ai
Sub Macro1()
For i = 1 To 198
Dim strPath As String
strPath = Application.Options.DefaultFilePath(wdDocumentsPath)
Application.ChangeFileOpenDirectory strPath
Application.Options.DefaultFilePath(wdDocumentsPath) = strPath
ActiveDocument.SaveAs FileFormat:= _
wdFormatFilteredHTML, LockComments:=False, Password:="", AddToRecentFiles _
:=False, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
ActiveDocument.Close
Next i
End Sub
c'est bourrin mais ca marche. si vous avez mieu je suis preneur merci d'avance car j'ouvre d'abord tout mes documents d'un coup pour ensuite appliquer la macro ce qui sur une operation de plus de 200 documents fais ramer le pc
donc si vous avez une solution plus "élegante" je suis preneur.
cordialement
Salut JusteDieu
Bienvenu sur PPC.
Tu sembles courageux et débrouillard :
2°) [Je me sers de ..] l'aide d'internet
3°) [...j'ose poser des questions sur PPC...]
4°) j'ai trouvé une solution [et je la poste].
C'est tout à fait dans l'esprit du site.
Plus qu'à utiliser les balises [CODE] à bon escient et tu seras rodé.
N'hésite pas à nous solliciter
Bienvenu sur PPC.Tu sembles courageux et débrouillard :
Citation :
1°) je suis debutant2°) [Je me sers de ..] l'aide d'internet
3°) [...j'ose poser des questions sur PPC...]
4°) j'ai trouvé une solution [et je la poste].
C'est tout à fait dans l'esprit du site.
Plus qu'à utiliser les balises [CODE] à bon escient et tu seras rodé.
N'hésite pas à nous solliciter
Pour ne pas mélanger le code du site (en html), nos messages se rédigent en bbcode. Par exemple, pour citer quelqu'un, au lieu de mettre <quote> on met
Donc, puisque tu as encore trouvé tout seul (tu postes plus vite que tu réfléchis ?), il te reste à éditer des posts précédents et à ajouter au début et à la fin de ton code les balises [code] et [/ code] (sans l'espace, hein)
Pourquoi ?
- Pour faire joli
- Pour avoir un message facilement lisible
- Pour montrer du respect envers le site et ceux qui y postent
- Par politesse
- Parce que c'est la règle
- Parce que il y a un topik qui s'appelle Quelques règles simples à respecter -- /!\ A lire avant de poster ! et que sa lecture est judicieuse !!!!!
Choisis une ou plusieurs raisons et mets nous ces fichues balises !!!
Citation :
! Pour présenter du code, on met [code].Donc, puisque tu as encore trouvé tout seul (tu postes plus vite que tu réfléchis ?), il te reste à éditer des posts précédents et à ajouter au début et à la fin de ton code les balises [code] et [/ code] (sans l'espace, hein)
Pourquoi ?
- Pour faire joli
- Pour avoir un message facilement lisible
- Pour montrer du respect envers le site et ceux qui y postent
- Par politesse
- Parce que c'est la règle
- Parce que il y a un topik qui s'appelle Quelques règles simples à respecter -- /!\ A lire avant de poster ! et que sa lecture est judicieuse !!!!!
Choisis une ou plusieurs raisons et mets nous ces fichues balises !!!
Voila c'est fait.
pourquoi j'ai posté 2 heure après la réponse?
-parceque je poste plus vite que je reflechis
-parceque je chercher deja depuis un bout de temps pour pas demander sans avoir chercher
-parceque cette solution est faite de maniére barbare et pourrait etre plus simple a mon avis
Choisis une ou plusieurs raisons mais tu remarqueras que j'ai mis les balises.
voila et desolé de n'avoir pas poster correctement
pourquoi j'ai posté 2 heure après la réponse?
-parceque je poste plus vite que je reflechis
-parceque je chercher deja depuis un bout de temps pour pas demander sans avoir chercher
-parceque cette solution est faite de maniére barbare et pourrait etre plus simple a mon avis
Choisis une ou plusieurs raisons mais tu remarqueras que j'ai mis les balises.
voila et desolé de n'avoir pas poster correctement
je connait pas les macros word mais ca doit pas trop changer d'excel.
Il me semble que pour changer le format d'un fichier tu n'ai pas d'autre choix que de l'ouvrir puis de l'enregistrer sous le format qui t'intéresse, comme tu as fait.
Pour le coup où ton pc ralentit, il existe beaucoup de petites astuces permettant d'optimer la vitesse d'exécution
J'en connait 2 principale:
ca te fait gagner un temps énorme pendant l'exécution de ta macro, surtout quand il faut ouvrir une quantité de fichier.
Je suppose que si tu ouvres tes fichiers, ca veut aussi dire que tu les ferme juste après avoir fait la changement de format.
En tout cas, si tu ne le fais pas, fais le, et avec ca :
Il me semble que pour changer le format d'un fichier tu n'ai pas d'autre choix que de l'ouvrir puis de l'enregistrer sous le format qui t'intéresse, comme tu as fait.
Pour le coup où ton pc ralentit, il existe beaucoup de petites astuces permettant d'optimer la vitesse d'exécution
J'en connait 2 principale:
Mais oublie pas de mettre
Application.ScreenUpdating = False
Application.ScreenUpdating = True
ca te fait gagner un temps énorme pendant l'exécution de ta macro, surtout quand il faut ouvrir une quantité de fichier.
Je suppose que si tu ouvres tes fichiers, ca veut aussi dire que tu les ferme juste après avoir fait la changement de format.
En tout cas, si tu ne le fais pas, fais le, et avec ca :
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
ok merci mais je les mets ou?!?
comme cela dans mon code
ou bien d'une autre maniere sachant que tous mes documents sont deja ouverts avant l'execution de ma macro.
cdt
comme cela dans mon code
Sub Macro1()
For i = 1 To 198
Dim strPath As String
strPath = Application.Options.DefaultFilePath(wdDocumentsPath)
Application.ChangeFileOpenDirectory strPath
Application.Options.DefaultFilePath(wdDocumentsPath) = strPath
Application.ScreenUpdating = False
ActiveDocument.SaveAs FileFormat:= _
wdFormatFilteredHTML, LockComments:=False, Password:="", AddToRecentFiles _
:=False, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
:=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
SaveAsAOCELetter:=False
Application.ScreenUpdating = True
ActiveDocument.Close
Next i
End Sub
ou bien d'une autre maniere sachant que tous mes documents sont deja ouverts avant l'execution de ma macro.
cdt
en fait ces commandes évitent de tenter d'afficher à l'écran ce qui est en train de se passer en interne.
Donc si tu t'en fou de voir ce qui se passe (surtout vu l'allure où ca va...), rien ne t'empêche de les placer diretement au début et la fin de ta macro. /!\ sauf si tu dialogue avec l'utilisateur, ce qui n'as pas l'air d'être le cas.
Donc si tu t'en fou de voir ce qui se passe (surtout vu l'allure où ca va...), rien ne t'empêche de les placer diretement au début et la fin de ta macro. /!\ sauf si tu dialogue avec l'utilisateur, ce qui n'as pas l'air d'être le cas.
Sub Macro1()
Application.ScreenUpdating = False
For i = 1 To 198
Dim strPath As String
...
...
ActiveDocument.Close
Next i
Application.ScreenUpdating = True
End Sub
ok ca marche comme meme plus rapidement maintenant merci, Zeb avais raison sur l'autre post
il me reste a faire encore une modification a faire et surtout a trouver et ca sera parfait
l'ideal serait ,a la place de faire une recherche des documents que je veux modifier sous l'explorateur de windows, de faire choisir le repertoire a l'utilisateur et la macro s'applique a tout les documents *.html (par exemple) contenue dans ce repertoire et sous repertoire j'ai trouvé des pistes mais je n'y arrive pas encore
merci encore ++
il me reste a faire encore une modification a faire et surtout a trouver et ca sera parfait
l'ideal serait ,a la place de faire une recherche des documents que je veux modifier sous l'explorateur de windows, de faire choisir le repertoire a l'utilisateur et la macro s'applique a tout les documents *.html (par exemple) contenue dans ce repertoire et sous repertoire j'ai trouvé des pistes mais je n'y arrive pas encore
merci encore ++
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumVba excel macro fichiers
- ForumExecution macro hebdomadaire
- ForumExecution macro excel
- ForumExecution macro ouverture excel
- ForumExecution macro selection cellule
- ForumAutomatiser execution macro
- ForumExcel vba execution
- ForumFermer fichier excel pendant execution macro
- ForumExecution de vba
- ForumExecution automatique macro
- Voir plus