Bonjour,
Je me permets de revenir sur ce sujet parce que j'ai un bug que je n'arrive pas à trouver de solutions malgré mes recherches :
En fait, dans ma macro, il y a une liste de feuilles sources définie comme suit :
Liste = Array("SOURCE 1", "SOURCE 2", "SOURCE 3", "SOURCE 4", "SOURCE 5")
mais mon fichier ne comporte pas systématiquement cette liste : j'ai eu un cas ou il y a une feuille qui manque donc du coup ma macro bug avec le code d'erreur 9 (Erreur d'exécution '9': L'indice n'appartient pas à la sélection) au niveau de la ligne suivante :
With .Sheets(Liste(i))
ci-dessous le code complet
est ce quelqu'un peut me dire comment surmonter ce problème ?
c'est très urgent, je serai très reconnaissant si quelqu'un peut me proposer quelques chose ?
Merci
Sub Consolidation_2()
Dim w1 As Workbook, w2 As Workbook
Dim f1 As Worksheet, f2 As Worksheet
Dim l&, i&, k&, t(), temp(), Liste(), nw2
Set w1 = ThisWorkbook: Set f1 = w1.Sheets("Recap Conso")
Liste = Array("SOURCE 1", "SOURCE 2", "SOURCE 3", "SOURCE 4", "SOURCE 5")
'On choisit le fichier à ouvrir
nw2 = Application.GetOpenFilename("Fichiers Excel (*.xlsx), *.xlsx")
If nw2 <> False Then
Set w2 = Workbooks.Open(nw2)
Else: MsgBox "Vous n'avez pas sélectionné de fichier": Exit Sub
End If
'On débute le compteur à 0, afin de savoir s'il s'agit du premier tableau.
k = 0
'On boucle les différentes feuilles.
With w2
For i = LBound(Liste) To UBound(Liste)
With .Sheets(Liste(i))
l = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
temp = .Range(.Cells(2, 1), .Cells(l, 20)).Value
If k = 0 Then
.Rows(1).Copy f1.[a1]
t = temp
Else: t = MergeArray2DVert(t, temp)
End If
End With
k = k + 1
Next i
End With
'On ferme le classeur à consolider.
w2.Close False
'On note les valeurs dans le classeur d'origine.
With f1.[a2].Resize(UBound(t), UBound(t, 2))
.NumberFormat = "@"
.Value = t
End With
End Sub
Function MergeArray2DVert(a, b)
maxtab1 = UBound(a)
Dim Tbl(): ReDim Tbl(1 To UBound(a) + UBound(b), 1 To UBound(a, 2))
For i = LBound(a) To UBound(a)
For c = 1 To UBound(a, 2): Tbl(i, c) = a(i, c): Next
Next i
For i = 1 To UBound(b)
For c = 1 To UBound(b, 2): Tbl(maxtab1 + i, c) = b(i, c): Next
Next i
MergeArray2DVert = Tbl
End Function