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 :

Comptabiliser deux données textes avec une commande VBA countifs [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyste recherche marketing
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste recherche marketing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut Comptabiliser deux données textes avec une commande VBA countifs
    Bonjour/bonsoir à toutes et tous!

    Peut-être pourriez vous m'aider avec un petit souci que je rencontre sur la commande suivante. Elle fonctionne super bien pour le moment mais je dois la réadapter pour prendre en compte une donnée en plus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Columns("F:T").Rows("50") = Application.CountIfs(Worksheets("Basedonnées").Range("M:M"), "Tout à fait", Worksheets("Basedonnées").Range("O:O"), Worksheets("Calc").Range("F3:T3"))
    Son but est de compter le nombre d’occurrences "Tout à fait" en référence à une plage de dates précisées en F3:T3. Jusque là tout va bien.

    Ceci fait références aux données de résultats d'un questionnaire. Or, depuis peu, le questionnaire a été modifié et les "Tout à fait" sont devenu "Tout à fait satisfait".
    Mes bases de données ont tout l'historique des résultats précédents, il faut donc à présent que ma commande me compte le nombre "Tout à fait" + "Tout à fait satisfait" qui apparaissent en référence à ma plage de dates F3:T3.

    J'imagine que ça n'est pas très compliqué, mais là je sèche. Si quelqu'un à la solution ou une piste pour résoudre le problème ça serait parfait !

  2. #2
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Salut

    Worksheets("Basedonnées").Range("M:M"), "Tout à fait*", ...

    Ceci dit, j'ai des doutes sur la dernière plage du countif... Car il te manque le critère et de plus, la place de Calc n'a pas la même dimension que les plages de BaseDonnées...

    Vérifie bien tes résultats pour voir que tout fonctionne correctement, car ça m'étonnerait que le résultat soit pertinent.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Analyste recherche marketing
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste recherche marketing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut Pierre,

    Concernant tes doutes sur la dernière plage du countifs, j'ai peut-être mal expliqué le truc. L'ensemble : Worksheets("Basedonnées").Range("O:O"), Worksheets("Calc").Range("F3:T3") correspond à mon 2nd critère, où la plage Worksheets("Basedonnées").Range("O:O") correspond aux dates enregistrées dans la base de données au moment où les personnes répondent à l'enquête ; et Worksheets("Calc").Range("F3:T3") correspond aux dates que je défini pour obtenir les résultats sur une période précise. J'avais réalisé plusieurs tests à l'époque au moment du montage et les résultats ont toujours été fiables avec ce système.

    En tout cas merci beaucoup pour la réponse. Cela fonctionne parfaitement , j'ai fait le test en refaisant des calculs à la main à titre de comparaison et mes résultats sont OK.
    Je n'avais pas du tout pensé à * pour résoudre le problème des "Tout à fait satisfait".
    Par contre je n'aurais peut-être pas dû prendre cet exemple, car il ne fonctionnera pas avec mes "Plutôt oui" qui sont devenus "Plutôt satisfait", et inversement "Plutôt non" -> "Plutôt pas satisfait". Si jamais tu as la réponse je suis preneur !

    Encore merci !

  4. #4
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 129
    Points : 55 942
    Points
    55 942
    Billets dans le blog
    131
    Par défaut
    Oui oui, désolé pour la fonction. En la relisant ce matin, je vois que sa syntaxe est bonne. Je n'avais peut-être plus les yeux en face des trous hier soir...

    Concernant les critères, je dirais qu'idéalement, je travaillerais avec une table de correspondance et de regroupement. Cela permettrait aux critères d'évoluer sans devoir modifier la formule dans le code. (Ce que tu as fait avec les termes "métier" dans ton code s'appelle du hard coding et c'est très mal , et c'est surtout difficile à maintenir).

    Cela étant dit:
    Tu peux utiliser les deux jokers ? et *. ? représente n'importe quel caractère à l'emplacement du ?, et * représente plusieurs caractères.
    Tu peux utiliser les opérateurs de comparaison à l'intérieur de la chaîne qui exprime le critère.
    Tu peux combiner le tout au sein d'un même critère.

    Je n'ai pas la liste entière de tes critères ni les règles que tu dois respecter, mais tu peux t'inspirer de ceci.

    Nom : 2015-04-10_065350.png
Affichages : 231
Taille : 11,7 Ko

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Analyste recherche marketing
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste recherche marketing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Salut Pierre,

    Merci beaucoup pour ton exemple, il m'a aidé à trouver une solution qui fonctionne. C'est vraiment super.
    Après j'imagine qu'il doit y avoir pas mal de moyens de simplifier mon code et éviter de faire du hard coding mais là pour le moment ça dépasse mes compétences.
    Je suis encore en phase d’apprentissage en VBA Excel donc il me reste pas mal de chemin à faire

    En tout cas encore merci pour ton aide et tes conseils !

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

Discussions similaires

  1. [PPT-2010] Problème avec une commande VBA!
    Par hafkha dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 04/01/2015, 13h30
  2. Réponses: 4
    Dernier message: 21/02/2010, 13h39
  3. Réponses: 6
    Dernier message: 23/04/2007, 16h21
  4. [VBA] Comment valoriser un champ texte avec une variable ?
    Par Jean_Benoit dans le forum Access
    Réponses: 3
    Dernier message: 25/12/2006, 16h55
  5. Réponses: 3
    Dernier message: 21/06/2005, 12h37

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