Bonjour à tous,
le titre de ce sujet résume ce que je veux faire mais pas les problèmes rencontrés que je vais énumérer.
Tout d'abord voici mon code :
A l'ouverture du classeur nommé ici ClasseurMacro, un userform apparait dans lequel une listbox me permet de sélectionner des feuilles automatiquement récupérées sur un autre classeur (nommé ClasseurKSV). Le nom de ces feuilles est ensuite stocké dans un tableau que je parcours après avec la boucle For each afin de copier une plage présente sur les feuilles selectionnées (dans le classeur KSV) sur une unique feuille (nommée Nouvelle Feuille) présente dans le classeurMacro (au fur et à mesure je décale la plage de données recevant les données pour pouvoir les copier sur la même feuille).
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Dim NouvelleFeuille As Worksheet Dim Onglet As Variant 'une variable for each poru les tableaux doit être de type variant Dim nbIsoSel As Integer Dim TabOnglets() As Variant nbIsoSel = 0 For i = 0 To UserForm1.ListBox1.ListCount - 1 If UserForm1.ListBox1.Selected(i) = True Then nbIsoSel = nbIsoSel + 1 ReDim Preserve TabOnglets(0 To nbIsoSel) TabOnglets(nbIsoSel - 1) = UserForm1.ListBox1.List(i) 'i=50 en fin de boucle alors qu'on lui demande de ne pas dépassé 50- 1 soit 49 dans le cas testé End If Next i Dim a As Integer For a = 0 To nbIsoSel - 1 MsgBox TabOnglets(a) Next a MsgBox UBound(TabOnglets) Set FeuilleMoy = ClasseurMacro.Worksheets.Add FeuilleMoy.Name = "Feuille Moyenne" Dim j As Integer Dim dl As Integer Dim TabTrans() As Variant j = 1 For Each Onglet In TabOnglets() If Onglet <> "" Then Set FeuilleOng = ClasseurKSV.Worksheets(Onglet) MsgBox Onglet dl = FeuilleOng.Range("G" & Rows.Count).End(xlUp).Row 'dernière ligne de la colonne Aire 'FeuilleOng.Range("G2:H" & dl).Copy Destination:=FeuilleMoy.Range(Cells(2, j), Cells(dl, j + 1)) ' a vérifier TabTrans = Range(Cells(1, 7), Cells(dl, 8)) FeuilleMoy.Activate Range(Cells(1, j), Cells(dl, j + 1)) = TabTrans j = j + 2 End If Next Onglet
Je vérifie avec des MsgBox que mes feuilles sont bien sélectionnées et stockés dans le tableau (TabOnglets) . De même que je vérifie que la boucle Eachfor parcours bien les différents Onglets.
Toutefois la copie des données ne se fait pas comme je le souhaite.
En effet indépendamment des Feuilles sélectionnées dans la list box seul la première feuille est copiée (même si elle n'est pas sélectionnée).
Je ne suis pas sûr aussi d'utiliser correctement le TabTrans qui est mon tableau de transfert pour les données (le copier-coller conventionnel ne semble pas fonctionner d'un classeur à un autre avec Range(Cells()).
D'autre part j'ai remarqué que, pour le cas testé, dans la boucle For i = 0 To UserForm1.ListBox1.ListCount - 1 l'incide de UserForm1.ListBox1.List(i) était porté à 50 en fin de boucle (alors qu'on demande bien à ce que la boucle s'arrête à 49 qui est le numéro du dernier index le premier étant 0). Ça n'a visiblement pas d'influence sur la suite, mais ça me pertube.
Merci d'avance pour vos suggestions, idées, critiques,...
David
Partager