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 :

Compter les cellules vides d'un tableau [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Décembre 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Décembre 2016
    Messages : 27
    Par défaut Compter les cellules vides d'un tableau
    Bonjour à tous,

    Je suis un archi débutant sur VBA, je m'y suis mis seulement à cause de mon dernier boulot. J'aurais besoin de votre aide car je cherche à compter les cellules vides de la colonne I de mon tableau jusqu'à la dernière ligne de ce dernier, sans succès. Voici le code que j'ai déjà tapé :

    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
    Sub CpteCellulesVides()
     
    Dim i As Integer
    Dim dernligne As Integer
    dernligne = Range("I" & Rows.Count).End(xlUp).Row
     
    WorksheetFunction.CountBlank (Range("i:I"))
    For i = 2 To dernligne
     If IsEmpty Cells(i, 9).Value Then
     i = i + 1
     End If
     
    Next
     
    Cells(13;25).Value = WorksheetFunction.CountBlank(Range("i:I"))
     
     
    End Sub
    Ce code est probablement du grand n'importe quoi mais je n'arrive pas à grand chose sur VBA pour l'instant.
    Qui plus est If IsEmpty Cells ne semble pas être une formule correcte...
    Le logiciel me renvoie "objet requis" sans aller plus loin.

    D'avance merci à vous.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Inutile d'utiliser une boucle lorsque une simple fonction Excel peut vous donner directement la solution. Dans votre cas, vous devriez nommer la cellule où vous auriez une fonction Nb.Si par exemple et si vous avez besoin de la valeur pour d'autres calculs, la récupérer via une variable par VBA.

    Autrement, une solution paramétrable :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    Sub TestDecompterLesCellulesVide()
     
    Dim NbAvecNbSi As Long
    Dim NbAvecCountA As Long
     
     
        NbAvecNbSi = NbCellulesVidesAvecNbSi(Sheets("Feuil1"), 1, 9)
        NbAvecCountA = NbCellulesVidesAvecCountA(Sheets("Feuil1"), 1, 9)
     
        MsgBox "Nombre avec Nb.Si : " & NbAvecNbSi & Chr(10) & "Nombre avec Count A : " & NbAvecCountA
     
     
    End Sub
     
    Function NbCellulesVidesAvecNbSi(ByVal FeuilleEtudiee As Worksheet, ByVal LigneDepart As Long, ByVal ColonneEtudiee As Long) As Long
     
    Dim DerniereLigne As Long
    Dim AireSelectionnee As Range
     
        Application.Volatile
     
        NbCellulesVidesAvecNbSi = 0
        With FeuilleEtudiee
             DerniereLigne = .Cells(.Rows.Count, ColonneEtudiee).End(xlUp).Row
             Set AireSelectionnee = .Range(.Cells(LigneDepart, ColonneEtudiee), .Cells(DerniereLigne, ColonneEtudiee))
             NbCellulesVidesAvecNbSi = WorksheetFunction.CountIf(AireSelectionnee, "")
             Set AireSelectionnee = Nothing
        End With
     
    End Function
     
    Function NbCellulesVidesAvecCountA(ByVal FeuilleEtudiee As Worksheet, ByVal LigneDepart As Long, ByVal ColonneEtudiee As Long) As Long
     
    Dim DerniereLigne As Long
    Dim AireSelectionnee As Range
     
        Application.Volatile
        NbCellulesVidesAvecCountA = 0
        With FeuilleEtudiee
             DerniereLigne = .Cells(.Rows.Count, ColonneEtudiee).End(xlUp).Row
             Set AireSelectionnee = .Range(.Cells(LigneDepart, ColonneEtudiee), .Cells(DerniereLigne, ColonneEtudiee))
             NbCellulesVidesAvecCountA = AireSelectionnee.Cells.Count - WorksheetFunction.CountA(AireSelectionnee)
             Set AireSelectionnee = Nothing
        End With
     
    End Function
    Vous pouvez également vous servir de ces fonctions directement dans Excel, mais elles sont inutiles si elles ne font pas plus que les simples fonctions Excel.

    L'avantage ici, est d'aller chercher directement n'importe quelle colonne de n'importe quel onglet, en définissant l'onglet, la première ligne et la colonne choisie.

    Sinon, servez-vous des tutoriels VBA et utilisez à fond l'enregistreur de macro pour apprendre la syntaxe.

    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Décembre 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Décembre 2016
    Messages : 27
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Par contre j'obtiens toujours 0...

    J'ai tenté de réadapter votre code avec Countblank et j'ai la même chose (voir fichier en pièce jointe)

    Cordialement.

    CellulesVides.xlsm

  4. #4
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fonction NB.VIDE nativement présente dans les fonctions d'excel permet de calculer cela.
    Exemple
    Fonction que l'on peut insérer sans problème dans la ligne des totaux d'un tableau Excel (Insertion-Tableau)
    Exemple pour la colonne Lbellé
    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

  5. #5
    Membre averti
    Homme Profil pro
    Contrôleur de gestion
    Inscrit en
    Décembre 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Décembre 2016
    Messages : 27
    Par défaut
    Bonjour Philippe,

    Merci pour votre conseil.

    Finalement après avoir repris le fichier, j'ai pu trouver le résultat escompté grâce à la méthode de Eric, en utilisant Countblank à la place de CountA

    Merci

    Cdt.

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    un exemple à adapter (ne pas oublier de pointer sur la feuille voulu - cf faq du forum) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub demo()
    Dim Der_L&, Nb_Cel_vides&
        Der_L = Cells(Rows.Count, 1).End(xlUp).Row
        Nb_Cel_vides = Application.CountBlank(Range("A1:A" & Der_L))
        MsgBox Nb_Cel_vides
    End Sub
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    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
    Citation Envoyé par Waragnac Voir le message
    j'ai pu trouver le résultat escompté grâce à la méthode de Eric, en utilisant Countblank à la place de CountA
    Bonjour,

    c'est un peu normal, dans la mesure ou COUNTBLANK() et le nom anglais de la fonction "française" NB.VIDE

  8. #8
    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 114
    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 114
    Billets dans le blog
    53
    Par défaut
    Bonjour Joe,
    c'est un peu normal, dans la mesure ou COUNTBLANK() et le nom anglais de la fonction "française" NB.VIDE
    Et c'est tellement mieux en VBA que de passer par une fonction native d'excel
    Microsoft devrait vendre des version light d'excel avec juste un classeur et des feuilles sans aucune fonctionnalité, ni fonction et permettre aux utilisateurs de macroter
    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

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    pour récupérer la formule dans une cellule pour VBA (le plus simple)
    - Ouvrir la fenêtre d’exécution
    - écrire par exemple (mettre la cellule contenant la formule) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print Range("A1").Formula
    - puis valider => la formule est dispo
    - après l'adapter en VBA
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  10. #10
    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
    Il y avait autrefois le pack "starter" office avec des fonctionnalités réduites (pas de VBA et fonctionnalités avancées) et un bandeau publicitaire

    Sinon, un Excel "à blanc", je prend un cahier de feuille A4 quadrillées si besoin
    Ou alors, un listview ?


    Réinventons la roue ! Paraît qu'elle pourrait dans le meilleur des cas se mettre à "rouler"

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe et Joe,

    Vous avez raison, mais soyez indulgents. Sauf d'avoir une grosse "tronche", on a tous commencé comme ça, avant de se rendre compte en y travaillant, qu'on pouvait être plus simple et plus efficace. Moi en premier.

    Amicalement.

  12. #12
    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 Eric,

    oh, pour ma part, il n'y avait absolument rien de sérieux ou de blessant, juste des sottises racontées après 40h de boulot sans repos


    et je suis d'accord avec toi, il suffit d'aller lire mes premiers messages sur ce forum pour se rendre compte d'où je suis parti et par quels chemins tarés je passais pour des problèmes simples

  13. #13
    Invité
    Invité(e)
    Par défaut
    Salut Joe,

    Je ne me suis pas senti attaqué. Je pensais juste à la personne qui dépose son premier post et qui reçoit nos réponses....

    Je salue Philippe et les autres contributeurs.

    Alors repose toi bien et passe de bonnes fêtes.

    Amicalement.

  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
    Tu as néanmoins raison, notre échange avec Philippe pouvait s'interpréter négativement, ton intervention restaure la compréhension

    alors

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

Discussions similaires

  1. Calcul : ne pas compter les cellulles vides
    Par romuald.lecordier dans le forum QlikView
    Réponses: 1
    Dernier message: 05/09/2014, 08h49
  2. Réponses: 10
    Dernier message: 16/12/2011, 18h18
  3. [XL-2003] Les cellules (vides) dans un tableau croisé dynamique
    Par Mauna dans le forum Excel
    Réponses: 12
    Dernier message: 12/05/2009, 09h44
  4. Trouver les cellules vides dans un tableau de cellules
    Par ricololo dans le forum MATLAB
    Réponses: 12
    Dernier message: 13/11/2008, 15h11
  5. [EXCEL][VBA] Compter les cellules non-vides
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 15h40

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