Boucle VBA

Axll6 -  
yg_be Messages postés 23437 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:

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

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    La feuille "Analyse" se trouve dans quel fichier?
    0
  2. Axll6
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      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
  3. Axll6
     
    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
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      ca ne peut pas fonctionner?
      Ben comment voulez ouvrir kake chose qui n'a pas de nom?
      0
  4. Axll6
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
    2. Axll6 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Comment faut-il faire ?
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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
    4. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      si tu veux supprimer les fichiers d'origine, tu peux ajouter
      fichier.Delete
      après
       wb.close
      0
    5. Axll6 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      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