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 :

Comptage des cellules répondant à 2 conditions.


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut Comptage des cellules répondant à 2 conditions.
    Bonjour à toutes et à tous.

    Mon problème: Dans une feuille la colonne A contient les dates. Je veux connaître le nombre de cellules qui satisfont 2 conditions :
    1ère condition : égale ou supérieure à la date de début (datedebut)
    2ème condition: égale ou inférieure à la date de fin(datefin)

    J'ai essayé avec NB.SI et j'ai commencé avec une seule condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_ligne_base=nb.si("A:A";">=" & datedebut)
    J'ai testé avec datedebut="26/03/2021". Le résultat affiché est 2 alors que c'est 7 qui est attendu (du 26/03/2021 au 01/04/2021).

    Précisions : les dates sont enregistrées dans la colonne A au format américain mais sont bien restituées au format français. J'ai vérifié la feuille et compté manuellement.

    Voyez vous l'erreur ?

    Merci pour votre aide.

  2. #2
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Je me suis trompé.

    Après avoir essayé sans résultat NB.SI et NB.SI.ENS j'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_ligne_base = Application.CountIf(Range("A:A"), ">=" & datedebut)
    C'est cette ligne qui me donne le résultat de 2 au lieu de 7 !!!

    Bref si vous avez une solution qui me permette de connaitre le nombre de cellules qui satisfont les 2 conditions >= datedebut ET <=datefin je suis preneur.

    Merci encore

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut,

    Pourquoi ne pas faire une boucle for avec des if ?

    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 i As Integer, k As Integer
     
    k = 0
     
    For i = 2 To Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
        If Feuil1.Range("a", i) >= datedebut Then
                If Feuil1.Range("a", i) >= datefin Then
                k = k + 1
            End If
        End If
    Next
     
    MsgBox k
     
    End Sub
    Un truc du genre

    CB

  4. #4
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Bonjour Christian.

    J'ai essayé plusieurs fois sans succès. De guerre lasse j'ai trouvé une solution à mon problème qui était de supprimer la dernière ligne blanche dans une ListBox crée par VBA à partir d'une feuille de calcul et comportant plusieurs conditions de création.

    La liste est bien crée mais à chaque fois elle comporte une dernière ligne vierge. Et je n'arrive pas à comprendre pourquoi.
    Voici le code qui génère cela.

    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
       Me.liste_journal.AddItem
     
       Do While ActiveCell.Value <> ""
     
            If ActiveCell.Value >= CDate(datedebut) And ActiveCell.Value <= CDate(datefin) Then
                'var1 = ActiveCell.Offset(0, 0).Value
                Me.liste_journal.AddItem
                Me.liste_journal.List(k, 0) = ActiveCell.Offset(0, 0).Value
                k = k + 1
            End If
     
            ActiveCell.Offset(1, 0).Select
            If ActiveCell.Value = "" Then
                Exit Do
            End If
     
       Loop
    Alors ma solution simple (qui ne me satisfait pas quand à la pureté du code mais le résultat est là !) consiste à supprimer le dernier item (qui est toujours vierge) .
    Donc après le loop je mets l'instruction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Me.liste_journal.RemoveItem (Me.liste_journal.ListCount - 1)
    Voilà. En espérant comprendre un jour l'origine du problème.

    Merci pout ton aide.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 126
    Billets dans le blog
    131
    Par défaut
    Salut.

    Excel permet de réaliser cela sans boucles. Tu ne dis pas comment tu valorises tes dates bornes. Voici un exemple avec les dates bornes placées en cellules C1 et C2

    application.countifs(range("a:a"),">=" & range("c1").value*1,range("a:a"),"<=" & range("c2").Value*1)

    Tu aurais intérêt à travailler avec des tableaux structurés pour délimiter plus correctement tes plages et éviter de travailler sur des colonnes entières. Note également que les boucles sont très gourmandes en temps d'exécution. Tu as donc tout intérêt à t'appuyer sur Excel plutôt que de traiter le problème en "programmation pure" => Quand on écrit du VBA pour Excel, on pense Excel avant de penser VBA
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé Avatar de alain78
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2008
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 160
    Par défaut
    Bonjour et merci Pierre.

    Etant à la retraite, Excel peut prendre tout son temps pour me répondre ..... Je blague.

    Je vais travailler sur ta proposition sachant que je ne connais pas à l'avance les dates bornées saisies par l'utilisateur. Je les remplacerai par des variables bien évidemment.

    Bonne journée.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 126
    Billets dans le blog
    131
    Par défaut
    Ce sont déjà des "variables" puisque j'utilise des cellules, mais on peut effectivement les remplacer par des "vraies" variables en VBA. Ce qui me semble important, c'est de travailler avec des tableaux structurés qui facilitent le code, tant à la conception qu'à la rédaction, à la lecture et à la maintenance. Si les dates bornes venaient de cellules comme dans mon exemple, il me semblerait judicieux de nommer ces cellules pour détacher encore plus le code de la structure de tes feuilles.

    Je donne un exemple d'utilisation des plages nommées dans ce message
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Copier des cellules répondant à un critère
    Par robert321 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/02/2015, 12h01
  2. Reconnaissance des formes et comptage des cellules sanguines
    Par Thierry1987 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 26/08/2014, 03h33
  3. Nouveau Problème sur le comptage des cellules NON VIDES
    Par tyndare36 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/02/2014, 18h18
  4. [XL-2007] comptage des cellules
    Par chris09300 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/03/2011, 14h15
  5. [XL-2007] Compter des cellules, avec une condition
    Par OccitaL dans le forum Excel
    Réponses: 6
    Dernier message: 17/06/2010, 15h15

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