Option Explicit
Sub testX()
Dim colonne, SH, A&, MsG$, LiG&, RnG, TotaL&, TabLresulT, I&
colonne = Array( 2, 3, 6, 7, 1, 10, 1, 9) 'matrice de colonne
Sheets("All_Name").Cells.Clear ' vide la feuille All_Name
DoEvents
Application.ScreenUpdating = False
For I = 13 To Sheets.Count 'boucle de 13 à sheets.count
ReDim arrligne(1 To 1) 'on redim la matrice de ligne a chaque feuille
Set SH = Sheets(I)
A = 0
For LiG = 1 To SH.Cells(Rows.Count, 2).End(xlUp).Row 'boucle de la ligne 1 à la dernière
If Val(SH.Cells(LiG, "A")) = 0 And SH.Cells(LiG, "A") <> "" Then 'si la condition est remplie
A = A + 1: ReDim Preserve arrligne(1 To A): arrligne(A) = LiG 'on incrémente la matrice de ligne et on y intègre l'index de ligne "lig"
If LiG < 20 Then Debug.Print "ligne " & LiG & " " & SH.Cells(LiG, 1) & "---" & SH.Cells(LiG, 2)
End If
Next
MsG = MsG & SH.Name & " copie= " & A & " ligne(s)" & vbLf 'on ajoute au texte du message
TotaL = TotaL + A 'on calcule le total de lignes
Set RnG = SH.Range("A1:AA" & SH.Cells(Rows.Count, 2).End(xlUp).Row - 1) 'on prend toute la plage
TabLresulT = Application.Index(RnG.Value, Application.Transpose(arrligne), colonne) 'récupération du tableau selon la matrice de ligne et colonne
With Sheets("All_Name").Cells(Rows.Count, 1).End(xlUp).Offset(1)
.Resize(UBound(arrligne), UBound(colonne) + 1) = TabLresulT 'injection du tableau dans la ligne dispo a partir d'en bas
End With
Next
With Sheets("All_Name")
'suppression des doublons
.Range("$A$1:$AA$" & .Cells(Rows.Count, "a").End(xlUp).Row).RemoveDuplicates Columns:=1, Header:=xlNo 'suppression des doublons
TotaL = .Cells(Rows.Count, "B").End(xlUp).Row 'total des ligne récupérées
.Columns(1).Delete
'Suppression des colonnes non utilisées
.Range("d:d,f:f").Clear 'vidage des colonne que l'on a récupéré et qui sont les colonnes ajoutées
'Nommer les Entêtes
.Range("A1").Resize(, 7) = Array("ID", "Nom", "Prenom", "Entity", "contract", "Product line", "manager") 'Entêtes de colonne
'design du tableau
'***********************************************************
'soit en range
' With .Range("A1:H" & .Cells(Rows.Count, 1).End(xlUp).Row)
' With .Rows(1)
' .Interior.Color = RGB(0, 0, 255) ' Bleu
' .Font.Color = RGB(255, 255, 255) ' Blanc
' .Font.Bold = True
' End With
' .HorizontalAlignment = xlCenter
' .VerticalAlignment = xlCenter
'.Borders(xlEdgeLeft).LineStyle = xlContinuous
' .Borders(xlEdgeTop).LineStyle = xlContinuous
'.Borders(xlEdgeRight).LineStyle = xlContinuous
' .Borders(xlEdgeBottom).LineStyle = xlContinuous
'.Borders(xlInsideVertical).LineStyle = xlContinuous
'.Borders(xlInsideHorizontal).LineStyle = xlContinuous
' End With
'*********************************************************
'ou tout simplement en listobject(tableau structuré)
.ListObjects.Add(xlSrcRange, .Range("A1:G" & .Cells(Rows.Count, 1).End(xlUp).Row), , xlYes).Name = "Tableau1"
'*************************************************
[A1].Select
.Shapes("bouton").Left = 550
End With
MsgBox MsG & vbCrLf & "Pour un total de " & TotaL & " lignes" & vbCrLf & " en ayant supprimé les doublons "
Application.ScreenUpdating = True
End Sub