Boucle VBA
Axll6
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Le but : ouvrir le dossier "Documents de travail" (qui a pour chemin "C:\Users\6881EW\Desktop\Documents de travail"), puis exécuter les étapes du For Each Next pour chaque fichier du dossier (sans avoie à nommer les fichiers).
Mais il y a un message d'erreur : L'indice n'appartient pas à la sélection" qui renvoie à la ligne "Sheets("Analyse").Select"
Merci pour vos réponses
Le code:
Le but : ouvrir le dossier "Documents de travail" (qui a pour chemin "C:\Users\6881EW\Desktop\Documents de travail"), puis exécuter les étapes du For Each Next pour chaque fichier du dossier (sans avoie à nommer les fichiers).
Mais il y a un message d'erreur : L'indice n'appartient pas à la sélection" qui renvoie à la ligne "Sheets("Analyse").Select"
Merci pour vos réponses
Le code:
Sub Ouvre() Dim wb As Workbook Dim ws As Worksheet Dim Chemin As String Chemin = "C:\Users\6881EW\Desktop\Documents de travail\" Workbooks.Open Filename:=Chemin For Each ws In ActiveWorkbook.Worksheets ChDir "C:\Users\6881EW\Desktop\Envoi" Sheets("Analyse").Select Range("A1:AK85").Select Selection.Copy Sheets("Analyse").Select Range("A1:AK85").Select Selection.PasteSpecial Paste:=xlPasteValues Sheets("Bac à sable en ligne").Select Range("A1:U100").Select Selection.Copy Sheets("Bac à sable en ligne").Select Range("A1:U100").Select Selection.PasteSpecial Paste:=xlPasteValues Application.DisplayAlerts = False Sheets("Modèle").Delete Sheets("ETP 2018").Delete Sheets("ETP 2019").Delete Sheets("Table de correspondance").Delete Sheets("Analyse").Activate ActiveWorkbook.Save Next ws Application.DisplayAlerts = True End Sub
Configuration: Windows / Edge 84.0.522.48
4 réponses
Dans mon bureau, j'ai un dossier "Documents de travail", et dans ce dossier il y a 5 fichiers excel :
2017_maquette_DT_macro(27).xlsx
2017_maquette_DF_macro(27).xlsx
2017_maquette_DSI_macro(27).xlsx
2017_maquette_DG_macro(27).xlsx
2017_maquette_DRH_macro(27).xlsx
et chaque fichier se constitue de la même façon avec les onglets "présentation, Modèle, Analyse, Table de correspondance", et 3 autres.
(J'ai nommé les fichiers mais je souhaite ne pas les nommer dans mon code car je vais rajouter davantage de fichiers une fois que le code marchera)
2017_maquette_DT_macro(27).xlsx
2017_maquette_DF_macro(27).xlsx
2017_maquette_DSI_macro(27).xlsx
2017_maquette_DG_macro(27).xlsx
2017_maquette_DRH_macro(27).xlsx
et chaque fichier se constitue de la même façon avec les onglets "présentation, Modèle, Analyse, Table de correspondance", et 3 autres.
(J'ai nommé les fichiers mais je souhaite ne pas les nommer dans mon code car je vais rajouter davantage de fichiers une fois que le code marchera)
Je change de répertoire car j'aimerais prendre les fichiers qui se trouvent dans le dossier Documents de travail, et une fois que les étapes sont faites sur les onglets de chaque fichier, envoyer ces fichiers vers le Dossier "Envoi" (et renommer les fichiers en rajoutant envoi à leur nom d'origine)
Pour le problème du chemin sans nom de fichier ca ne peut pas fonctionner?
Pour le problème du chemin sans nom de fichier ca ne peut pas fonctionner?
Je voudrais une boucle qui effectue les tâches pour chaque fichier se trouvant dans le dossier en question, je crois que c'est possible sans avoir à nommer chaque fichier
bonjour, c'est tout à fait possible, mais pas comme tu le fais.
de plus, tu mélanges les concepts de dossier, de classeur (workbook) et de feuille (worksheet).
exemple, qui sauve les fichiers où ils étaient au départ:
de plus, tu mélanges les concepts de dossier, de classeur (workbook) et de feuille (worksheet).
exemple, qui sauve les fichiers où ils étaient au départ:
Private Sub fic() Dim fso As Scripting.FileSystemObject Dim dossier As Scripting.Folder Dim fichier As Scripting.File Dim wb As Workbook Dim chemin As String chemin = ThisWorkbook.Path 'à adapter Set fso = New Scripting.FileSystemObject Set dossier = fso.GetFolder(chemin) For Each fichier In dossier.Files Set wb = Workbooks.Open(fichier.Path) wb.Sheets("Analyse").Range("A1:AK85").Select '... wb.Save wb.Close Next fichier End Sub
et ainsi, en les sauvant ailleurs:
Private Sub fic() Dim fso As Scripting.FileSystemObject Dim dossier As Scripting.Folder Dim fichier As Scripting.File Dim wb As Workbook Dim cheminsource As String, chemindest As String cheminsource = ThisWorkbook.Path 'à adapter chemindest = cheminsource + "\test" 'à adapter Set fso = New Scripting.FileSystemObject Set dossier = fso.GetFolder(cheminsource) For Each fichier In dossier.Files Set wb = Workbooks.Open(fichier.Path) wb.Sheets("Analyse").Range("A1:AK85").Select '... wb.SaveAs (chemindest + "\" + fichier.Name) wb.Close Next fichier End Sub
Merci beaucoup,
j'ai essayé en modifiant les lignes 7,8 et en ajoutant la suite du code dans le FOr Each Next mais est xe qu'il faut rajouter "wb." devant chaque ligne?
j'ai fait :
Le message d'erreur est : Erreur de compilation, type défini par l'utilisateur non défini qui fait référence à la ligne "Dim fso As Scripting.FileSystemObject"
Que faut il changer?
j'ai essayé en modifiant les lignes 7,8 et en ajoutant la suite du code dans le FOr Each Next mais est xe qu'il faut rajouter "wb." devant chaque ligne?
j'ai fait :
Private Sub fic()
Dim fso As Scripting.FileSystemObject
Dim dossier As Scripting.Folder
Dim fichier As Scripting.File
Dim wb As Workbook
Dim cheminsource As String, chemindest As String
cheminsource = "C:\Users\6881EW\Desktop\Documents de travail\"
chemindest = "C:\Users\6881EW\Desktop\Envoi\"
Set fso = New Scripting.FileSystemObject
Set dossier = fso.GetFolder(cheminsource)
For Each fichier In dossier.Files
Set wb = Workbooks.Open(fichier.Path)
wb.Sheets("Analyse").Range("A1:AK85").Select
Sheets("Analyse").Select
Range("A1:AK85").Select
Selection.Copy
Sheets("Analyse").Select
Range("A1:AK85").Select
Selection.PasteSpecial Paste:=xlPasteValues
Sheets("Bac à sable en ligne").Select
Range("A1:U100").Select
Selection.Copy
Sheets("Bac à sable en ligne").Select
Range("A1:U100").Select
Selection.PasteSpecial Paste:=xlPasteValues
Application.DisplayAlerts = False
Sheets("Modèle").Delete
Sheets("ETP 2018").Delete
Sheets("ETP 2019").Delete
Sheets("Table de correspondance").Delete
Application.DisplayAlerts = True
Sheets("Analyse").Activate
ActiveWorkbook.Save
wb.SaveAs (chemindest + "\" + fichier.Name)
wb.Close
Next fichier
End Sub
Le message d'erreur est : Erreur de compilation, type défini par l'utilisateur non défini qui fait référence à la ligne "Dim fso As Scripting.FileSystemObject"
Que faut il changer?