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-E] Comptage de cellules contenant des dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut [VBA-E] Comptage de cellules contenant des dates
    Bonjour,

    Je souhaiterais utiliser le même code que dans cette discussion mais il y a quelque chose qui bloque car je souhaiterais que la condition soit sous forme de date et non de texte ...

    En gros, désolé pour la dégradation du code :

    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
    Public Sub Command4_Click()
     
    Dim Compteur As Integer
    Dim Ok1, Ok2, Ok3 As Boolean
    Dim n As Integer
     
    Compteur = 0
     
    For n = 2 To 1000
     
            Ok = False
     
            If InStr("win", Range("I" & n).Value) > 0 Then Ok1 = True
            If InStr( 'Entre le 01/04/2007 et le 31/06/2007' , Range("J" & n).Value) > 0 Then Ok2 = True
             If Ok1 = True & Ok2 = True Then Compteur = Compteur + 1
     
    Next n
     
    MsgBox (Compteur)
     
    End Sub
    Merci d'avance mais je sais pas si c'ets possible ...

    Arnaud

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Voir pour inStr...

    pour tester une date... modifie ta ligne par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ok2 = (Range("J" & n).Value >= DateSerial(2007, 4, 1) And Range("J" & n).Value <= DateSerial(2007, 6, 30))

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Regarde aussi la fonction IsDate dans l'aide

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Merci de cette aide, Isdate me parait bien !

    J'ai quand même un problême car j'ai créé une liste toute bête de 2 collone pour tester ma macro dans le but de compter uniquement les lignes qui en B sont = à 1 et en C à "win". mais quoique je fasse le MsgBox affiche toujours 0 !

    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 comptage()
     
    Dim Compteur As Integer
    Dim Ok1, Ok2 As Boolean
    Dim n As Integer
     
    For n = 2 To 50
     
            Ok = False
     
            If InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 Then Ok1 = True
            If InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0 Then Ok2 = True
            If Ok1 = True & Ok2 = True Then Compteur = Compteur + 1
     
    Next n
     
    Sheets("sheet1").Range("D21").Value = Compteur
     
    End Sub
    Y a quelque truc qui me paraisse bizare comme par exemple le ">0" mais quoique je fasse ça ne fonctionne pas...

    Je continue à chercher mais c'est bizare ...

    Merci @+

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour le >0 tjrs:
    Citation Envoyé par bbil
    Voir pour inStr...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    BHa jsutement je n'aurais pas pris la peine de poster un message si j'avais compris l'aide !

    Je prefère toujours me débrouiller mais là je suis dans l'impasse, surtout que si je créé un code pour une seul collone ca marche bien mais dès qu'il y en à deux ca foire ...

    Pour info l'aide me dit ça :

    Settings

    The compare argument settings are:

    Constant Value Description
    vbUseCompareOption -1 Performs a comparison using the setting of the Option Compare statement.
    vbBinaryCompare 0 Performs a binary comparison.
    vbTextCompare 1 Performs a textual comparison.
    vbDatabaseCompare 2 Microsoft Access only. Performs a comparison based on information in your database.



    Return Values

    If InStr returns
    string1 is zero-length 0
    string1 is Null Null
    string2 is zero-length start
    string2 is Null Null
    string2 is not found 0
    string2 is found within string1 Position at which match is found
    start > string2 0
    Et je ne vois pas à quel 0 ça fais référence ...

    Enfin pour l'isntant je me suis débrouiller en faisant des IF + IF est si ça affiche 2 c'est que j'ai bien une ligne ave cmes deux conditions donc je fais un coutinf avec comme condition 2 mais bon y a quand même mieux car je dois le faire pour beaucoup de fichier !

    @+

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et bien InStr te donne la position d'une chaîne de caractère dans une autre ...elle retourne 0 si la chaîne cherchée n'existe pas ...

    I-E. Renvoyer la position de la première occurrence d'une chaîne dans une autre chaîne

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    MERCI !! c'ets vrai que toute de suite c'est plus claire !!

    Donc mon erreur est ailleurs, c'est déjà une avancée maitenant il ne me reste plus qu'à savoir l' trouver,

    merci bbil

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Bon comme je trouve vraiment pas, etes vous sur que la fonction Instr est adapté à ce que je veux faire, c'est à dire compter le nombre de lignes avec deux conditions ?

    Tant que tu rames, dis toit que tu navigue ! He bah moi Ouskeln'or je coule a pique !

  10. #10
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par nono le golfeur
    Bon comme je trouve vraiment pas, etes vous sur que la fonction Instr est adapté à ce que je veux faire, c'est à dire compter le nombre de lignes avec deux conditions ?

    Tant que tu rames, dis toit que tu navigue ! He bah moi Ouskeln'or je coule a pique !
    InStr cela ne sert pas à compter mais à vérifier l'une des deux conditions...

    tu en est ou de ton code..? je vois pas de DateSerial....?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    En fait je me suis dis qu'avant d'attaquer avec Date Serial, je ferais mieux de savoir faire fonctionner cette macro avec deux conditions plus simple 1 et "Win" dans les collones B et C...

    Mon code :

    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 comptage()
     
    Dim Compteur As Integer
    Dim ok1, ok2 As Boolean
    Dim n As Integer
     
    For n = 2 To 50
    Compteur = 0
     
            If InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0 Then ok1 = True
            If InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 Then ok2 = True
            If ok1 = True & ok2 = True Then Compteur = Compteur + 1
     
     
    Next n
     
    Sheets("sheet1").Range("D21").Value = Compteur
     
    End Sub
    C'est drôle comme parfois tout va mal...

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà, tu peux simplifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim ok as boolean
    For n = 2 To 50
     
            Ok = InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 'trouvé !
            Ok =  and InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0 'trouvé aussi...
            If Ok Then Compteur = Compteur + 1
     
    Next n
    Mais là, je ne vois pas où sont les dates

    Edit
    Et je ne comprends pas ce test
    InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0
    Qu'est-ce qu'il y a là-dedans "Sheets("sheet1").Range("B" & n).Value)" ?

  13. #13
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et tu as vu ou tu met ton compteur à 0 ...? essai de mettre 1 et Win sur la ligne 50... ?

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je reprends ta ligne du 1er post
    If InStr( 'Entre le 01/04/2007 et le 31/06/2007' , Range("J" & n).Value) > 0 Then Ok2 = True
    Pour remplacer cette ligne, je ferais ça (*)
    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
    Dim ok as boolean
    For n = 2 To 50
     
            Ok = InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 'trouvé !
     
            '*************ça****************
            ok = ok and isdate(Range("J" & n).Value)
            if ok then
                ok = ok and cdate(Range("J" & n).Value) > "01/04/2007"
                ok = ok and cdate(Range("J" & n).Value) < "31/06/2007"
            endif
            '************ à là ***************        
            If Ok Then Compteur = Compteur + 1
     
    Next n
    Pas testé, il est possible d'avoir à préciser
    cdate( "01/04/2007") et cdate("31/06/2007")

    Edit
    Tu peux simplifier tout ça avec des if et des and mais là, tu pourras le relire plus facilement si un jour tu as à modifier tes tests

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Et je ne comprends pas ce test

    Citation:
    InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0

    Qu'est-ce qu'il y a là-dedans "Sheets("sheet1").Range("B" & n).Value)" ?
    Dans ma collone B il y a des chiffre entre 1 et 5 (correspondant à un statut) Dans ma collone C il y a du texte (Win, Lost où Pending)

    Donc mon but est de compter le nombre de ligne avec 1 en B et "win" en C...

    bbil, qu'entends tu par :

    et tu as vu ou tu met ton compteur à 0 ...? essai de mettre 1 et Win sur la ligne 50... ?
    Merci les gars :-)

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, alors tu gardes la première ligne du post précédent et tu modifies les deux lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Ok = InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 'trouvé !
            Ok = ok and Sheets("sheet1").Range("B" & n).Value) > 0 'trouvé aussi...
            Ok = ok and Sheets("sheet1").Range("B" & n).Value) < 6 'trouvé aussi...
            If Ok Then Compteur = Compteur + 1
    Ça ne fonctionne que si dans ta cellule tu n'as qu'un chiffre. Si tu as autre chose (un chiffre dans un string) tu utilises Instr mais là, ça devient tout de suite plus compliqué car pour tester la valeur, tu devras tester que tu as bien un chiffre dans ta chaîne, puis sa position, puis sa valeur. Ou alors, tester tous les chiffres de 1 à 5 avec instr
    Tu dis

    Edit
    Corrigé : Ok = ok and

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Bon bha je vais finir par le faire à la main car vraiment ça ne marche pas ..

    ouskeln'or quand tu me donnes ce code, est ce que j'ai quelque chose à adapter car moi quoique je fasse j'ai 0 ... Y a ptet un truc spécifique à changer ...

    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
     
     
    Sub test()
    Dim ok as boolean
    Dim compteur as integer
     
    For n = 2 To 50
     
            Ok = InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0 
            Ok =  and InStr(1, Sheets("sheet1").Range("B" & n).Value) > 0 
            If Ok Then Compteur = Compteur + 1
     
    Next n
    MsgBox (Compteur)
     
    End sub

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Là, tu compares une valeur à un string, ça ne peut pas fonctionner (et j'avais pas vu)
    A la limite, tu peux faire ça (en plus d'ajouter le Ok rouge sinon tu as une erreur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ok =  ok and InStr(Sheets("sheet1").Range("B" & n).Value,"1") <> 0
    mais tu n'as pas répondu à mes "questionnements" Tu as quoi dans Sheets("sheet1").Range("B" & n) ???
    Et suis les conseils de bbil : Va voir la syntaxe de Instr dans l'aide. Les explications que tu en auras seront plus complètes que les nôtres !
    A+

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Merci Ouskeln'or,

    Pour l'aide je l'ai fait dès le début pour être sur de comprendre mais ça m'a pas éclairé ... J'ai tenter l'aide en anglais sur mon pc et en francais sur un autre mais bon rien à faire...

    Je pensais avoir répondu à ta question en te disans ce que j'avais dans la colone B mais apparement non donc je ne sais pas trop quoi te répondre ...

    Dans ma collone B il y a des chiffre entre 1 et 5 (correspondant à un statut) Dans ma collone C il y a du texte (Win, Lost où Pending)

    Donc mon but est de compter le nombre de ligne avec 1 en B et "win" en C...
    Enfin je continue à chercher ...

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2007
    Messages : 89
    Par défaut
    Haaaaa on se rapproche , maintenant mon compteur n'indique plus 0 mais 43, bon ok 43 c'est loin car il y a quatre couple 1 et win mais bon au moins c'est une avancé !!!

    J'utilises ce code...

    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
    Sub test123456()
     
    Dim Compteur As Integer
    Dim ok As Boolean
    Dim n As Integer
     
    For n = 2 To 50
     
    ok = ok And InStr(Sheets("sheet1").Range("B" & n).Value, "1") <> 0
    ok = InStr("win", Sheets("sheet1").Range("C" & n).Value) > 0
     
            If ok Then Compteur = Compteur + 1
     
    Next n
     
    MsgBox (Compteur)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Formulaire VBA problème avec cellules contenant des dates
    Par Sudeki dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/10/2013, 12h54
  2. Réponses: 1
    Dernier message: 24/03/2010, 11h49
  3. [VBA-E] Protéger une feuille- contenant des macros
    Par nkhalidy dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/03/2007, 10h32
  4. Réponses: 3
    Dernier message: 18/09/2006, 20h55
  5. Verrouiller cellule contenant des formules
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 19/12/2005, 11h47

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