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 combinaison countif et countblank


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 421
    Par défaut VBA combinaison countif et countblank
    Bonjour à tous,

    j'ai un récapitulatif de planning annuel par tranche horraire

    en tete de colonne , j'ai les tranches horaires 0h , 1h , 2h ..., 23h

    chaque ligne correspond à un jour dan l'année et contient:
    le nom du jour en tete de ligne (ex "samedi")
    le nombre de personne présente par tranche horaire.

    je souhaite combiner les fonction countblank et countif pour savoir combien
    de fois j'ai 0 personne le samedi ou le dimanche...

    pour cela j'ai essayer ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nbvide24hWE = Application.WorksheetFunction.CountBlank(Range("C2:Z" & nbligneTC)) And _
                    (Application.WorksheetFunction.CountIf(Range("A2:A" & nbligneTC), "=sam")) Or _
                    (Application.WorksheetFunction.CountIf(Range("A2:A" & nbligneTC), "=dim"))
    mais je obtient comme résultat 52....

    merci...

  2. #2
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 421
    Par défaut
    bon j'avance , mais c'est pas encore ça,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nbvide24hWE = Application.WorksheetFunction.CountBlank(Range("C2:Z" & nbligneTC)) And _
                    (Application.WorksheetFunction.CountIf(Range("A2:A" & nbligneTC), "=sam")) Or _
                    (Application.WorksheetFunction.CountIf(Range("A2:A" & nbligneTC), "=dim"))
    je remplace le And par "+" et je me rapproche de la solution car j'obtiens 55, hors le nb de week-end est bien égale à 52 et j'ai bien 3 periodes vides....


    le bon résultat est bien 3.

    mais je ne vois pas comment combiner les 2 tests

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce serait beaucoup plus simple de travailler avec de vrai date car il existe une fonction qui te donne le n° du jour de la semaine.
    La fonction est WeekDay
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print Weekday(Range("A1"), 2)
    Si A1 contient le 09/08/2012, la fonction va renvoyer 4 pour jeudi.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 421
    Par défaut
    Oui effectivement c'est plus simple et ça doit correspondre à la formule excel "jourSemaine" ou quelque chose comme ça...

    comment je peux la combiner avec un countblank??

    j'ai bien essayé de parcourir les 365 lignes de mon tableau pour verifier jour par jour si il y a des cellules vides, mais cela me rallonge concidérablement la durée d'éxecution de la macro...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    nbvide24hWE = 0
    For i = 2 To (nbligneTC - 1)
        If Range("A" & i).Value = "sam" Or Range("A" & i).Value = "dim" Then
        nbvide24hWE = Application.WorksheetFunction.CountBlank(Range("C2:Z" & nbligneTC))
        End If
    Next
     
    Range("AE16") = nbvide24hWE

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans ce cas bien précis, il me semble plus simple d'utiliser une formule avec excel.
    Petit exemple avec SOMMEPROD et JOURSEM colonne A les dates les colonnes B à Y les cellules vides ou non vides.
    Ici il n'y a que 19 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(($B$2:$Y$19=0)*(JOURSEM($A$2:$A$19;2)>5))
    [EDIT]
    Toujours à l'aide de la même fonction SOMMEPROD mais avec les jours en colonne A, j'ai laissé la colonne B avec des dates mais ne sert à rien ici et les cellules à calculer de C à Z
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD( (($A$2:$A$19="sam") + ($A$2:$A$19="dim")) * ($C$2:$Z$19=0))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [Toutes versions] VBA - Combinaison matricielle
    Par Chapo77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/10/2014, 19h47
  2. [VBA-E] COUNTIF sur une sélection de plage variable
    Par NiKoS29 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/09/2007, 23h03
  3. [VBA-E] Countif avec deux conditions
    Par bonilla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/09/2007, 15h30
  4. [VBA-E] Générer des combinaisons dans Excel
    Par JSOREL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 07/03/2007, 17h23
  5. [VBA-E] probleme avec la fonction countif
    Par adamm dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/02/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