Utiliser la fonction "Sumif" en VBA et faire une boucle

Signaler
Messages postés
4
Date d'inscription
lundi 23 novembre 2009
Statut
Membre
Dernière intervention
27 novembre 2009
-
 Utilisateur anonyme -
Bonjour,

Je cherche le code à mettre en VBA pour utiliser la fonction "Sumif". je voudrais faire une boucle dessus. j'ai un onget "Recap" ou je dois mettre les valeurs en foction d'un numero, et ces valeurs viennent d'un autre onglet.

Merci d'avance
A voir également:

8 réponses

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
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Tout simplement en appelant une fonction de la feuille :

WorksheetFunction.SumIf

Molenn
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

m'ouai ... mais plutot douteuse la methode

il y a quand même, en vba, l'instruction If
qui se suffit à elle même il me semble

Mais bon...

A+
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Bonsoir,

... non, pas si douteuse que ça... L'emploi des fonctions intégrés à l'application peut se révéler plus pratique dans bien des cas... c'est même l'intérêt du VBA par rapport au VB (tout court) !

Exemple complet du code :
a = WorksheetFunction.SumIf(Range("A1:A10"), "<10", Range("B1:B10"))
MsgBox a


Amicalement,
Us.
Bonjour

Moi aussi j'y travail dessus en cherchant 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)



j'ai essayé 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 disponible (critère)
Set solution = Sheets("feuil2").Range("H" & z) 'nouvel valeur 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 (sans message d'erreur)
Si, quelqu'un peut aider?

2S1
101 - Madagascar
Maintenant ça marche à merveille

voici les modifications
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) 'ancien valeur disponible (critère)

et voila.
Nous avons le sous total conditionnel qui boucle à chaque changement de critère. et cela avec une liaison entre DEUX FEUILLES

je tiens à partager mes découvertes comme beaucoup d'entre vous le fait.
Si quelque peut simplifier, ce serait mieux.

Notre ignorance n'est pas aussi vaste que notre incapacité d'utiliser ce que nous savons.


2S1
101 - Madagascar

Bonjour,

Désolé pour le message blanc. J'ai cliqué sur Envoyer par erreur.