Bonjour,
Je développe un script afin de copier une feuille source dans des classeurs cibles.
Dans mon dossier "c:\Test", j'ai mon classeur VBA_Ajout_Feuil.xlsm contenant mon code.
J'y ai un classeur "Feuil_a_inserer.xlsx" contenant une feuille nommée "Feuil_en_plus".
J'y ai un classeur "Liste_classeurs.xlsm" renseigné comme ci-dessous.
A B C 2 Classeur1.xlsx 10/10/2020 C:\Test\Classeurs 3 Classeur2.xlsx 10/10/2020 C:\Test\Classeurs 4 Classeur3.xlsx 10/10/2020 C:\Test\Classeurs 5 Classeur4.xlsx 10/10/2020 C:\Test\Classeurs 6 Classeur5.xlsx 10/10/2020 C:\Test\Classeurs
J'ai un dossier c:\Test\Classeurs contenant les 5 classeurs nommés Classeur1.xlsx à Classeur5.xlsx.
Chaque classeur a une feuille nommée "Feuil1".
J'ai un bug sur la ligne 37 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Workbooks(Fichier_source).Sheets(Feuil_source).Copy After:=Workbooks(Nom_du_classeur).Sheets("Feuil1")Et pourtant, ça a fonctionné au début et puis plus rien, je ne comprends pas, les valeur des variables sont ok en mode débug...Erreur d 'exécution '9':
L'indice n'appartient pas à la sélection
J'ai le sentiment que autre chose bloque... mais quoi
Merci d'avance de votre aide ou vos conseils,
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Sub Ajout_feuil() Dim WB As Workbook Dim WS As Worksheet Dim Liste_classeurs As String Dim Ligne As Long Dim Dossier_du_classeur As String Dim Chemin_du_classeur As String Dim Nom_du_classeur As String Dim Fichier_source As String Dim Feuil_source As String Ligne = 2 ' Ici on pointe la ligne sur laquelle on démarre la lecture du classeur Liste_Classeurs Liste_classeurs = "C:\Test\Liste_classeurs.xlsm" 'Chemin du fichier Liste_classeurs.xlsm Fichier_source = "C:\Test\Feuil_a_inserer.xlsx" Feuil_source = "Feuil_en_plus" Workbooks.Open (Fichier_source) Set WS = ActiveWorkbook.Worksheets(Feuil_source) 'Activation de la feuille Set WS = Nothing Workbooks.Open (Liste_classeurs) 'Ouverture du classeur liste des classeurs Set WS = ActiveWorkbook.Worksheets("Feuil1") 'Activation de la feuil 1 Set WS = Nothing While Cells(Ligne, 1) <> "" ' On reboucle jusqu'à lire une ligne vide en colonne 1 Nom_du_classeur = "" 'on efface toute valeur de la variable Chemin_du_classeur = "" 'on efface toute valeur de la variable Nom_du_classeur = Cells(Ligne, 1).Value ' Sélection du classeur cible dans la liste des classeurs Dossier_du_classeur = Cells(Ligne, 3).Value ' Sélection du chemin du classeur Chemin_du_classeur = (Dossier_du_classeur & "\" & Nom_du_classeur) ' Création du chemin du classeur avec son nom Workbooks.Open (Chemin_du_classeur) ' Ouverture du classeur cible Workbooks(Fichier_source).Sheets(Feuil_source).Copy After:=Workbooks(Nom_du_classeur).Sheets("Feuil1") 'On copie la feuille source à ajouter dans le classeur de destination Workbooks(Nom_du_classeur).Close SaveChanges:=True 'fermeture du classeur avec enregistrement Workbooks.Open (Liste_classeurs) Set WS = ActiveWorkbook.Worksheets("Feuil1") Set WS = Nothing Ligne = Ligne + 1 'Ici on incrémente d'une ligne la lecture Wend MsgBox "Plus aucune ligne à traiter", vbOKOnly + vbExclamation, "Fin du traitement" End Sub
De plus ces deux commandes ne fonctionnent pas non plus...
Petite précision, version Excel 2013 32 bits
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Workbooks(Liste_classeurs).Close SaveChanges:=False Workbooks(Fichier_source).Close SaveChanges:=False
Partager