VBA - Cellules vides considérées comme pleines

Bonjour,

Dans le fichier ci-joint, je ne comprends pas pourquoi certaines cellules (fusionnées) qui semblent vides ne le sont pas pour mon code.

Pour voir le problème, il faudrait ouvrir ce fichier (en lecture seule ou non) et ne rien modifier sur la feuille. Puis en lançant manuellement la macro ''Démo'' dans le ''Module_Démo'', on constate que si les variables a à d semblent vides, les fonctions reliées aux variables W à Z trouvent malgré tout des cellules ''non-vides''.

capture 09 01

Je ne peux malheureusement pas modifier ces cellules fusionnées et souhaite trouver une solution afin que la variable W par exemple soit à 0 ou une autre solution qui permettrait de dire que cette ligne 25, de la colonne B à la colonne I, est bien vide.

Cordialement.

3demo-essai.zip (230.53 Ko)

Salut Yvouille,

Oui, c'est embêtant, je pense que c'est parce qu'il y a une chaine vide...

Tu peux essayer avec application.countblank qui renvoie le nombre de vides (et donc plage.rows.count - application.countblank(plage) donne le nombre de non vides).

Ou avec un NB.SI (pour les valeurs textuelles je crois) :

test = application.countif(plage, "><")

Cdlt,

Salut GB3,

J'avais de gros doutes au sujet de CountBlank, j'ai donc d'abord essayé ta proposition avec CountIf(plage, "><") et ça fonctionne parfaitement

Grâce à toi, mon problème est résolu ; merci infiniment pour ton aide.

Bonnes salutations.

Salut Yvouille,

Attention, ça a marché car les valeurs dans ton exemple sont du texte. Regarde le fichier ci-joint avec, dans le module 1, une procédure avec plusieurs essais et une fonction qui renvoie vraiment le nombre de valeurs non vides (avec des sélections multiples) :

Function NBVALEURS(ParamArray plages()) as Long

For i = LBound(plages) To UBound(plages)
    NBVALEURS = NBVALEURS + plages(i).Cells.Count - Application.CountBlank(plages(i))
Next i

End Function

Cordialement,

4nbvaleurs.xlsm (15.17 Ko)

Merci pour ces explications complémentaires.

Il y a une chose que je ne comprends cependant pas très bien, c'est cette notion de ''chaines vides''. Si cela est très explicite sur ton fichier par la formule ="" - il y a malgré tout réellement quelque chose de visible dans cette cellule - je n'arrive pas à saisir que dans mon fichier, même après avoir tenté de ''nettoyer'' les cellules concernées par une instruction Plage.ClearContents, la fonction CountA ne passe toujours pas. Alors que si je clique ''Delete'' après avoir sélectionné une cellule contenant ="", ce contenu disparait.

Peux-tu encore m'aider à ce sujet ?

C'est bizarre qu'après effacement du contenu, CountA prenne encore en compte les cellules vides (sans chaine).

J'ai essayé manuellement sur mon fichier et avec NBVAL, quand j'efface une formule contenant ="", le calcul est mis à jour (diminué de 1). J'ai essayé en changeant le format et j'ai obtenu le même résultat.

La seule explication que je vois, c'est que tu l'aies fait par le code avec la méthode end(xlup) pour déterminer la plage, et que tu aies alors survolé les chaines vides de fin. Elles n'auraient donc pas fait partie de ta plage et n'auraient pas été effacées... A moins qu'il n'y ait d'autres incidences dont je n'ai pas connaissance.

Je suis un peu confus, mais effectivement que sur la base de nouveaux essais, Plage.ClearContents fonctionne et permets de vider les cellules (fusionnées). En tout cas pour ce fichier démo, je n'ai plus testé sur mon fichier réel sur lequel ton autre proposition fonctionne à merveille.

Dans le même esprit que pour mon premier fichier, en ouvrant le fichier ci-joint (en acceptant ou non la lecture seule) et en passant immédiatement au ''Module_Démo'', on peut constater le résultat ci-dessous :

capture png 3

Encore une fois merci pour ton aide.

5demo-essai-v2.zip (230.95 Ko)

Salut Yvouille,

Je sais pas si ton dernier commentaire attendait une réponse. En tout cas, j'ai regardé le fichier et en essayant directement application.counta([B16:B25]), j'obtiens bien 7, le nombre réel de valeurs parce que les 3 dernières cellules sont complètement vides...

Je pense qu'il y avait initialement une formule de type SI(Cond;SiVrai;"") dans les cellules

En tout cas, pour faire un peu la promotion de la fonction, elle a l'avantage de donner le bon résultat quelque soient les valeurs dans la plage.

Par ailleurs, j'imagine que ce n'est pas ton fichier mais je me dis que l'utilisateur devrait élargir sa colonne B au lieu d'avoir recours à une fusion qui ne semble pas présenter d'intérêt dans son cas. Ca pourrait lui éviter des petits pépins.

Cdlt,

Re-salut,

Non, je n'attendais plus vraiment de retour, c'était juste pour corriger mon affirmation que ClearContents ne vidaient pas les cellules. Mais à nouveau il se peut que sur le fichier réel, d'autres paramètres entre en jeu et que mes résultats étaient quand même faussés avant ta solution.

Mais grâce à tes dernières explications, j'ai un peu mieux compris d'où pouvaient provenir ses fameuses ''chaines vides''

Merci pour tout.

Rechercher des sujets similaires à "vba vides considerees comme pleines"