Menu

Macro compter cellules non vides colonne visibles [Résolu/Fermé]

Messages postés
7
Date d'inscription
vendredi 20 octobre 2017
Statut
Membre
Dernière intervention
2 janvier 2018
-
Bonjour à tous !

Je tiens à préciser pour ma défense que VBA je connais un peu mais sans plus ^^

J'essaie de compter le nombre de cellules non vides sur les colonnes que je n'ai pas masqué. En effet les colonnes peuvent-être masquées/affichées via une autre macro, c'est pour présenter une synthèse.

Donc pour ce problème, la fonction sous-total 109 ne fonctionne pas (car masquage en colonnes)
J'ai donc pu trouver une macro qui fonctionne parfaitement pour additionner seulement les données des colonnes visibles en créant une nouvelle formule intitulée SommeVisibles (macro que j'utilise) :

Function SommeVisibles(champ As Range)
Application.Volatile
t = 0
For Each c In champ
If Not c.EntireRow.Hidden And Not c.EntireColumn.Hidden Then
t = t + c.Value
End If
Next c
SommeVisibles = t
End Function



Celle-ci fonctionne avec une macro private_sub (pourquoi?):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Calculate
End Sub



J'aimerais avoir la même pour compter les cellules non vides dans une colonne, j'ai essayé ça mais j'ai une erreur #VALEUR

Function NbVisibles(champ As Range)
Application.Volatile
t = 0
For Each c In champ
t = t + c.CountA
Next c
NbVisibles = t
End Function



Merci, j'espère avoir été assez clair :D
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
1771
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
29 juin 2019
319
1
Merci
Essayer ceci

Function NbVisibles(champ As Range)
Dim cell As Range

Application.Volatile
NbVisibles = 0
For Each cell In champ
If Not cell.EntireRow.Hidden And Not cell.EntireColumn.Hidden _
And Not IsEmpty(cell) Then NbVisibles = NbVisibles + 1
Next cell

End Function

--
 

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 53776 internautes nous ont dit merci ce mois-ci

Donou12
Messages postés
7
Date d'inscription
vendredi 20 octobre 2017
Statut
Membre
Dernière intervention
2 janvier 2018
-
Un très grand merci à toi Thev

Ca parait tellement simple quand on a la solution!!

Je te souhaite une excellente journée, t'es le best

Donou
Messages postés
1771
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
29 juin 2019
319
0
Merci
Bonsoir,

"CountA" n'est pas une propriété d'un objet "Range" mais une fonction.
Ces 2 instructions seraient suffisantes

Application.Volatile
NbVisibles = Application.CountA(champ)


 
Messages postés
7
Date d'inscription
vendredi 20 octobre 2017
Statut
Membre
Dernière intervention
2 janvier 2018
0
Merci
Bonjour Thev,

Merci pour ton aide !

Ou faut-il que j'insère ton bout de code? J'ai essayé d'insérer
NbVisibles = Application.CountA(champ) après "Application.Volatile"

Function NbVisibles(champ As Range)
Application.Volatile
NbVisibles = Application.CountA(champ)
t = 0
For Each c In champ
t = t + c.CountA
Next c
NbVisibles = t
End Function



puis j'ai essayé de mettre tes deux lignes un peu partout sans succès car
ma formule =Nbvisibles() renvoie toujours l'erreur #VALEUR!
Messages postés
1771
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
29 juin 2019
319
0
Merci
 Function NbVisibles(champ As Range)
Application.Volatile
NbVisibles = Application.CountA(champ)
End Function

Messages postés
7
Date d'inscription
vendredi 20 octobre 2017
Statut
Membre
Dernière intervention
2 janvier 2018
0
Merci
Merci pour ta réactivité

La macro compte bien les cellules non-vides

Cependant, si je masque 1 colonne par exemple, la macro compte les cellules masquées. Chose que je souhaiterai éviter (car dans ce cas une formule NBVAL est suffisante?)

https://forum.excel-pratique.com/excel/macro-compter-cellules-non-vides-colonne-visibles-t100117.html

sur ce forum j'ai pu joindre un fichier expliquant mon problème plus clairement.