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 :

CountIf en VBA avec boucle et plusieurs critères


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut CountIf en VBA avec boucle et plusieurs critères
    Bonjour,

    J'ai regardé sur pas mal de discussions, ce sujet est souvent abordé mais les réponses émises ne marchent pas dans mon cas.

    J'essaye de calculer le nombre de cellules non vide d'une colonne, sur plusieurs critères, de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Cells(5, 4) = WorksheetFunction.CountIfs(Sheets("Base").Columns(57), "<" & 30, ">" & 0)
    Cells(5, 5) = WorksheetFunction.CountIfs(Sheets("Base").Columns(57), "<" & 60, ">" & 30)
    etc etc ...
    Est-ce une erreur de syntaxe du CountIf ?
    Il y a-t-il d'autres solutions pour ce genre de démarche ?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    CountIfs (NB.SI.ENS côté Excel) attend pour paramètre X plages et X critères

    ici tu as mis une seule plage et deux critères accolés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountIfs(Sheets("Base").Columns(57), "<" & 30,Sheets("Base").Columns(57), ">" & 0)
    serait plus approprié

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Bonjour,

    Bon ca ne marche pas, et quand je rentre la boucle encore moins :
    Merci d'être plus précis, un message d'erreur ? si oui lequel, si non quel est le problème ? un résultat faux ? quel est le résultat attendu ?
    Ce genre de détail aide grandement pour répondre au mieux et au plus vite.

    Est-ce une erreur de syntaxe du CountIf ?
    D'après l'aide de la fonction Excel nb.si.ens la syntaxe est: =nb.si.ens(plage1;critère1;plage2;critère2; ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountIfs(Sheets("Base").Columns(57), "<" & 30, ">" & 0)
    Respectes-tu cette syntaxe ?

    Essaye donc ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountIfs(Sheets("Base").Columns(57), "<" & 30, Sheets("Base").Columns(57), ">" & 0)

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Citation Envoyé par Hercule55 Voir le message
    Je ne peux utiliser " 30 * (i - 1) " car le code considère le contenu entre parenthèses comme un nouvel argument.
    ??
    Chez moi pas de souci, j'ai copié collé ton code (juste modifié la colonne) et ça fonctionne

    Par contre attention avec tes inégalités strictes des deux cotés tu ne prend jamais en compte dans ton comptage les chiffres 30,60...

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    En effet la macro s’exécute mais le résultat obtenu n'est pas le résultat attendu.

    J'attends à ce qu'à chaque itération la macro calcule le nombre de cellule comprise en 30i et 30(1-i).
    Pour calculer en fait le nombre de ligne datant d'un mois, de deux mois, de trois mois etc...

  6. #6
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Effectivement j'ai le même souci, tu peux le contourner en passant par des variables intermédiaires pour tes bornes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bmin = 30 * (i - 1)
    bmax = 30 * i
    Cells(5, 3 + i) = WorksheetFunction.CountIfs(Sheets("Base").Columns(1), "<" & bmax, Sheets("Base").Columns(1), ">" & bmin)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    Ah oui sympa l'astuce j'y pense jamais !

    Merci beaucoup pour ton aide !

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    Je rencontre un autre problème avec cette ligne.

    En effet, j'ai beau filtrer la feuille en amont selon d'autres colonnes, le CountIf compte à chaque fois toutes les valeurs de la colonne même celles filtrées.

    Est ce que cela vient du "WorksheetFunction" qui du coup prend toute la feuille dans tout les cas ?

    Merci

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    En effet, j'ai beau filtrer la feuille en amont selon d'autres colonnes, le CountIf compte à chaque fois toutes les valeurs de la colonne même celles filtrées.
    Je n'ai plus l'orthographe de la commande en tête mais recherche "specialcells xlvisible" tu devrais trouvé de quoi adapté ton code aux cellules filtrés

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    J'ai trouvé en effet la fonction dont tu me parles :

    Mais j'obtiens le message d'erreur "Impossible de lire la propriété CountIfs de la classe WorksheetFunction" ...

  11. #11
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Il me semble que countifs(en multicritère) ne fonctionne que si tes plages sont de la même taille or tu en as restreint une aux cellules visible et pas l'autre

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    J'ai essayé avec en précisant la même taille :

    Mais toujours le "Impossible de lire la propriété CountIfs de la classe WorksheetFunction"

  13. #13
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Mauvais idée de ma part désolé, apparemment countifs ne fonctionne pas sur des plages discontinues, donc utiliser .SpecialCells(xlCellTypeVisible) n'est pas une solution.

    Pour résoudre ton problème de filtre, il va falloir je pense passer par une feuille intermédiaire dans laquelle tu copies le résultat du filtre (se fait assez simplement avec un filtre avancé) et fais le comptage

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    une autre solution serait d'appliquer des filtres automatiques basés sur tes critères, et de récupérer le nombre de lignes filtrées ?

  15. #15
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Par défaut
    Oui mais je m'intéresse justement au contenu de ces cellules filtrées !

    J'ai finalement copier les valeurs filtrées vers une autre feuille puis j'ai pu utiliser mon CountIfs correctement et ca me va

    Merci

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

Discussions similaires

  1. [XL-2007] Formulaire VBA Excel - recherche sur plusieurs critères et affichage des résultats
    Par kl1ft dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/08/2016, 20h44
  2. Réponses: 0
    Dernier message: 19/05/2014, 18h12
  3. [XL-2002] Rechercher/Remplacer avec boucle et plusieurs motifs
    Par Canvas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/03/2013, 14h09
  4. [VBA Excel] Filtre sur plusieurs critères
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2006, 11h12
  5. [VBA-E]filtre sur plusieurs Critères avec Excel
    Par Diablo_22 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2006, 20h34

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