Bonjour,

Après avoir arpenté de long en large ce forum pendant plusieurs semaines pour me former au VBA, me voici face à un problème, qui, sauf erreur de ma part n'a pas été abordé.

Mon besoin :

J'ai une macro qui ouvre tous les fichiers Excel d'un dossier (jusqu'ici tout va bien !)

Pour chaque fichier ouvert, j'ai besoin de copier un certain nombre de ligne de ces fichiers ( ici aussi tout est ok)

Pour faire cette manipulation, je spécifie dans mon userform "each workbook...." , or ici je suis obligé de spécifier plus de 5 variables différentes (workbook) pour traiter l'ensemble des fichiers ouverts (il y en 22). Si je n'utilise qu'une variable, il traite 9 fichiers, si il y a deux variables il va traiter 13 fichiers, etc...

Je me demandais donc si une boucle en each avait une limite, mais je pense pas.

Voici mon code pour essayer d'être plus claire :

Le code de mon module (celui-ci fonctionne bien)
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
 
Sub copie_pec()
Dim mainworkbook As Workbook
Set mainworkbook = ActiveWorkbook
Dim feuil As Worksheets
Set outil_real = Workbooks("outil de contrôle du réalisé.xlsm").Sheets("traitement PEC")
Dim l As Integer
Dim c As Integer
Dim n As Integer
 
c = 1
l = 4
 
'pour ajouter des lignes en fonction des données que j'ai ajouté
n = WorksheetFunction.CountA(Columns(1))
n = n - 4
outil_real.Rows(2).Resize(n).Insert Shift:=xlUp
 
While Cells(l, 1) <> "<EOF>"
    outil_real.Cells(l - 2, 1) = Cells(2, 2)
    outil_real.Cells(l - 2, 2) = Cells(2, 1)
    For c = 3 To 160
        outil_real.Cells(l - 2, c) = Cells(l, c - 2)
    Next c
l = l + 1
Wend
ActiveWorkbook.Close
 
End Sub
Et voici le code de mon userform qui appelle mon module
C'est à ce niveau que se situe le problème, si je n'ai pas au moins 5 variables (dbk) je ne peux pas traiter tous les programmes ouverts

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
Private Sub CommandButton1_Click()
Dim dbk As Workbook
Dim dbk2 As Workbook
Dim dbk3 As Workbook
Dim dbk4 As Workbook
Dim dbk5 As Workbook
Call PEC
Call clear
 
 
'obligé d'utiliser 5 variables (dbk,dbk1,dbk2,...) pour reprendre les données de l'ensemble des programmes que j'ai ouvert
 
 For Each dbk In Application.Workbooks
 If dbk.Name <> ThisWorkbook.Name Then
   Call copie_pec
    End If
 Next dbk
 
  For Each dbk2 In Application.Workbooks
 If dbk2.Name <> ThisWorkbook.Name Then
   Call copie_pec
    End If
 Next dbk2
 
   For Each dbk3 In Application.Workbooks
 If dbk3.Name <> ThisWorkbook.Name Then
   Call copie_pec
    End If
 Next dbk3
 
    For Each dbk4 In Application.Workbooks
 If dbk4.Name <> ThisWorkbook.Name Then
   Call copie_pec
    End If
 Next dbk4
 
     For Each dbk5 In Application.Workbooks
 If dbk5.Name <> ThisWorkbook.Name Then
   Call copie_pec
    End If
 Next dbk5
 
End Sub
En vous remerciant par avance de l'aide que vous pourrez m'apporter