[VBA Excel] Somme de données avec condition

cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007 - 14 févr. 2007 à 11:39
aski1er Messages postés 2 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 février 2007 - 15 févr. 2007 à 23:09
Bonjour,





Je travaille sur une table dont une des colonnes est la
région (A) et les autres sont des montants de différentes aides (B1, B2, B3
etc....).


Je travaille sur plusieurs onglet (1 par année).


Je cherche a faire une macro qui calcule pour chaque année,
la somme des montants (SumB1, SumB2, SumB3 etc....) mais seulement pour les
exploitations de la région A choisie.


J'ai fait la macro suivante :




Dim ligne As Integer


Dim Sum As Long



 





    Sum = 0



    ligne = 2 'mes données démarrent a partir de la seconde ligne'



    While Cells(ligne, 14).Value <> Null 'données région sont en colonne 14'



       
If Cells(ligne, 14).Value = FR62 Then






        Sum = Sum + Cells(ligne, 16).Value 'Montants B1'






        End If






       
ligne = ligne + 1



    Wend



    Sheets("total FR62").Select 'je range mes résultats dans un autre onglet'



    Cells(19, 2).Value = Sum









Mais voila, ca ne marche pas du tout. Ca m'écrit 0 dans la
cellule 19,2 de l'onhlet total FR62. Et je non seulement je ne parvient pas a
trouver l'erreur mais en plus je n'arrive pas a faure en sorte qu'il répete ca
pour toutes les colonnes de montants B.






 





Je vous remercie par avance de votre aide :-)

Elendis

19 réponses

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 févr. 2007 à 11:43
Salut,

"mais seulement pour les exploitations de la région A choisie. "

Une exploitation est choisie lorsque FR62 est dans la colonne 14? c'est ca? sinon quel est le critère pour dire qu'une exploitation est choisie.

@+: Ju£i?n
Pensez: Réponse acceptée
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 févr. 2007 à 11:47
If Cells(ligne, 14).Value = FR62 Then<?XML:NAMESPACE PREFIX = O /??>

  c'est quoi FR62?

If Cells(ligne, 14).Value = "FR62" Then

Mais bon peut-être une faute de frappe.

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 11:49
oui, pardon, c'est ca le critére de sélection : il faut que la région soit FR62 donc que
Cells(ligne, 14).Value = "FR62"

Elendis
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 févr. 2007 à 11:53
Et donc du coup ca marche ?

@+: Ju£i?n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 févr. 2007 à 11:53
Salut au fait (pardon!)

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 11:53
non... toujours pas
Elendis
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 févr. 2007 à 11:56
Salut,
Faisons dans l'ordre
Essaie

...
If Cells(ligne, 14).Value = FR62 Then

'Deja tu verras si cela te retourne bien la valeur qui est dans la Colonne 16

MSGBOX Cells(ligne, 16).Value 'Montants B1'

End If

...

@+: =89254 Ju£i?n
Pensez: Réponse acceptée
0
drikce06 Messages postés 2236 Date d'inscription lundi 29 mai 2006 Statut Membre Dernière intervention 29 mai 2008 10
14 févr. 2007 à 11:57
Ok, alors ne valide pas les réponses! Essaye d'expliquer un peu mieux ton problème, la description de ta feuille excel et les différentes conditions etc...

 Drikce 06

Si la réponse vous convient: Réponse acceptée. Si la réponse vous convient pas:
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 12:03
ca ca marche bien. Ca me renvoie le bon montant. Donc c ma boucle qui est foireuse ?
Elendis
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
14 févr. 2007 à 13:01
Heu, toute petite question.
Si c'est juste pour faire une somme en fonction d'un critère dans ta colonne A, pourquoi ne pas utiliser tout simplement la formule SOMME.SI ?

Molenn (qui aime bien mettre des formules dans EXCEL )
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 14:11
Merci, je ne connaissais pas. (en fait je ne connais vraiment pas VBA..........)
Je vais regarder dans l'aide comment ca marche SOMME.SI et je teste pour voir comment je peux m'en servir.
Elendis
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 15:26
Ah ok, en fait c'est une fonction d'excel.
Merci 1000 fois, c'est vraiment génial !!!!!!!!!!!!!!!!!!!!! et nettement moins tordue que de faire une macro pour ca ;-)

Elendis
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 16:52
Mais je continue tout de meme a chercher a la faire marcher car je vais devoir faire le meme genre de travail sauf que ce ne sera pas une simple somme mais une moyenne pondérée et dans ce cas, la fonction SOMME.SI, ne pourra pas m'aider......
Elendis
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
14 févr. 2007 à 16:59
Et bien, de la même façon qu'il existe SOMME.SI, il existe des formules de moyenne déjà toute faite dans Excel.
Et si ce n'est pas suffisant, tu peux tout à fait créer toi même ta moyenne avec par exemple un rapport entre une formule SOMME.SI / NB.SI en fonction de tes critères.
Il faut décomposer ce que tu as besoin d'obtenir, mais s'il ne s'agit que de calculs, ça serait quand même étonnant que tu n'arrives pas à obtenir un résultat à partir de formules, sans une seule ligne de code VBA.

Molenn
0
cs_elendis Messages postés 14 Date d'inscription vendredi 28 janvier 2005 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 17:48
en effet si la fonction .SI peut etre rajouter a d'autres fonction comme PRODUIT ou NB, alors je devrais m'en sortir trés bien comme ca.
Merci encore. Et désolée de pauser des questions dont les réponses sont si simple pour nombre d'entre vous.... je ne suis pas une habituer de ce genre d'activité. Mais c'est une trés bonne chose d'y etre confrontée (je me coucherais plus intelligente ;-)

Elendis
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
14 févr. 2007 à 23:34
SommeProd peut être intéressante s'il y a plusieurs critères, mais elle est lente lorsqu'il y en a beaucoup.

Un tableau croisé dynamique pourrait peut-être aussi te rendre service... (?)

MPi
0
aski1er Messages postés 2 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 février 2007
15 févr. 2007 à 05:53
salut voici mon code
Private Sub txtLastName_Change()
   On Error Resume Next
   If Not Application.WorksheetFunction.IsText(Right(txtLastName, 1)) Then
        MsgBox "The character is not correct"
        txtLastName = Left(txtLastName, Len(txtLastName) - 1)
    End If
    Else
    MsgBox "correct"
    End If
End Sub

et en fait je ve vérifier si le text saisi est une lettre de l'alphabet!
Quelqu'un pourrait il m'aider
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
15 févr. 2007 à 10:54
Tu peux vérifier le code ASCII du caractère saisi :

Select Case Asc(txtLastName.text)
      Case 65 to 90, 97 to 122 'Lettre en majuscule / minuscule 
            msgbox "Correct"
      Case Else
            msgbox "Incorrect"
End Select

Mais je cherche encore le rapport avec le sujet qui est :
"Somme de données avec condition "

Molenn
0
aski1er Messages postés 2 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 15 février 2007
15 févr. 2007 à 23:09
ok! merci en fait c'est ce ke j'ai fait!
et voici le code final
If Not ((Asc(Right(txtLastName, 1)) >= 65 And Asc(Right(txtLastName, 1)) <= 90) _
        Or (Asc(Right(txtLastName, 1)) >= 97 And Asc(Right(txtLastName, 1)) <= 122)) Then
        MsgBox "This character is not correct retype another one", vbInformation, "New Character"
        txtLastName = Left(txtLastName, Len(txtLastName) - 1)
        txtLastName.SetFocus
   End If
0
Rejoignez-nous