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 :

Problème avec la fonction SumIf et condition Dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Points : 110
    Points
    110
    Par défaut Problème avec la fonction SumIf et condition Dates
    Bonjour a Tous,

    J'ai un problème sur une procédure utlisant la fonction < sumIf >

    Je souhaiterais pouvoit faire la somme de montants compris entre deux dates

    Le tableau de 3 colonnes se présente comme suit

    Dates - Vendeurs - Montants

    La colonne Dates est formatée - de Catégorie: Date - Type : 14/03/2001

    Voici mon code de test

    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 Essai_Dates()
        Dim Date1 As Long, Date2 As Long
        Dim dDate As Date
        Dim Donnees As Range
        Dim CA As Double
     
        dDate = "15/03/12"
        Date1 = dDate
     
        dDate = "30/06/12"
        Date2 = dDate
     
        MsgBox Date1 & " - " & Date2
     
         '* Plage des données
        Set Donnees = Range("B2:D" & [B2].End(xlDown).Row)
     
        MsgBox ">=" & Date1 And "<=" & Date2
     
        CA = Application.SumIf(Donnees.Columns(1), ">=" & Date1 And "<=" & Date2, Donnees.Columns(3))
     
        MsgBox CA
     
        '* Libère mémoire
        Set Donnees = Nothing
     
    End Sub
    Code qui me renvoie

    - Erreur d'exécution 13
    - Incompatibilité de Type

    sur l'expression : ">=" & Date1 And "<=" & Date2

    D'avance merci de votre aide

    ____________________
    Bien cordialement

    Albert

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Est ce que tu peux écrire sur Excel ce qui suit?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(B2:B100; ET(>=40983;<=41090);D2:D100)
    Pour ton cas utilise plutôt SOMMEPROD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((B2:B100>= 40983) * (B2:B100<= 41090) * (D2:D100))
    En VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Essai_Dates()
    Dim Date1 As Long, Date2 As Long
    Dim LastLig As Long
    Dim CA As Double
     
    Date1 = DateSerial(2012, 3, 15)
    Date2 = DateSerial(2012, 6, 30)
    With Worksheets("Feuil1") ' A adpter
        LastLig = .Cells(.Rows.Count, "B").End(xlUp).Row
        CA = Evaluate("SUMPRODUCT(('" & .Name & "'!B2:B" & LastLig & ">=" & Date1 & ")*('" & .Name & "'!B2:B" & LastLig & "<=" & Date2 & ")*('" & .Name & "'!D2:D" & LastLig & "))")
        MsgBox CA
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Points : 110
    Points
    110
    Par défaut
    Bonsoir Mercator

    Merci pour ces codes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((B2:B100>= 40983) * (B2:B100<= 41090) * (D2:D100))
    mais c'est le code VBA qui m'intéresse plus particulièrement mais que dans un
    premier temps je vais essayer d"abord de l'analyser et le comprendre

    Merci encore de ton aide

    _______________________

    Bien Cordialement et bonne soirée

    Albert

  4. #4
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    La formule a été donnée pour comprendre le code d'après car elle y est utilisée.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Avec deux critères , il vaut mieux passer sans doute par SOMMEPROD (voir les messages de mercatog) mais si on veut utiliser SOMME.SI et à condition d'être sous Excel 2007 ou 2010,
    on peut utiliser l'équivalent sous VBA de SOMME.SI.ENS. c'est à dire SumIfs et remplacer dans le code initial la ligne 20 par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CA = Application.SumIfs(Donnees.Columns(3), Donnees.Columns(1), ">=" & Date1, Donnees.Columns(1), "<=" & Date2)
    et sans doute aussi, écrire pour la ligne 18 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ">=" & Date1 & "<=" & Date2
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ">=" & Date1 & "And " & "<=" & Date2
    Pour le message d'erreur avec le code initial , il est normal que le langage n'apprécice pas l'emploi d' un opérateur logique (AND) entre deux chaines de caractères
    Cordialement
    Claude

  6. #6
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2012
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2012
    Messages : 75
    Points : 110
    Points
    110
    Par défaut
    Bonjour Claude

    Merci pour ce code

    que je viens d'adapter avec une condition supplémentaire
    < Nom du Vendeur > pour obtenir le CA du vendeur dans une période donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     CA = Application.SumIfs(Donnees.Columns(3), Donnees.Columns(1), ">=" & Date1, Donnees.Columns(1), "<=" & Date2, Donnees.Columns(2), Vendeur)
    code qui me retourne le montant correct

    J'ai essayé d'adapter également le code de Mercator mais sans succès

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [CA] = Evaluate("SUMPRODUCT((" & ColDate.Address & ">=" & Date_1 & ")*(" & ColDate.Address & "<=" & Date_2 & ")*(" & ColVD.Address & "=" & Vendeur & ")*(" & ColMvts.Address & "))")
    alors que lcette formule dans excel donne le résultat escompte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SOMMEPROD((B3:B33>= 40983) * (B3:B33<= 41090) *(C3:C33=L7)* (D3:D33))
    Encore merci et bon WE
    _____________________

    Cordialement

    Albert

Discussions similaires

  1. [Dates] Problème avec la fonction date()
    Par Kernald dans le forum Langage
    Réponses: 5
    Dernier message: 16/02/2007, 11h50
  2. problème avec la fonction date()
    Par puppusse79 dans le forum Access
    Réponses: 4
    Dernier message: 24/03/2006, 15h59
  3. [Dates] Problème avec la fonction header
    Par d.w.d dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 16h33
  4. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

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