[VBA] Execution d'une macro sur des fichiers trouvés

  • Auteur de la discussion justedieu
  • Date de début

justedieu

Nouveau membre
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

Code:
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
 

justedieu

Nouveau membre
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

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 
     
     
    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
 

zeb

Modérateur
Salut JusteDieu :hello: Bienvenu sur PPC.

Tu sembles courageux et débrouillard :
1°) je suis debutant
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
 

justedieu

Nouveau membre
Edit:

suite au message de Zeb suivant j'ai compressé mes posts.

voila
 

zeb

Modérateur
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
! 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 [b]Quelques règles simples à respecter -- /!\ A lire avant de poster ![/b] et que sa lecture est judicieuse !!!!!

Choisis une ou plusieurs raisons et mets nous ces fichues balises !!!
 

justedieu

Nouveau membre
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
 

Nova13

Habitué
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:
Code:
Application.ScreenUpdating = False
Mais oublie pas de mettre
Code:
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 :
Code:
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
 

justedieu

Nouveau membre
ok merci mais je les mets ou?!?

comme cela dans mon code

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
 

Nova13

Habitué
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.
Code:
Sub Macro1()  
Application.ScreenUpdating = False 
For i = 1 To 198  
 
    Dim strPath As String  
...
...
      
    ActiveDocument.Close  
      
    Next i  

Application.ScreenUpdating = True   
End Sub
 

justedieu

Nouveau membre
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 ++
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 131
Messages
6 717 959
Membres
1 586 383
Dernier membre
potofeu
Partager cette page
Haut