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 :

Countifs et utilisation de "OR" [XL-365]


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
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2020
    Messages : 17
    Par défaut Countifs et utilisation de "OR"
    Bonjour,

    Je travaille sur une macro VBA pour filtrer puis compter dans les données filtrées.

    J'ai donc un tableau dont l'en-tête serait la suivante : "Date" "Lieu" "Nom d'essai" "Essai réalisé" "Identifiant essai"

    J'utilise "CountIfs" avec un certain nombre de critère pour compter ces lignes.
    Tout va bien tant que je n'ai qu'un critère par colonne, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    shDest.Cells(1, 2) = Application.WorksheetFunction.CountIfs( _
    shSource.Range(shSource.Cells(2, nbColDATE), shSource.Cells(nbNombresLignes, nbColDATE)), ">=01/01/2017", _
    shSource.Range(shSource.Cells(2, nbColDATE), shSource.Cells(nbNombresLignes, nbColDATE)), "<01/01/2020", _
    shSource.Range(shSource.Cells(2, nbColLIEU), shSource.Cells(nbNombresLignes, nbColLIEU)), "Lyon", _
    shSource.Range(shSource.Cells(2, nbColESSAI_REALISE), shSource.Cells(nbNombresLignes, nbColESSAI_REALISE)), "OUI")
    (où shSource/shDest sont mes feuilles source de destination, nbColDATE nbColLIEU nbColESSAI_REALISE le numéro de la colonne dans laquelle je cherche)

    Mais j'aurais besoin de pouvoir sélection par un "OU" logique plusieurs entée dans la colonne "identification essai", les essais commençant par A00*, B00*, C00*
    J'ai trouvé ceci via l'enregistreur de macro, mais ce n'est pas compatible avec countifs ou plutôt je n'arrive pas à l'intégrer dans mon countifs :/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.Range("$A$1:$O$5192").AutoFilter Field:=9, Criteria1:=Array( _
    "A00", "B00", "C00"), Operator:= xlFilterValues)
    et j'ai essayé ceci, qui ne va, qui correspond à un "ET" logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    shDest.Cells(1, 2) = Application.WorksheetFunction.CountIfs( _
    shSource.Range(shSource.Cells(2, nbColDATE), shSource.Cells(nbNombresLignes, nbColDATE)), ">=01/01/2017", _
    shSource.Range(shSource.Cells(2, nbColDATE), shSource.Cells(nbNombresLignes, nbColDATE)), "<01/01/2020", _
    shSource.Range(shSource.Cells(2, nbColLIEU), shSource.Cells(nbNombresLignes, nbColLIEU)), "Lyon", _
    shSource.Range(shSource.Cells(2, nbColESSAI_REALISE), shSource.Cells(nbNombresLignes, nbColESSAI_REALISE)), "OUI" _ 
    shSource.Range(shSource.Cells(2, nbColESSAI_REALISE), shSource.Cells(nbNombresLignes, nbColID_ESSAI)), "A00*" _ 
    shSource.Range(shSource.Cells(2, nbColESSAI_REALISE), shSource.Cells(nbNombresLignes, nbColID_ESSAI)), "B00*" _ 
    shSource.Range(shSource.Cells(2, nbColESSAI_REALISE), shSource.Cells(nbNombresLignes, nbColID_ESSAI)), "C00*"))
    Une petite idée/piste s'il vous plait?

    Je m'arrache les cheveux depuis vendredi dernier, le week-end ne m'a pas tellement porté conseil :/

  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,

    si tu filtres ta plage avec les critères souhaités, tu n'as plus besoin d'un CountIf, utilises plutôt Application.SubTotal (fonction SOUS.TOTAL() côté Excel))

    Sinon, sauf erreur, il va te falloir additionner autant de CountIf que de critères OR.

    Autre méthode, c'est SOMMEPROD (SumProduct) où tu peux mixer du ET (mutiplication des critères) et du OU (addition des critères)

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2020
    Messages : 17
    Par défaut
    Merci pour la réponse!

    Je me suis mal exprimé, je ne "filtre" pas la plage de données, je voulais dire que je la filtre "virtuellement" grâce au countifs
    Bon j'aurais aimé une syntaxe facile pour faire du OU logique
    Mais du coup j'ai additionné des countifs comme conseillé! Ca fonctionne bien, merci!

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

Discussions similaires

  1. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/02/2008, 23h23
  2. Réponses: 3
    Dernier message: 27/11/2006, 18h00
  3. utilisation des quotes
    Par Henry9 dans le forum Oracle
    Réponses: 1
    Dernier message: 13/11/2006, 21h40
  4. [AJAX] Utilisation des quotes
    Par illegalsene dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/10/2006, 09h23

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