XL 2021 Additionner résultats d'une boucle for en vba

Claudinedu13

XLDnaute Junior
VB:
Sub BoutonAddition()
Dim fh As Worksheet, dico As Object
Dim I&
    Set fh = Sheets("Feuil1")
    Set dico = CreateObject("Scripting.Dictionary")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
        MsgBox fh.Range("F" & I) 
        ' Additionner fh.Range("F" & I)
        End If
    Next I
End Sub

Bonjour,

J'apprends au fil de mes besoins, j'ai adapté ce code trouvé sur le net pour mon cas, mais

1/ Comment additionner tous les fh.Range("F" & I) obtenus d"une boucle for ?

2/ "Dans For I = 2" à quoi correspond le 2 ?

Merci
 

Pièces jointes

  • AdditionTest.xlsm
    20.6 KB · Affichages: 4
Solution
bonjour
VB:
Sub BoutonAddition()
    Dim fh As Worksheet, dico As Object
    Dim I&
    Dim Somme As Double
    Set fh = Sheets("Feuil1")
    Set dico = CreateObject("Scripting.Dictionary")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    MsgBox Somme
End Sub

JM27

XLDnaute Barbatruc
bonjour
VB:
Sub BoutonAddition()
    Dim fh As Worksheet, dico As Object
    Dim I&
    Dim Somme As Double
    Set fh = Sheets("Feuil1")
    Set dico = CreateObject("Scripting.Dictionary")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    MsgBox Somme
End Sub
 

Claudinedu13

XLDnaute Junior
bonjour
VB:
Sub BoutonAddition()
    Dim fh As Worksheet, dico As Object
    Dim I&
    Dim Somme As Double
    Set fh = Sheets("Feuil1")
    Set dico = CreateObject("Scripting.Dictionary")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    MsgBox Somme
End Sub

Bonjour @JM27

Merci pour ta réponse pour l'addition.

Peux tu me dire à quoi correspond 2 dans "For I = 2" ?
 

JM27

XLDnaute Barbatruc
bonjour
2 correspond à la ligne du début de traitement aurait du être 5
fh.Range("A" & Rows.Count).End(xlUp).Row correspond à la ligne de fin de traitement

par contre dans ta procédure il y a des lignes en trop (non utilisé)
VB:
Sub BoutonAddition()
    Dim fh As Worksheet
    Dim I as long
    Dim Somme As Double
    Set fh = Sheets("Feuil1")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    MsgBox Somme
End Sub

Comme je vois que tu débutes voici les lignes commentées

VB:
Sub BoutonAddition()
    Dim fh As Worksheet
    Dim I As Long
    Dim Somme As Double
    ' déclaration de la variable feuille
    Set fh = Sheets("Feuil1")
    ' pour la variable I qui commence à la ligne 5 jusqu'a la ligne de fin de donnée  ( ici 12)
    For I = 5 To fh.Range("A" & Rows.Count).End(xlUp).Row
        ' Si la cellule en b et numéo de la ligne en traitement contient "D231201"
        If fh.Range("B" & I) = "D231201" Then
            ' j'ajoute dans la variable somme  la somme déja enregistrée + la valeur de la cellule F et ligne en cours de traitement
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    ' j'envoie le message somme
    MsgBox Somme
End Sub
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Peut être plus simple :
VB:
Sub BoutonAddition()
Dim Total, Code
    Code = "D231201"
    Total = Application.SumIf([Tableau_AvoirsAcomptes[Réf AV AC]], Code, [Tableau_AvoirsAcomptes[Montant AV AC]])
    MsgBox "Total D231201 : " & Total
End Sub
Ce qui correspond en XL à :
Code:
=SOMME.SI(Tableau_AvoirsAcomptes[Réf AV AC];"D231201";Tableau_AvoirsAcomptes[Montant AV AC])
 

Claudinedu13

XLDnaute Junior
bonjour
2 correspond à la ligne du début de traitement aurait du être 5
fh.Range("A" & Rows.Count).End(xlUp).Row correspond à la ligne de fin de traitement

par contre dans ta procédure il y a des lignes en trop (non utilisé)
VB:
Sub BoutonAddition()
    Dim fh As Worksheet
    Dim I as long
    Dim Somme As Double
    Set fh = Sheets("Feuil1")
    For I = 2 To fh.Range("A" & Rows.Count).End(xlUp).Row
        If fh.Range("B" & I) = "D231201" Then
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    MsgBox Somme
End Sub

Comme je vois que tu débutes voici les lignes commentées

VB:
Sub BoutonAddition()
    Dim fh As Worksheet
    Dim I As Long
    Dim Somme As Double
    ' déclaration de la variable feuille
    Set fh = Sheets("Feuil1")
    ' pour la variable I qui commence à la ligne 5 jusqu'a la ligne de fin de donnée  ( ici 12)
    For I = 5 To fh.Range("A" & Rows.Count).End(xlUp).Row
        ' Si la cellule en b et numéo de la ligne en traitement contient "D231201"
        If fh.Range("B" & I) = "D231201" Then
            ' j'ajoute dans la variable somme  la somme déja enregistrée + la valeur de la cellule F et ligne en cours de traitement
            Somme = Somme + fh.Range("F" & I)
        End If
    Next I
    ' j'envoie le message somme
    MsgBox Somme
End Sub
Super merci pour ton retour instructif
 

Claudinedu13

XLDnaute Junior
Bonjour,
Peut être plus simple :
VB:
Sub BoutonAddition()
Dim Total, Code
    Code = "D231201"
    Total = Application.SumIf([Tableau_AvoirsAcomptes[Réf AV AC]], Code, [Tableau_AvoirsAcomptes[Montant AV AC]])
    MsgBox "Total D231201 : " & Total
End Sub
Ce qui correspond en XL à :
Code:
=SOMME.SI(Tableau_AvoirsAcomptes[Réf AV AC];"D231201";Tableau_AvoirsAcomptes[Montant AV AC])
Merci 👍
 

Claudinedu13

XLDnaute Junior
Bonjour,
Peut être plus simple :
VB:
Sub BoutonAddition()
Dim Total, Code
    Code = "D231201"
    Total = Application.SumIf([Tableau_AvoirsAcomptes[Réf AV AC]], Code, [Tableau_AvoirsAcomptes[Montant AV AC]])
    MsgBox "Total D231201 : " & Total
End Sub
Ce qui correspond en XL à :
Code:
=SOMME.SI(Tableau_AvoirsAcomptes[Réf AV AC];"D231201";Tableau_AvoirsAcomptes[Montant AV AC])
Bonsoir @sylvanu

Je vais encore abuser, comment obtenir le nombre de fois où on trouve D231201 dans la colonne Réf AV AC ?

Merci d'avance , je dois chercher des heures pour trouver des trucs très simple comme ça...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Avec :
VB:
Qté = Application.CountIf([Tableau_AvoirsAcomptes[Réf AV AC]], Code)
1731089955592.png
 

Pièces jointes

  • AdditionTest (1).xlsm
    19 KB · Affichages: 1

Discussions similaires

Réponses
7
Affichages
538