Sub Ecritures()
'définition des variables
Dim TabDonnées() As Variant
Dim TabComptes() As Variant
Dim TabEcritures() As Variant
With Sheets("Ecritures") 'avec la feuille "Ecritures"
.Cells.Clear 'on efface tout
End With
With Sheets("Données") 'avec la feuille "Données"
Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'on récupère le numéro de la dernière ligne de données
TabDonnées = .Range("A1").Resize(Fin, 9).Value 'on met les 9 colonnes dans un tablo
End With
With Sheets("Comptes") 'avec la feuille "Comptes"
Fin = .Range("A" & .Rows.Count).End(xlUp).Row 'on récupère le numéro de la dernière ligne de données
TabComptes = .Range("A1").Resize(Fin, 3).Value 'on met les 3 colonnes dans un tablo
End With
'on calcule la taille finale du tablo de résultats
TailleFinale = (UBound(TabDonnées, 1) - 1) * (UBound(TabComptes, 1) - 1) 'nombre de ligne de données * nombre de lignes de compte (-1 pour enlever les entetes)
ReDim TabEcritures(1 To TailleFinale, 1 To 6) 'on crée le tablo final qui contiendra TailleFinale lignes et 6 colonnes
For j = 4 To UBound(TabDonnées, 2) 'pour chaque colonne de données à partir de la colonne 4
For indcomptes = LBound(TabComptes, 1) To UBound(TabComptes, 1) 'on cherche le numéro de compte, et le type débit crédit dans le tablo comptes
If TabComptes(indcomptes, 1) = TabDonnées(1, j) Then
NumCompte = TabComptes(indcomptes, 2) 'on récupère le numéro de la facture
DebitCredit = TabComptes(indcomptes, 3) 'on prend le type Débit ou Crédit ==> qui permettra de savoir dans quelle colonne (5 ou 6) mettre le montant
Exit For 'on quitte la boucle: pas besoin de la terminer puisqu'on a l'info cherchée
End If
Next indcomptes
For i = LBound(TabDonnées, 1) + 1 To UBound(TabDonnées, 1) 'pour chaque ligne de données (on commence à +1 pour ignorer la ligne d'entete)
'i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1)petit compteur qui permet de se placer sur la bonne ligne du tablo final en fonction de i, j et nombre de lignes de données
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 1) = TabDonnées(i, 1) 'on met la date en colonne 1
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 2) = NumCompte 'on met le numéro de Compte en colonne 2
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 3) = TabDonnées(i, 2) 'on met le numéro de facture
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 4) = TabDonnées(i, 3) 'on met le libellé
If DebitCredit = "Débit" Then 'selon débit ou crédit, on met le montant en colonne 5 ou 6
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 5) = TabDonnées(i, j)
Else
TabEcritures(i - 1 + (j - 4) * (UBound(TabDonnées, 1) - 1), 6) = TabDonnées(i, j)
End If
Next i
Next j
Sheets("Ecritures").Range("A1").Resize(UBound(TabEcritures, 1), UBound(TabEcritures, 2)) = TabEcritures 'on colle le résultat final dans la feuille de résultat
End Sub