URGENT : macro pour calculer une somme avec condition dans excel

2s1 - 12 janv. 2013 à 09:58
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016 - 28 janv. 2013 à 17:56
Bonjour tous le monde,

J'ai besoin de votre aide pour créer un code qui calcule la somme d'une range sans utiliser les fonctions du genre FORMULA ou FORMULAR1C1.

- du genre :
for i = 2 to nombre de ligne non vide de la colonne A
somme range("E2:E" & i)
- ou plus
somme range("E2:E"&i) si range ("A2:A" &i) = ("A"&i)

2S1
101 - Madagascar

16 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2013 à 10:38
Bonjour,
Intéresse-toi donc :
- en simple formule Excel :à SOMME.SI
- en VBA : à Worksheetfunction.SUMIF
=>> dans ton aide VBA !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Un peut sec mais merci,
je vais essayer de trouver la suite et reviendrais vers vous en cas de blem,

2S1
101 - Madagascar
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2013 à 10:49
Un peut sec mais merci

tout simplement une invite à apprendre les bases, avant de te lancer.
Et ce d'autant que tu as ouvert une autre discussion sur un sujet bien plus complexe, que tu ne saurais réaliser sans un minimum de connaissances (à acquérir, au moins celles de base).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Je me suis déjà penser et panser sur le vba excel. En voici une bout de code sur un de mes bouton que je demande avoir besoin d'aide :

Private Sub jajouter_Click()
    Dim li As Integer
    Dim qe As Range 'quantité entree
    Dim qs As Range 'quantité sortie
    Dim crit As Range 'critère
    
    Set qe = Sheets("fjournal").Range("F2:F" & Sheets("fjournal").[F65536].End(xlUp).Row)
    Set qs = Sheets("fjournal").Range("F2:F" & Sheets("fjournal").[F65536].End(xlUp).Row)
    
    li = 1
    Do Until IsEmpty(Sheets("fjournal").Range("B" & li))
    
    'champs obligatoire
        If jlistarticle.Value "" Or jdate.Value "" Or jqte.Value = "" Then
            MsgBox "Veuillez renseigner tous les champs obligatoire (*)", vbInformation, "Champs obligatoire"
            Exit Sub
        End If
        
    
    li = li + 1
    Loop
    Dim x As Integer
    If jSortie.Value True Then x 7
    If jEntree.Value True Then x 6
        With Sheets("fjournal")
            .Range("B" & li) = CDate(jdate) 'date
            .Range("C" & li) = jcode.Value  'code article
            .Range("D" & li) = article.Caption 'designation article
            .Cells(li, x) = jqte.Value 'quantité en mouvement
            .Range("H" & li) = jprix.Value
            .Range("I" & li) = jnb.Value
        End With
        
        With Sheets("fstock")
           While Range("c" & x) <> ""
                If Range("C" & x) = jcode.Value Then
                crit = Range("C" & x)
'c'est ici que je vais inserer les codes qui calcules le somme des articles restant en stock                    
Range("H" & x).Formula = "=sumif(qa;crit;qe)+sumif(qa;crit;qs)"
                End If
           Wend
        End With
        
    userform_initialize
        
        jqte.Value = ""
        jnb.Value = ""
End Sub



2S1
101 - Madagascar
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2013 à 11:34
1) SOMME.SI est une formule. Elle est en français et utilise le point-virgule
SUMIF est sa correspondance en anglais et sa notation utilise, elle, la virgule.
2) SUMIF est imposée par la propriété Formula.
La propriété FormulaLocal permet, elle, l'utilisation de SOMME.SI
Là encore, un petit tour dans l'aide VBA t'éclairera.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Une minute,
je test ce que vous venez de m'apprendre.
En fait, je suis un amateur et autodidacte en vba excel
Votre conseil m'aide beaucoup à avancer. Merciii!

2S1
101 - Madagascar
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 janv. 2013 à 11:44
En fait, je suis un amateur et autodidacte en vba excel

Il se trouve que moi également.
Pire : je ne m'y suis intéressé qu'il y a un an et uniquement pour aider
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
an
je ne m'y suis intéressé qu'il y a un 

Vous êtes probablement expérimenter dans ce cas, car c'est la première fois pour moi de joindre une échange et je vous le dit que je suis déjà satisfait.

revenant a notre code :

le vient de modifier la ligne depuis
with sheets("stock")
...
end with


