VBA - Additionner des cellules associer à un même type

Bonjour,

Je souhaiterais additionner dans mon tableau en automatique toutes les longueurs dont le type est identique. sachant que le nombre de ligne peut varier, ainsi que le type de chant, (mais il seront toujours trié dans l'ordre décroissant) voir fichier excel.

comment faire pour qu'il détecte les cellules égale dans la colonne A et additionne les cellule de la colonne B associer, pour remplir mes première ligne du tableau, puis passe au type suivant et rempli mes 2ème lignes du tableau et ainsi de suite.

je précise que je suis un débutant en VBA.

merci d'avance.

30essai.xlsx (11.50 Ko)

Bonjour Koshi et bienvenue,

voici un exemple avec formule,

24koshi-essai.xlsx (12.33 Ko)

Bonjour Koshi et bienvenu, bonjour le forum,

En pièce joint ton fichier modifié avec une proposition VBA :

Le code :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim I As Integer 'déclare la variable I (Incrément)
Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
Dim J As Integer 'déclare la variable J (incrément)
Dim T As Double 'déclare la variable T (Total)
Dim LI As Integer 'déclare la variable LI (LIgne)

Set O = Worksheets("Feuil1") 'définit l'onglet O
O.Range("F10").CurrentRegion.Offset(1, 0).ClearContents 'efface d'éentuelles anciennes valeurs
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
    D(TV(I, 1)) = "" 'alimente le dictionnaire D avec les données en colonne 1 de TV (le type)
Next I 'prochaine ligne de la boucle
TMP = D.keys 'récupère dans le tableau temporaire TMP la liste des éléments du dictionnaire D sans doublon
For J = 0 To UBound(TMP) 'boucle 1 : sur tous les élément du tableau temporaire TMP
    T = 0 'initialise le total T
    For I = 2 To UBound(TV, 1) 'boucle 2 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If TMP(J) = TV(I, 1) Then T = T + TV(I, 2) 'si le type de la boucle 1 correspont au type de la boucle 2, aditionne la longueur dans le total T
    Next I 'prochaine ligne de la boucle 2
    LI = O.Cells(Application.Rows.Count, "F").End(xlUp).Row + 1 'définit la ligne LI
    O.Cells(LI, "E").Value = "N° " & J + 1 'renvoie le Numéro dans la colonne E
    O.Cells(LI, "F").Value = TMP(J) 'renvoie le type dans la colonne F
    O.Cells(LI, "G").Value = T 'renvoie le total dans la colonne G
Next J 'prochain élément de la boucle 1
End Sub

Le fichier :

38koshi-ep-v01.xlsm (25.90 Ko)

ThauThème, c'est exactement ce qu'il me faut,

et merci d'avoir expliqué le code aussi ça m'aide beaucoup.

Bonjour tous le monde,

Vu que tu es débutant voici un code tout simple que tu comprendra sans trop d'effort.

Sub addition()

'Dernière ligne de la colonne A
derlig = Sheets("Feuil1").Range("A65354").End(xlUp).Row

'Première ligne du tableau de synthèse
lig = 11

'Définition de la plage de la boucle
Set cel = Sheets("Feuil1").Range("A2:A" & derlig)

'Début de la boucle
For Each cel2 In cel

        'Condition pour la somme
        If cel2.Value = cel2.Offset(1, 0) Or cel2.Offset(-1, 0).Row = 1 Then
        'Si on est toujours sur la même référence

        'Additon de la longueur avec les autres longueurs
        longueur = longueur + cel2.Offset(0, 1).Value

        Else
        'Si on change de référence

        'Variable pout numéro de référence
        n = n + 1
        'On complète le tableau de synthèse avec le numéro de référence
        Sheets("Feuil1").Cells(lig, 5).Value = "N°" & n
        'On complète le tableau de synthèse avec la référence
        Sheets("Feuil1").Cells(lig, 6).Value = cel2.Value
        'On complète le tableau de synthèse avec le total de longueur de la référence
        Sheets("Feuil1").Cells(lig, 7).Value = longueur + cel2.Offset(0, 1).Value
        'On met des bordure à la ligne qui vient d'être créée
        Sheets("Feuil1").Range(Cells(lig, 5), Cells(lig, 7)).Borders.LineStyle = xlContinuous

        'Mise à zéro de la variable de longueur
        longueur = 0
        'On incrémente le numéro de ligne du tableau de synthèse
        lig = lig + 1

        End If

Next cel2

End Sub

Bon courage !

48essai.xlsm (22.64 Ko)
Rechercher des sujets similaires à "vba additionner associer meme type"