Private T As Worksheet 'déclare la variable T (onglet Temp)
Private R As Worksheet 'déclare la variable R (onglet Recap)
Private TT As Variant 'déclare la variable TT (Tableau Temp)
Private TR As Variant 'déclare la variable TR (Tableau Recap)
Private NLT As Long 'déclare la variable NLT (Nombre de Lignes Temp)
Private NCT As Byte 'déclare la variable NCT (Nombre de Colonnes Temp)
Private NLR As Long 'déclare la variable NLR (Nombre de Lignes Recap)
Sub Init()
Set T = Worksheets("TEMP") 'définit l'onglet T
Set R = Worksheets("RECAP") 'définit l'onglet R
TT = T.Range("A1").CurrentRegion 'définit le tableau TT
NLT = UBound(TT, 1) 'définit le nombre de lignes NLT du tableau TT
NCT = UBound(TT, 2) 'définit le nombre de colonnes NCT du tableau TT
Call DoublTemp 'appelle la procédure DoublTemp
End Sub
Private Sub DoublTemp()
Dim I As Long 'déclare la variable I (incrément)
T.Columns(1).NumberFormat = "General" 'met la colonne A de l'onglet T au format 'Général"
R.Columns(1).NumberFormat = "General" 'met la colonne A de l'onglet R au format 'Général"
For I = NLT - 1 To 2 Step -1 'boucle inversée sur toutes les lignes I du tableau TT (de l'avant dernière à la ligne 2)
'si la ligne I est identique à la ligne I+1 (doublon sur colonnes A, B et M), supprime la ligne I+1
If TT(I, 1) = TT(I + 1, 1) And TT(I, 2) = TT(I + 1, 2) And TT(I, 13) = TT(I + 1, 13) Then T.Rows(I + 1).Delete
Next I 'prochaine ligne de la boucle
TT = T.Range("A1").CurrentRegion 'redéfinit le tableau TT
NLT = UBound(TT, 1) 'redéfinit le nombre de lignes NLT du tableau TT
Call DoublRec 'lance la procédure DoublRec
End Sub
Private Sub DoublRec()
Dim I As Long 'déclare la variable I (incrément)
Dim J As Long 'déclare la variable J (incrément)
Dim K As Long 'déclare la variable K (incrément)
Dim L As Byte 'déclare la variable L (incrément)
Dim D1 As String 'déclare la variable D1 (Donnée 1)
Dim D2 As String 'déclare la variable D2 (Donnée 2)
Dim TEST As Boolean 'déclare la varaible TEST
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
TR = R.Range("A2").CurrentRegion 'définit le tableau TR
NLR = UBound(TR, 1) 'définit le nombre de ligne NLR du tableau TR
K = 1 'initialise lavariable K
For I = 2 To NLT 'boucle 1 : sur toutes les lignes I du tableau TT (en partant de la seconde)
For J = 2 To NLR 'boucle 2 : sur toutes les lignes J du tableau TR (en partant de la seconde)
D1 = CStr(TT(I, 1)) & CStr(TT(I, 2)) & CStr(TT(I, 13)) 'définit la variable D1 (concaténation des colonnes 1, 2 et 13) de l'onglet T
D2 = CStr(TR(J, 1)) & CStr(TR(J, 2)) & CStr(TR(J, 13)) 'définit la variable D2 (concaténation des colonnes 1, 2 et 13) de l'onglet R
If CStr(D1) = CStr(D2) Then TEST = True: Exit For 'si D1 est égale à D2,redéfinit la variable TEST, sort de la boucle 2
Next J 'prochaine ligne de la boucle 2
If TEST = False Then 'condition : si TEST est [faux]
ReDim Preserve TL(1 To NCT, 1 To K) 'redimensionne le tableau des lignes TL (autant de lignes que TT a de colonnes, K colonnes)
For L = 1 To NCT 'boucle 3 : sur toutes les lignes L du tableau des lignes TL
TL(L, K) = TT(I, L) 'récupère dans la ligne L de TL la donnée en colonne L de TT (= Transposition)
Next L 'prochaine ligne de la boucle 3
K = K + 1 'incrémente K (ajoute une colonne au tableau des lignes TL)
End If 'fin de la condition
TEST = False 'réinitialise la variable TEST
Next I 'prochaine ligne de la boucle 1
Set DEST = R.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST (la première cellule vide la la colonne A de l'onglet R)
If K > 1 Then DEST.Resize(UBound(TL, 2), UBound(TL, 1)).Value = Application.Transpose(TL) 'si K est supérieure à 1, renvoie dans dest le tableau TL transposé
T.Columns(1).NumberFormat = "dd/mm/yyyy" 'met la colonne A de l'onglet T au format "jj/mm/aaaa"
R.Columns(1).NumberFormat = "dd/mm/yyyy" 'met la colonne A de l'onglet T au format "jj/mm/aaaa"
End Sub