IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

faire une somme avec condition et select case [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut faire une somme avec condition et select case
    Bonjour
    je ne parviens pas a résoudre un problème . je me retourne donc vers vous

    J'ai un tableau Excel avec plusieurs colonnes et je souhaiterais créer sous VB Excel, la formule SOMME.SI.ENS pour afficher des sommes avec plusieurs critères.
    Et pour cela, je pensais utiliser le select case . Je sais créer des select case avec plusieurs conditions mais là ou je bloque c'est de créer une SOMME.Si avec des selects case.

    Par exemple. si on se réfère au petit tableau ci dessous:
    je souhaiterais avoir dans une cellule, la somme des nombre dont le critère dans la colonne "CODE" sera 1111 et le critère dans la colonne "lettres serait B".
    J'avais commencé ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    sub test ()
    Dim i As Long
    Dim code as string
    Dim Lettes as string
    
    code=Cells(i,1)
    lettres=Cells(1,2)
    
    Select Case code
        Case 111
            Select Case lettres
                Case Is = "A"
    
    reste du code a créer 
    
    ..........
    
    
    end sub
    Nom : tableau.PNG
Affichages : 144
Taille : 7,2 Ko

  2. #2
    Membre éclairé
    Homme Profil pro
    curieux
    Inscrit en
    Février 2025
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2025
    Messages : 39
    Par défaut
    Bonjour,

    Select Case c'est plutot comme SI.MULTIPLE/SWITCH. Pas pour les conditions multiples.

    Avant d'analyser les cellules, pour faire une somme il faut dans un premier temps parcourir le tableau.
    On commence donc par une boucle For. On va boucler sur chaque ligne puisqu'il y a des informations à récupérer dans plusieurs colonnes.
    Ensuite, pour chaque ligne, on peut faire un Select Case pour additionner, ou non, les valeurs. Mais c'est bizarre. Il vaut mieux définir en amont les conditions, et utiliser un simple If : plus versatile et moins de code nécessaire.

    Ainsi, une manière plus simple de faire une somme.si est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public Sub Exemple()
      Dim myData As Variant
      With ThisWorkbook.Worksheets(1).Range("A2")
        myData = Range(.Cells, .End(xlToRight).End(xlDown)).Value2
      End With
     
      ' definition des criteres de la somme
      Dim codeCriteria As Long: codeCriteria = 111
      Dim lettCriteria As String: lettCriteria = "A"
      ' parcours des lignes du tableau
      Dim i As Long, somme As Double
      For i = LBound(myData, 1) To UBound(myData, 1)
        ' verification des conditions
        If myData(i, 1) = codeCriteria And myData(i, 2) = lettCriteria Then
          ' addition
          somme = somme + myData(i, 3)
        End If
      Next i
     
      ' resultat
      Debug.Print somme
    End Sub

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    je ne suis pas certain que j'ai compris la demande mais somme.si.ens en VBA Application.WorksheetFunction.SumIfs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim F As Worksheet
    Set F = Sheets("Feuil2")
    F.Range("F5").Value = Application.WorksheetFunction.SumIfs(F.Range("C2:C15"), F.Range("B2:B15"), "A", F.Range("A2:A15"), "111")
    End Sub

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Hello,

    Principe KISS (Keep It Simple and Stupid), Application.WorksheetFunction.SumIfs() est ton amie.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim criteria1 As Long
    criteria1 = 111
     
    Dim Criteria2 As String
    Criteria2 = "B"
     
    Dim Result As Double
    Result = Application.WorksheetFunction.SumIfs(Range("C2:C11"), Range("A2:A11"), criteria1, Range("B2:B11"), Criteria2)
     
    Debug.Print Result
    Pourquoi faire compliqué quand on peut faire simple ?

  5. #5
    Membre Expert Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 1 222
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Pourquoi faire compliqué quand on peut faire simple ?
    Nom : Shadok.jpg
Affichages : 104
Taille : 21,3 Ko
    A cause des shadocks

  6. #6
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 516
    Par défaut
    Bonjour à tous,
    Application.WorksheetFunction.SumIfs() est ton amie.
    C'est clair, et pour allez plus loin et sur certaines versions d'Excel utiliser la fonction filtre qui pourras renvoyer bien plus que la somme.


    Bonne programation.

  7. #7
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Merci à tous pour vos réponse.
    ca marche a merveille

  8. #8
    Membre Expert
    Avatar de tototiti2008
    Homme Profil pro
    Formateur/développeur
    Inscrit en
    Octobre 2008
    Messages
    1 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Formateur/développeur

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 205
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        If myData(i, NumCol_critere1) = critère1 _
            And myData(i, NumCol_critere2) = critere2 _
            And myData(i, NumCol_critere3) <> critere3 _
            And myData(i, critere4) = critere4 Then
            somme_client = somme_client + myData(i, NumCol_Nombre)
        End If
    End Sub
    S'il y a un End If, alors les actions doivent être à la ligne après le Then

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 247
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 247
    Par défaut
    Merci à vous deux tototiti2008 et BENNASR .
    Je cloture la discussion

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Google Sheets] Faire une somme avec condition
    Par Anonyme1784 dans le forum APIs Google
    Réponses: 2
    Dernier message: 02/04/2018, 11h32
  2. Faire une somme avec un range
    Par Prekestolen dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 28/01/2009, 17h35
  3. Faire une somme avec TQuery
    Par delphino7 dans le forum Bases de données
    Réponses: 14
    Dernier message: 03/05/2008, 10h50
  4. [XML][Debutant]Faire une somme avec condition...
    Par cackybis dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/04/2006, 16h07
  5. [Excel]Faire une somme avec une macro
    Par Chlo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/01/2006, 19h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo