Menu

Somme de cellules selon critère [Résolu]

lili4915 13 Messages postés lundi 11 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 13 juin 2018 à 14:42 - Dernière réponse : lili4915 13 Messages postés lundi 11 juin 2018Date d'inscription 14 juin 2018 Dernière intervention
- 14 juin 2018 à 09:33
Bonjour,

Je souhaiterais créer un programme qui recherche dans ma colonne B les lignes dont les chiffres sont supérieurs à 60000000 et qui somme les montants de la colonne G qui correspondent à ces mêmes lignes.

J’ai essayé avec la formule suivante mais elle m’affiche la somme de la colonne G entière et pas seulement sur les lignes dont le chiffre en B est > 60000000

Option Explicit
Const lignedeb = 2

Sub test()
Dim lignefin
Dim i
Dim somme
With ActiveSheet
lignefin = .Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(i, 2).Value >= 60000000 Then
somme = Application.WorksheetFunction.Sum(Range("G" & lignedeb & ":G" & lignefin))
MsgBox (somme)
End If
Next i
End With
End Sub


Pouvez-vous m’aider ?
Merci d’avance
Afficher la suite 

Votre réponse

4 réponses

ccm81 8590 Messages postés lundi 18 octobre 2010Date d'inscription 18 août 2018 Dernière intervention - 13 juin 2018 à 17:23
0
Merci
Bonjour

Essaies ceci
Const lideb = 2

Sub test()
Dim lifin As Long, i As Long, somme
With ActiveSheet
  lifin = .Range("B" & Rows.Count).End(xlUp).Row
  somme = 0
  For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
    If Range("B" & i).Value >= 60000000 Then
      somme = somme + Range("G" & i).Value
    End If
  Next i
  MsgBox somme
End With
End Sub

NB. Penses à la coloration syntaxique

Cdlmnt
lili4915 13 Messages postés lundi 11 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 13 juin 2018 à 17:32
Merci de m'avoir répondu,
il y a une incompatibilité de type avec la ligne "somme = somme + Range("G" & i).Value"

Entre temps j'ai trouvé une formule qui fonctionne, cependant le MsgBox s'affiche autant de fois qu'il y a de lignes dans mon tableau, vous savez peut-être comment régler ce problème ?

Option Explicit
Const lignedeb = 2

Sub test()
Dim lignefin
Dim i
Dim somme
With ActiveSheet
lignefin = .Range("B" & Rows.Count).End(xlUp).Row
For i = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(i, 2).Value >= 60000000 Then
somme = Application.WorksheetFunction.SumIf(Columns("B:B"), ">60000000", Columns("G:G"))
MsgBox (somme)
End If
Next i
End With
End Sub


Je m'excuse je n'ai pas trouvé la coloration syntaxique
Commenter la réponse de ccm81
ccm81 8590 Messages postés lundi 18 octobre 2010Date d'inscription 18 août 2018 Dernière intervention - Modifié par ccm81 le 13/06/2018 à 17:42
0
Merci
Peut être que dans ta colonne G ou B tu n'as pas que des numériques, tu ajoutes un test
Const lideb = 2

Sub test()
Dim lifin As Long, i As Long, somme
With ActiveSheet
  lifin = .Range("B" & Rows.Count).End(xlUp).Row
  somme = 0
  For i = 1 To lifin
    If IsNumeric(Range("G" & i).Value) And IsNumeric("B" & i).Value Then
      If Range("B" & i).Value >= 60000000 Then
        somme = somme + Range("G" & i).Value
      End If
    End If
  Next i
  MsgBox somme
End With
End Sub

Pour ta procedure, tu déplaces le MsgBox après Next i (en dehors de la boucle for i ...)
Pour la coloration syntaxique, tu selectionnes le code puis la flèche vers le bas en haut à droite de la fenêtre d'édition

Cdlmnt
lili4915 13 Messages postés lundi 11 juin 2018Date d'inscription 14 juin 2018 Dernière intervention - 14 juin 2018 à 09:33
Merci beaucoup pour votre aide, bonne journée !
Commenter la réponse de ccm81