Boucle VBA

Signaler
-
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020
-
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

Messages postés
15349
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2020
1 361
Bonjour,

La feuille "Analyse" se trouve dans quel fichier?
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)
Messages postés
15349
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2020
1 361
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"
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?
Messages postés
15349
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
22 septembre 2020
1 361
Re,
ca ne peut pas fonctionner?
Ben comment voulez ouvrir kake chose qui n'a pas de nom?
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
>
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020

J'ai ajouté les wb devant les lignes mais où faut il ajouter "Microsoft Scripting Runtime" dans les références du projet?
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020
694 > Axll6
via le menu "outils" de l'éditeur VBA.
>
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020

D'accord je viens de le mettre!
Par contre maintenant quand je lance la macro j'ai le message d'erreur "Erreur d'exécution 1004; La méthode Select de la classe Range a échoué" qui fait référence à " wb.Sheets("Analyse").Range("A1:AK86").Select"
Le code étant:

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:AK86").Select

wb.Sheets("Analyse").Range("A1:AK86").Copy
wb.Sheets("Analyse").Range("A1:AK86").PasteSpecial Paste:=xlPasteValues

wb.Sheets("Bac à sable en ligne").Range("A1:U100").Copy
wb.Sheets("Bac à sable en ligne").Range("A1:U100").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

Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020
694 > Axll6
quand tu partages du VBA, spécifie "basic" dans les balises de code.
la ligne qui donne l'erreur n'est plus utile, elle peut être supprimée.
il faut aussi ajouter wb. au début des lignes avec .Delete
et la ligne avec .activate peut être supprimée, ainsi que la ligne avec .Save
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020
694 >
Messages postés
12339
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
26 septembre 2020

peux-tu donner suite, ou, au minimum, marquer la discussion comme résolue?