VBA : fonction sumif

Utilisateur anonyme -  
 Utilisateur anonyme -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    2. Utilisateur anonyme
       
      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
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      RE,

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

      Merci Beaucoup !!!
      0
  2. Utilisateur anonyme
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  3. Utilisateur anonyme
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  4. Utilisateur anonyme
     
    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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
    2. Utilisateur anonyme
       
      Ok
      au final j'en suis au même point
      mais merci quand même.
      0