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 :

PB somme avec condition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Par défaut PB somme avec condition
    Bonjour,
    J'ai un besoin urgent d'effectuer des sommes sous condition en VBA (excell 97). Je joins un petit fichier où j'ai résumé simplement la problématique.

    En fait, je souhaite obtenir en feuille 3 (cellule B6) la somme des montants de la colonne G (plage variable) dans la feuille 2 avec la condition d'avoir en correspondance "CE" en colonne H.

    Voici mon code qui ne m'apporte pas la solution :

    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
    23
    24
    25
    26
    27
    Sub somme_finale()
     
    Dim compteur As Long
     
     
    Sum = 0
     
    ligne = 2
     
    finG = Sheets("Feuil2").Range("G65535").End(xlUp).Row
     
    For compteur = 2 To finG
     
     
       If Sheets("Feuil2").Range("H" & compteur).Value = "CE" Then
     
            Sum = Sum + Sheets("Feuil2").Range("G" & ligne).Value
     
         ligne = ligne + 1
     
        End If
     
    Next
     
    Sheets("Feuil3").Range("B6").Value = Sum
     
    End Sub
    Merci d'avance pour l'aide

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pas besoin de vba
    En B6 de Feuil3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(Feuil2!H2:H100;"CE";Feuil2!G2:G100)

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Dans ta boucle, tu utilises 2 variables : "compteur" pour l’itération et "ligne" pour la ligne correspondant à la valeur à intégrer au cumul.
    Le problème, c’est que "ligne" ne s’incrémente que lorsque la condition sur la cellule adjacente à celle pointée par "compteur" est vérifiée. Tu crée ainsi un décalage entre la ligne scrutée et la ligne qui contient la valeur à cumuler et au final, tu ne cumules pas les bonnes valeurs.
    Pour obtenir un résultat correct, il te suffit d’utiliser une seule variable (Ligne).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Sub Somme_finale()
    Dim FinG As Long, Ligne As Long
    Dim Cumul As Double
        With Worksheets("Feuil2")
            FinG = .Range("G65535").End(xlUp).Row
            For Ligne = 2 To FinG
                If .Range("H" & Ligne).Value = "CE" Then
                    Cumul = Cumul + .Range("G" & Ligne).Value
            End If
        Next
        End With
        Worksheets("Feuil3").Range("B6").Value = Cumul
    End Sub
    Cela dit, il est vrai que VBA ne s’impose pas dans un cas pareil.

    Cordialement.

  4. #4
    Membre actif
    Homme Profil pro
    fonctionnaire utilisant VBA
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : fonctionnaire utilisant VBA
    Secteur : Service public

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Par défaut
    Bonjour et merci aux 2 personnes m'ayant répondu rapidement.

    En fait je connais la SOMME.Si sous Excel mais je travaille sur un projet entièrement à traiter en VBA.

    La réponse apportée en VBA marche très bien. Cependant, en réalité (je ne l'avais pas précisé), en colonne G il y a parfois des valeurs égales à zéro. Le cumul s'arrête alors et je n'obtiens pas le véritable total par code se trouvant en colonne H. Pourriez-vous m'aider ?

    J'ai aussi un problème avec VLookup. Je maitrise la syntaxe de base mais dans mon projet il y a des plages variables dans 2 feuilles distinctes. Si j'applique la méthode de base je rapatrie plus de valeurs qu'il n'en faut ("N/A"). J'ai essayé de définir des plages variables mais cela ne marche pas. Pourriez-vous également m'aider ?

    Précisions :Si les 2 plages étaient fixes, le code serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("K2:K2667") = Application.WorksheetFunction.VLookup(Range("C2:C2667").Value, Worksheets("feuil2").Range("A2:B2667"), 2)
    Malheureusement, la colonne K (en feuil1) varie et la colonne C aussi (information associée à la colonne K). Idem pour la zone en feuil2. La feuil1 contient des données et la feuil2 des normes que je veux lui associer.

    Par avance merci

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    SOMME.SI en vba
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Somme_Finale()
    Dim FinG As Long
     
    With Worksheets("Feuil2")
        FinG = .Cells(.Rows.Count, "G").End(xlUp).Row
        Worksheets("Feuil3").Range("B6").Value = Application.SumIf(.Range("H2:H" & FinG), "CE", .Range("G2:G" & FinG))
    End With
    End Sub

Discussions similaires

  1. somme avec condition de fréquence
    Par V i n c e n t dans le forum Excel
    Réponses: 2
    Dernier message: 30/04/2009, 08h40
  2. fonction somme avec condition
    Par damien40 dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/05/2008, 19h33
  3. somme avec condition
    Par PC81 dans le forum Excel
    Réponses: 8
    Dernier message: 21/04/2008, 11h40
  4. calcul somme avec condition
    Par igour dans le forum Access
    Réponses: 2
    Dernier message: 22/01/2007, 16h21
  5. [XML][Debutant]Faire une somme avec condition...
    Par cackybis dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/04/2006, 16h07

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