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 64 65
| Sub Test()
Dim Plage As Range
Dim Cel As Range
Dim TblDebit()
Dim TblCredit()
Dim TblDonnees
Dim I As Integer
Dim J As Integer
With Worksheets("Format Initial")
Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp))
End With
'titres des colonnes
TblDonnees = Array("Donnée_1", "Donnée_2", "Donnée_3", "Donnée_4", "Donnée_5", _
"Donnée_6", "Donnée_7", "Donnée_8", "Donnée_9", "Donnée_10", _
"Donnée_11", "Donnée_12", "Donnée_13", "Donnée_14", "Donnée_15")
'défini le nombre de lignes du tableau (+ 1 = ligne des titres)
I = Application.CountIf(Plage, "Total_Données") + 1
'les bornes étant connues, dimensionne les tableaux
ReDim TblDebit(1 To I, 1 To UBound(TblDonnees) + 1)
ReDim TblCredit(1 To I, 1 To UBound(TblDonnees) + 1)
'rempli la première ligne de chaque tableau (les titres)
For I = 1 To UBound(TblDonnees) + 1: TblDebit(1, I) = TblDonnees(I - 1): Next I
For I = 1 To UBound(TblDonnees) + 1: TblCredit(1, I) = TblDonnees(I - 1): Next I
'évite la ligne des titres
I = 2
For Each Cel In Plage
If Cel.Value <> "Total_Données" Then
'récupère la valeur de la cellule en colonne B (débit) et C (crédit)
J = Application.Match(Cel.Value, TblDonnees, 0) 'pour positionner les valeurs dans les tableaux
TblDebit(I, J) = Cel.Offset(, 1).Value
TblCredit(I, J) = IIf(J = 1, Cel.Offset(, 1).Value, Cel.Offset(, 2).Value)
Else
'ligne suivante
I = I + 1
End If
Next Cel
'colle le tableau dans la feuille
With Worksheets("Feuil1") '"Format Final")
.Cells(1, 1).Value = "Tableau Débit"
.Range(.Cells(2, 1), .Cells(UBound(TblDebit, 1) + 1, UBound(TblDebit, 2))).Value = TblDebit
.Cells(UBound(TblDebit, 1) + 2, 1).Value = "Tableau Crédit"
.Range(.Cells(UBound(TblCredit, 1) + 3, 1), .Cells(UBound(TblCredit, 1) * 2 + 2, UBound(TblCredit, 2))).Value = TblCredit
End With
End Sub |
Partager