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")
Erreur d 'exécution '9':
L'indice n'appartient pas à la sélection
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...

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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Workbooks(Liste_classeurs).Close SaveChanges:=False
Workbooks(Fichier_source).Close SaveChanges:=False
Petite précision, version Excel 2013 32 bits