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 :

Application.worksheetfunction.COUNTA sur Array comptabilise les Empty


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut Application.worksheetfunction.COUNTA sur Array comptabilise les Empty
    Bonjour a tous,

    En VBA la fonction Application.worksheetfunction.COUNTA fonctionne bien lorsqu'on l'applique sur une plage de cellules.
    Si on l'utilise sur un Array elle comptabilise aussi les Empty.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim GLT As Variant
    GLT = Array(1,2,Empty,"A")
    ? Application.worksheetfunction.COUNTA(GLT)
    4
    Au lieu de 3

    Quelqu'un saurait-il expliquer ça ?

    A part boucler sur l'Array pour compter les valeurs Not IsEmpty(X) auriez-vous une idée plus efficace ?

    Cordialement,
    Francis

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut Pas chez moi !
    Bonjour,

    Chez moi ça ne compte pas les Empty :
    Nom : Array.jpg
Affichages : 712
Taille : 16,9 Ko
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    CountA comptabilise le nombre d'éléments non vides.
    Empty est considéré ici comme une variable variant.
    Le résultat me semble donc correct.

    Sur mon poste (Excel 2016), le retour est 4.

    A part boucler sur l'Array pour compter les valeurs Not IsEmpty(X) auriez-vous une idée plus efficace
    Là, je ne comprends pas la question.
    Un tableau VBA, par définition, est un ensemble d'items.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Sur mon poste (Excel 2016), le retour est 4.
    Effectivement 4 et aussi avec Excel 2013, mais avec 2003 et 2007 le Empty est ignoré (=3).
    Une évolution passée inaperçue.
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre habitué Avatar de francis60
    Homme Profil pro
    Modélisation coût/process
    Inscrit en
    Août 2011
    Messages
    178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Modélisation coût/process
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 178
    Points : 162
    Points
    162
    Par défaut
    Merci à tous pour vos lumières et pour vos résultats par version XL.
    Citation Envoyé par MarcelG Voir le message
    Là, je ne comprends pas la question.
    Voilà ce que je voulais dire:
    Résultats avec CountA et avec une boucle (Je suis sur Excel 2010)
    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
    18
    19
    20
    Sub TestCOUNTA()
              Dim GLT As Variant
              Dim i As Long, Total As Long
              
    1         GLT = Array(1, 2, Empty, "A")
    
    2         Debug.Print "Avec Application.WorksheetFunction.CountA: " & Application.WorksheetFunction.CountA(GLT)
    
    3         For i = LBound(GLT) To UBound(GLT)
    4             If Not IsEmpty(GLT(i)) Then
    5                 Total = Total + 1
    6             End If
    7         Next
    
    8         Debug.Print "Avec une boucle Not IsEmpty: " & Total
    
    End Sub
    
    Avec Application.WorksheetFunction.CountA: 4
    Avec une boucle Not IsEmpty: 3
    La fonction Excel (celle que l'on écrit dans une cellule du tableur via la barre de formule) donne le bon résultat en tout cas celui que je souhaite reproduire avec du code VBA : cellules vides dans un Range ou éléments d'un Array non comptabilisées si vides (= Empty).

    Pour ma part je considère que dans cet exemple CountA = 4 est une régression.

    Comme une boucle ça n'est pas très efficace, je me demandais s'il n'y avait pas mieux à faire pour compter les non-Empty sans non plus repasser par une feuille Excel fut-elle temporaire ou masquée.

Discussions similaires

  1. Application fonctionne pas sur tous les ordinateurs
    Par will97 dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/09/2009, 01h14
  2. Réponses: 6
    Dernier message: 02/09/2009, 09h31
  3. Réponses: 1
    Dernier message: 14/01/2009, 13h53
  4. Application se basant sur les cartes et les démarches
    Par condor_01 dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 12/02/2007, 21h23
  5. Conseil sur conception : Référencer les applications
    Par alladdinbh dans le forum Modélisation
    Réponses: 3
    Dernier message: 25/09/2006, 17h19

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