Sub Totaux()
Dim TabData() As Variant
Dim TabTransport() As Variant
Dim TabTotaux(1 To 1, 1 To 3) As Double 'on définit le tableau des totaux
With Sheets("cpterendu") 'dans la feuille cpterendu
'LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'il faut etre sur que la colonne A ne contient pas de données SOUS la liste des moyens de transports (1 solution serait de mettre la liste sur une autre feuille)
TabTransport = .Range("A7:C19").Value 'on prend 3 colonnes pour avoir le tableau final
LastLine = .UsedRange.Rows.Count 'dernière ligne de la feuille
TabData = .Range("J7:W" & LastLine).Value 'on récupère le tableau de données
For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque moyen de transport
MoyenTransport = TabTransport(i, 1) 'on note le moyen de transport
For j = LBound(TabData, 1) To UBound(TabData, 1) 'pour chaque ligne du tabdata
If TabData(j, 1) = MoyenTransport Then 'on a trouvé la ligne du moyen de transport
For k = j To UBound(TabData, 1) 'on commmence une boucle à partir de la ligne du moyen de transport pour trouver le mot "TOTAL" (en enlevant les espaces parasites)
'MsgBox Asc(Right(TabData(k, 2), 1))
If Trim(Replace(TabData(k, 2), Chr(160), "")) = "Total" Then 'on a trouvé la ligne de Total
TabTransport(i, 1) = TabData(k, 5) 'on récupère les 3 données valeurs
TabTransport(i, 2) = TabData(k, 6)
TabTransport(i, 3) = TabData(k, 7)
Exit For 'on sort de la boucle for k
End If
Next k
Exit For 'on sort de la boucle for j pour aller au prochain moyen de transport
End If
Next j
Next i 'moyen de transport suivant
'ici, on a trouvé toutes les valeurs pour tous les moyens de transport
'on parcourt à nouveau le tableau TabTransport pour mettre des 0
For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
If Not IsNumeric(TabTransport(i, 1)) Then 'si le contenu n'est pas numérique (c'est qu'on a pas mis de valeurs au moyen de tarnsport
For j = UBound(TabTransport, 2) To LBound(TabTransport, 2) Step -1 'sur chaque colonne
TabTransport(i, j) = 0
Next j
End If
Next i
'on parcourt à nouveau le tableau pour faire les calculs des totaux
For i = LBound(TabTransport, 1) To UBound(TabTransport, 1) 'pour chaque ligne
TabTotaux(1, 1) = TabTotaux(1, 1) + CDbl(TabTransport(i, 1)) 'on extrait le texte (située après le signe =) qu'on transforme en nombre
TabTotaux(1, 2) = TabTotaux(1, 2) + CDbl(TabTransport(i, 2))
TabTotaux(1, 3) = TabTotaux(1, 3) + CDbl(TabTransport(i, 3))
Next i
'on colle les tableaux de résultats dans la feuille
.Range("E7").Resize(UBound(TabTransport, 1), UBound(TabTransport, 2)) = TabTransport
.Range("E20").Resize(UBound(TabTotaux, 1), UBound(TabTotaux, 2)) = TabTotaux
End With
End Sub