Boucle VBA

Fermé
Axll6 - Modifié le 29 juil. 2020 à 13:37
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 - 12 août 2020 à 12:20
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:

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

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juil. 2020 à 11:11
Bonjour,

La feuille "Analyse" se trouve dans quel fichier?
0
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)
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juil. 2020 à 11:26
Re,

je souhaite ne pas les nommer dans mon code
Oui, ca va marcher comment?
Ca pas marche, vu qu'il n'y a pas de nom de fichier
Chemin = "C:\Users\6881EW\Desktop\Documents de travail\"    


et en plus vous changez de repertoire dans la boucle (le meme ??)!!
ChDir "C:\Users\6881EW\Desktop\Envoi"
0
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?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
29 juil. 2020 à 13:09
Re,
ca ne peut pas fonctionner?
Ben comment voulez ouvrir kake chose qui n'a pas de nom?
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 29 juil. 2020 à 15:52
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:
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
0
Axll6 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
29 juil. 2020 à 15:30
Comment faut-il faire ?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
29 juil. 2020 à 15:52
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
29 juil. 2020 à 16:03
si tu veux supprimer les fichiers d'origine, tu peux ajouter
fichier.Delete
après
 wb.close
0
Axll6 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
29 juil. 2020 à 17:18
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 :
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?
0