et j'ai mis :
While Sheets("fstock").Range("c" & x) <> ""
    If Sheets("fstock").Range("C" & x) = jcode.Value Then
        crit = Sheets("fstock").Range("C" & x)
        Sheets("fstock").Range("H" & x) = jqte.Value + WorksheetFunction.SumIf(qa, crit, qe) - WorksheetFunction.SumIf(qa, crit, qs)
End If
Wend


mais excel plant et je devrais sortir en appuyant ECHAPPE la ligne jaune s'arrête sur
end if

2S1
101 - Madagascar
0
excel plante,
Pourriez-vous apporter quelque modification ou commantaire...

d'avance , merci


2S1
101 - Madagascar
0
re,

Je suis arrivé à éviter les erreurs et le plantage avec

dim z,f as integer
dim qa, qe, qs, crit, solution as range

f = sheets("feuil1").range("B65536").end(xlup).row
set qa = sheets("feuil1").range("C2:c"&f)
set qe = sheets("feuil1").range("F2:F"&f)
set qs = sheets("feuil1").range("G2:G"&f)

z = 2
        While Sheets("feuil2").Range("c" & z) <> ""
       
            If Sheets("feuil2").Range("C" & z) = jcode.Value Then
            
Set crit = Sheets("feuil2").Range("C" & z) 'le critère de recherche
Set resf = Sheets("feuil2").Range("H" & z) 'ancien valeur de disponible (critère)
Set solution = Sheets("feuil2").Range("H" & z) 'nouvel valeur de  après calcule

solution = resf + WorksheetFunction.SumIf(qa, cri, qe) - WorksheetFunction.SumIf(qa, crit, qs)

            End If
        
            z = z + 1
        Wend

Mais ça n'écrit rien sur les cellules cible (ici = solution).

2S1
101 - Madagascar
0
Corriger les lignes suivants et c'est REGLE
f = sheets("feuil1").range("B65536").end(xlup).row + 1
If Sheets("feuil2").Range("C" & z) = val(jcode.text) Then

Set resf = Sheets("feuil2").Range("F" & z)

si quelqu'un peut simplifier ce serait beaucoup mieux. BONNE CHANCE

2S1 (se lit Toussaint)
101 - Madagascar
0
En fin de compte l'équivalent de la formule :
=F2+SOMME.SI(feuil1!C2:C25;feuil2!C2;feuil1!F2:F25)-SOMME.SI(feuil1!C2:C25;feuil2!C2;feuil1!G2:G25)

en vba :
dim qa, qe, qs, crit, solution, resf as range
= resf + WorksheetFunction.SumIf(qa, cri, qe) - WorksheetFunction.SumIf(qa, crit, qs)


Bonne dev à tous.

2S1
101 - Madagascar


2S1
101 - Madagascar
0
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
14 janv. 2013 à 10:02
ça plante parce que ça tourne en rond : ton while ne s'arrete jamais car tjrs vrai : excel plante pas, il bourrine

While Sheets("fstock").Range("c" & x) <> ""


Wend




coïto ergo sum
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 janv. 2013 à 10:38
Bonjour, etniqs,
Qu'est-ce que tu racontes ?!
A 2s1 :
dim z,f as integer
dim qa, qe, qs, crit, solution as range

sous VBA, font que :
- seule f est typée comme un integer et que seule solution est typée comme Range ! qa, qe, qs et z, non typées, ne seront que des variant !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
RÉPONSE ACCEPTÉE

2S1
101 - Madagascar
0
cs_etniqs Messages postés 201 Date d'inscription mardi 7 octobre 2003 Statut Membre Dernière intervention 10 mai 2016
28 janv. 2013 à 17:56
Qu'est-ce que je raconte ? voyons voyons

tu peux me dire quand s’arrête ta boucle While Sheets("feuil2").Range("c" & z) <> ""

puisqu'il n'y a pas de condition d'arrêt, en fait, "ça s'arrete quand ça plante" !
et ça plante quand l'integer z est atteint, hors ton tableau de range est plus grand que l'integer signé (dans excel) : 2^16 !

PS : on parle bien de .Range("c" & z).value, hein, parce que .range tout seul ...
NB : je présume aussi que :
- tu n'as pas de "on error resume next" collé qqpart
- que tu n'as pas de limite au nombre d'itération dans les options d'excel (puisque tu utilises WorksheetFunction.SumIf), ce qui ferait que tu sautes les erreurs de cast.


coïto ergo sum
0
Rejoignez-nous