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 :

[ VBA ] IF avec Intervalles entre 2 périodes ou dates [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Par défaut [ VBA ] IF avec Intervalles entre 2 périodes ou dates
    Bonjour,

    J' ai besoin de votre aide car je bloque sur une condition dans mon code VBA.
    Je voudrai enfaite compter un élément dans un tableau à condition que en colonne F, la date soit comprise entre le 01/03/2016 et le 07/03/2016.
    De plus la valeur en colonne I, s'incrémente dans une variable et le résultat s'affiche en cellule A1.

    Dans mon exemple ci dessous, je compte combien il y a de "CC" dans la colonne G, compris entre le 01/03/2016 et le 07/03/2016 et j'additionne la valeur en colonne I.

    testdate.xlsx


    Tout fonctionne sauf le faite de faire une intervalle entre 2 dates.

    Merci pour votre aide.

    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
    28
    29
    30
    Sub Smme()
     
     
    Dim cpt As Double
    Dim jetons As String
     
     
     
     
     'Worksheets("PRESTATIONS2").Activate
     
    Range("G2").Select
            Do While Not (IsEmpty(ActiveCell))
                li = ActiveCell.Row
                    If ActiveCell.Value = "CC" And Cells(li, 8).Value >= 1 / 3 / 2016 And Cells(li, 8).Value <= 7 / 3 / 2016 Then
                        jetons = Cells(li, 9).Value
                        cpt = cpt + jetons
                    End If
                    ' changer la position d'activecell
                    Selection.Offset(1, 0).Activate
     
            Loop
     
    ' afficher le résultat du compteur après la boucle
    Range("A1") = cpt
     
     
     
     
    End Sub

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Je te suggère d'essayer comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDate(Cells(li, 8).Value) >= CDate("1/3/2016") And  CDate(Cells(li, 8).Value) <=  CDate("7/3/2016")

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Par défaut
    Merci pour ton aide,
    Je sais pas si je l'ai bien incorporé à mon code ton idée mais ça ne fonctionne pas.
    Voici comment je l'ai incorporé:

    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
    Sub Smme2()
     
    Dim cpt As Double
    Dim jetons As String
     
     'Worksheets("PRESTATIONS2").Activate
     
    Range("G2").Select
            Do While Not (IsEmpty(ActiveCell))
                li = ActiveCell.Row
                    If ActiveCell.Value = "A" And CDate(Cells(li, 8).Value) >= CDate("01/03/2016") And CDate(Cells(li, 8).Value) <= CDate("07/03/2016") Then
                        jetons = Cells(li, 9).Value
                        cpt = cpt + jetons
                    End If
                    ' changer la position d'activecell
                    Selection.Offset(1, 0).Activate
     
            Loop
     
    ' afficher le résultat du compteur après la boucle
    Range("A1") = cpt
     
    End Sub

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Que contient ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Par défaut
    Ah mince j'ai fais une erreur de colonne,
    Cells(li, 8) correspond normalement à la colonne qui contient la date mais celle ci est en Cells(li, 6)

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Par défaut VBA équivalent du SOMME.SI compris ente 2 dates
    Voici le code si ça pourrait intéresser quelqu'un
    Merci beaucoup à cerede2000 pour son aide précieuse.


    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
    28
    29
    Sub Smme2()
     
     
    Dim cpt As Double
    Dim jetons As String
    Dim deb As Date
    Dim fin As Date
     
     
     
     
     'Worksheets("PRESTATIONS2").Activate
     
    Range("G1").Select
            Do While Not (IsEmpty(ActiveCell))
                li = ActiveCell.Row
                    If ActiveCell.Value = "A" And CDate(Cells(li, 6).Value) >= CDate("01/03/2016") And CDate(Cells(li, 6).Value) <= CDate("07/03/2016") Then
                        jetons = Cells(li, 9).Value
                        cpt = cpt + jetons
                    End If
                    ' changer la position d'activecell
                    Selection.Offset(1, 0).Activate
     
            Loop
     
    ' afficher le résultat du compteur après la boucle
    Range("A1") = cpt
     
    End Sub

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 102
    Par défaut entre deux dates
    Bonjour,

    Une chose me dérange ds ton ex de code.

    Dans ton fichier "épuré", tes données de dates semblent être en colonne F (6e colonne) donc :

    CDate(Cells(Li, 8).Value) pointe une cellule vide ! Remplace 8 par 6 et celà devrait le faire !!!

    Sinon tous tes .value ne sont pas utiles, cette propriété étant celle par défaut utilisée pour les objets ActiveCell, Cells, Range, ...

    Donc, par exemple, CDate(Cells(Li,6)) suffira.

    Cordialement.

    Bruno

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2016
    Messages : 16
    Par défaut
    Oui effectivement, il y avait une erreur que nous avons remarqué c'est pourquoi je l'ai corrigé dans mon Post d'après.
    En tout cas merci pour l'explication de la propriété .value. Je ne savais pas.

  9. #9
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    @ZX12R : Pas d'accord du tout !
    Ok quand tu appel Range("B1") tout seul tu obtiens la value, mais c'est une très mauvaise habitude que de faire ça !

    @RabiK33 : Garde l'habitude de précise toujours l'attribut de l'objet que tu appel

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

Discussions similaires

  1. [WD15] Valeur entre deux périodes dans un intervalle de dates
    Par moradsoft dans le forum WinDev
    Réponses: 10
    Dernier message: 15/12/2023, 14h00
  2. Réponses: 0
    Dernier message: 30/08/2007, 10h11
  3. [VBA] difficultés avec une requête INSERT
    Par elias dans le forum Access
    Réponses: 7
    Dernier message: 06/09/2005, 14h53
  4. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  5. [VBA-E] avec une fonction value
    Par laas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2002, 13h22

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