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)
Et voici le code de mon userform qui appelle mon module
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
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
En vous remerciant par avance de l'aide que vous pourrez m'apporter
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
Partager