VBA : fonction sumif

Fermé
Utilisateur anonyme - Modifié par elsielaure le 9/12/2010 à 11:00
 Utilisateur anonyme - 12 déc. 2010 à 17:01
Bonjour

J'utilise la fonction sumif pour faire une somme suivant une condition.
Feuil11.Range("B2").Offset(i - 1, 0) = Application.WorksheetFunction.SumIf(Feuil3.Range("AS2:AS" & a), Feuil9.Range("A2").Offset(i - 1, 0), Feuil3.Range("AB2:AB" & a))

À présent j'aimerai faire une somme suivant deux conditions.
Sauriez vous comment je pourrai modifier ce code, sans passer par If , End If ; car j'ai pas mal de colonne.

Merci d'avance

Laure

4 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 déc. 2010 à 11:34
Bonjour

petite démo:
Sub somme_2conditions()
Sheets(3).Range("C3") = Evaluate("sumproduct((Feuil1!A2:A30=Feuil2!B2)*(Feuil1!B2:B30=Feuil2!C2)*(Feuil1!C2:C30))")
End Sub


maquette:
http://www.cijoint.fr/cjlink.php?file=cj201012/cij7zOnUwA.xls

0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 déc. 2010 à 11:41
modif avec variable dernière ligne

Sub somme_2conditions()
derlig = Sheets(1).Range("A65536").End(xlUp).Row

Sheets(3).Range("C3") = Evaluate("sumproduct((Feuil1!A2:A3" & derlig & "=Feuil2!B2)*(Feuil1!B2:B3" & derlig & "=Feuil2!C2)*(Feuil1!C2:C3" & derlig & "))")
End Sub
0
Utilisateur anonyme
9 déc. 2010 à 14:29
Bonjour,

Merci pour votre aide, c'est exactement ce que je cherche à faire.
Mais je ne sais pas pourquoi dans mon fichier ça ne marche pas
En voici un extrait, je voudrai garder l'expression de la dernier ligne (derlig), mais là pour le test j'ai mis 478

http://www.cijoint.fr/cjlink.php?file=cj201012/cijSpnltF3.xls

Laure
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
9 déc. 2010 à 15:03
RE,

Dans ta colonne A tu as des #NA à supprimer ! :-)
0
Utilisateur anonyme
9 déc. 2010 à 15:13
Oui c'est vrai j'avais pas fait attention.

Merci Beaucoup !!!
0
Bonsoir Michel_m

J'ai essayé sans succès du coup je reviens vous demander de l'aide.

Pourriez vous s'il vous plaît modifier votre code afin qu'il puisse fonctionner dans une boucle

Comme dans l'exemple http://www.cijoint.fr/cjlink.php?file=cj201012/cijuTlI2M2.xls

Les deux conditions varieraient en fonction des intitulés colonnes et lignes du tableau feuille 3

Merci d'avance

Laure
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2010 à 08:54
bonjour,

proposition j'espère dans la journée. J'étudie une autre méthode que "evaluate" car cela impliquerait une syntaxe diabolique de l'instruction !!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2010 à 11:47
et voilà
fait sur tes données (+ réaliste); certaines ont été modifiées pour tester mes bidouillages
sans nom d'onglets j'ai mis sheets(1) et sheets(2) à toi voir si tu dois modifier

http://www.cijoint.fr/cjlink.php?file=cj201012/cij4Is8zdw.xls
0
Utilisateur anonyme
10 déc. 2010 à 17:14
Bonsoir

Sans vouloir abuser.

Pourriez-vous s'il vous plaît jeter un coup d'oeil sur l'exemple ci joint

http://www.cijoint.fr/cjlink.php?file=cj201012/cijvuZHw6C.xls

Je ne sais pas pourquoi mais j'obtiens un tableau décalé d'une colonne et d'une ligne alors que je n'ai pas modifié votre code.

Aussi si possible je voudrai que soient classé dans ce tableau les chiffres par ordre décroissant les sommes. Afin que je puisse avoir les 10 plus gros secteurs s'affichant dans les 10 premières lignes du tableau en fait.

Merci d'avance

Laure
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
10 déc. 2010 à 18:47
Il n' y a rien dans la feuille "calcul" !!! :-((

au départ, c'était juste établir en VBA une somme à 2 conditions:
j'aimerai faire une somme suivant deux conditions.

ensuite une matrice de 14 colonnes par 30 lignes

et maintenant:...

que soient classé dans ce tableau les chiffres par ordre décroissant les sommes Afin que je puisse avoir les 10 plus gros secteurs s'affichant dans les 10 premières lignes du tableau en fait.
Il y a 14 colonnes....


Après, tu voudrais que ..?
0
Utilisateur anonyme
10 déc. 2010 à 22:56
Bonsoir

La feuille Calcul se rempli via la macro données.

Oui je voulais faire une somme suivant deux conditions.
Mais au départ je pensais que mon code (celui de ma question) était adaptable et que j'aurais donc pu le mettre dans une boucle (comme je l'ai fait pour une condition) et qu'ensuite j'aurai classé les résultats.
Je sais que j'abuse là ... mais je n'arrive pas à modifier votre code.
Je débute en VBA et je n'aurais moi pas pu écrire tout ça ...

Merci pour votre aide.

Laure
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 12/12/2010 à 08:21
bonjour,

Je n'ai vu AUCUNE DONNEE dans le classeur que tu m''as transmis... que ce soit dans TCD3 et CALCUL !!!
de m^me aucun renseignement sur un décalage (où, quelle ligne et/ou colonne) et sur le tri que je t'avais déjà demandé et resté sans réponse

mais à moi de me demer... avec rien !!!

De toutes façons la solution ne passe certainement pas par de sumif ni des sumproduct comme tu m'as embarqué mais par des TCD comme sont baptisés des onglets...

Il faut bien te rendre compte que ce que tu demandes n'est pas forcément facile et que personne ne veut passer parfois plusieurs heures à essayer de résoudre un problème bénévolement pour se voir dire après coup ) il faut en plus que....

Désolé, suivi abandonné
0
Utilisateur anonyme
12 déc. 2010 à 17:01
Ok
au final j'en suis au même point
mais merci quand même.
0