Excel et VBA NB.VIDE

Résolu/Fermé
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 29 déc. 2009 à 16:06
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 - 30 déc. 2009 à 14:57
Bonjour,


Petite question vite fait, quel code, si il y en a un, utiliser pour remplacer la formule NB.VIDE ? ?

Merci pour votre aide
A voir également:

32 réponses

Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
29 déc. 2009 à 16:10
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
29 déc. 2009 à 16:16
oki merci ben ca vas etre la debauche j'ai jeter un oeil vite fai j'essaye demain et reviens si problème ;)
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
29 déc. 2009 à 23:18
Bonjour,
Si on ne connait pas l’équivalent d’une fonction (exemple : NB.VIDE) il est toujours possible de lancer l’enregistreur macro et ensuite de taper la fonction dans une cellule … ensuite dans la macro on retrouve le nom à utiliser, dans se cas ; COUNTIF
C'est un reflex que vous devriez avoir !
0
Ricky38 Messages postés 4347 Date d'inscription samedi 15 mars 2008 Statut Contributeur Dernière intervention 2 novembre 2013 1 458
30 déc. 2009 à 00:57
...dans se cas ; COUNTIF 


heu ce n'est pas countblank ?
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 07:23
et bien merci le pingou je ne savais pas que de taper la formule dans une cellule en l'enregistrant nous donnait le code VBA mais c'est noté ;)
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 07:58
j'ai noté résolue car vous avez bien répondu à ma question mais euh lol j'aurai du tester avant . ..problème de synthaxe l'enregistreur me met ça:

ActiveCell.FormulaR1C1 = "=COUNTBLANK(RC[-1]:R[999]C[-1])"
sachant que j'ai ecris ma formule en B1 et que la plage de comptage est en A1:A999 je met ce code dans une de mes feuilles comme ça:

Private Sub Worksheet_Calculate()
Dim z As Long
z = "COUNTBLANK(RC[1]:RC[999])"
End Sub


j'ai le message incompatibilité de type . . .?
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
30 déc. 2009 à 14:34
Bonjour,
A la suite de toute cette littérature, je me permets de proposer la mienne qui n'est que la correction de la votre.

Private Sub Worksheet_Calculate()
Dim z As Long
z = WorksheetFunction.CountBlank(Range("A1:A999"))
End Sub

Il faut savoir que CountBlank est une fonction, donc il est nécessaire d'utiliser l'expression WorksheetFunction devant la fonction et pour l'argument plage vous le donnez sous forme Range("A1:A999").
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92 > Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024
30 déc. 2009 à 14:38
Merci le pingou je note la tienne mais dans un post plus bas j'ai noté la solution au message d'erreur qui venait de la synthaxe corrigé vers ça:

a = 1000 - Worksheets(2).Range("A1:A1000").Cells.SpecialCells(xlCellTypeConstants).Count

au lieu de sheets("Feuil2").Range. . . . . ... .

Merci
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427 > informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016
30 déc. 2009 à 14:51
Bonjour,
Ce n'est pas mon code mais le votre (poste 6) que j'ai corrigé en vous expliquant la correction.
Cela n'as rien à voir avec la suite.
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92 > Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024
30 déc. 2009 à 14:57
oui enfin bref on s'est compris il marche tous au final. . . .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 09:51
Re-
Le nombre de cellules vides d'une plage est égal au numéro de la dernière ligne - le nombre de ligne remplie soit en code VBA :

Sub nbvide()
Dim z As Long
z = 999 - Sheets("Feuil1").Range("A1:A999").Cells.SpecialCells(xlCellTypeConstants).Count
End Sub


Avec une plage "variable" qui peux s'agrandir etc... :

Sub nbvide()
Dim z As Long
Dim derlig As Integer
derlig = Range("A65536").End(xlUp).Offset(1, 0).Row
z = derlig - Sheets("Feuil1").Range("A1:A" & derlig).Cells.SpecialCells(xlCellTypeConstants).Count
End Sub
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 10:04
tu veux inserer ta formule en vba c ca?
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 10:30
lol pijaku tu es partout (en plus c'est pour le meme tableau) mais tu as pas de chance avec moi ou moi j'ai pas de chance tout court je viens de tester et bam message d'erreur "l'indice n'appartient pas à la selection" . . . .pffff ma version d'excel (2002) tiens pas la route j'ai très souvent des problèmes de ce style avec

moiced59 merci mais c'est bon le pingou m'as donné une methode pour passer d'une formule au code VBA mais oui c'est bien ce que je voulai faire
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 10:41
Si tu veux en B1 : =NB.VIDE(A1:A999) inscrit en VBA ce que t'as donné l'enregistreur de macro :
ActiveCell.FormulaR1C1 = "=COUNTBLANK(RC[-1]:R[999]C[-1])" 
Pour l'utiliser ensuite, tu peux stocker le résultat dans une variable Integer :
Dim nbvid as integer
ActiveCell.FormulaR1C1 = "=COUNTBLANK(RC[-1]:R[999]C[-1])" 
nbvid = ActiveCell.Value

En ce qui concerne le code que je t'ai donné précédemment, je ne comprends vraiment pas pourquoi cela ne fonctionne pas chez toi...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 11:18
"l'indice n'appartient pas à la sélection". Quel code as tu utilisé? Le 1er ou le 2ème?
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 10:44
bah pas besoin de tout ca

exemple :

Cells(1, 1).FormulaLocal = "=somme(A2:A5)"

a bientot sur ccm
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 10:56
non je veux pas le résultat en B1 non non c'est que j'ai utilisé B1 pour enregistrer ma macro
les numéros sont en A1 à A999 donc le premier code que tu m'a filé me vas bien juste que chez moi il marche pas mais ca a l air d etre celui qui me convient le mieux, mais si ca veut pas je vais utiliser ta 2° methode moin intuitive à mon gout mais si la plus simple veut pas :( c'est trop triste, par contre euuuh bizarement il me semblai avoir posté un truc hier qui viens avant cette etape dans mon fichier mais je ne le voi pas il a du bugué. . .
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 11:02
pourquoi te compliquer alors que tu peux faire simple:

Cells(1, 1).FormulaLocal = "=nb.vide(A2:A99)"
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:04
par ce que je ne veux pas le resultat dans une cellule mais direct dans une variable pour ensuite l'afficher dans un USF
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 11:06
cf post 10. C'est la meilleure solution. Tu passes par une cellule de ton classeur (B1 ou n'importe qu'elle autre AZ23658...), stocke sa valeur dans une variable et efface la cellule...
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 11:09
ok

et quelque chose com ca :

Cells(301, 11).FormulaLocal = "=nb.vide(A2:A99)"
tavariable = Cells(301, 11).Value
Cells(301, 11).FormulaLocal = ""
Cells(301, 11).Value = ""
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:11
ouai je suis daccord mais c'est moins economique d'un point de vue mémoire .. . .et là ben je voudrai comprendre pourquoi la ligne de code toute simple de pijaku ne marche pas :( par qu'il faut avouer que c'est le code le plus simple qu'on m'ai proposé. . .sinon oui j'utiliserai le tiens moiced59
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 11:18
RE

La formule de pijaku reviens exactement au meme a la seule difference que tu integre la formule ds la celule active et non une cellule prealablement choisie
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 11:21
Je viens de relire le tuto la formule que tu recherche né pas du tout celle ci en plus cette formule est dynamique toi tu veux le nombre de blanc de A1 a A99
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:30
de A1 à A999 oui mais ce nombre sera variable car les trous "bouchés" au fur et à mesure je m'explique ça vous paraitra plus claire les liste ont ete remplis sur plusieurs année mais des numéros ont été sautés j'ai fais un premier tri pour séparer les series, ce que je veux pouvoir faire au final c'est dans un premier temps insérer des cellule entres les nombres qui ne se suivent pas genre 8523-8525 il n'as pas été utilisé le 8524 je veux donc à cette endroit insérer une cellule et ainsi de suite ensuite il faudra evidemment compter le nombre de "trous" excusez mon langage lol pour savoir dans quel seriei utiliser des numéro . . .
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 11:35
Essaie ceci :
Sub nbvide()
Dim z As Long
Dim derlig As Integer
derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0).Row
z = derlig - Sheets("Feuil1").Range("A1:A" & derlig).Cells.SpecialCells(xlCellTypeConstants).Count
End Sub


Tu sais, si tu nous demandais ce que tu désires de manière plus complète, peut être existe t'il une méthode plus globale pour réaliser ton fichier. D'ailleurs, sur ton sujet "macro excel triage..." Michel_m te présente une solution fort utile qui pourrait être la base d'un nouveau départ pour ce sujet ici......
0
moiced59 Messages postés 1145 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 18 août 2014 60
30 déc. 2009 à 11:34
ok je pense qu il faudrais que tu aille chercher la derniere cellule ecrite et que ensuite tu te serve de celle ci pr ta formule
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 11:47
Oui il y a effectivement deux solutions. Soit passer par une formule dans une cellule (la dernière ou une autre peu importe), soit passer directement en VBA par un simple calcul : nbre de cell total - nbre de cell non vide. Informatifien semble donner la préférence à cette deuxième méthode, finalisons là.
Attention au code que j'ai donné plus haut :
Sub nbvide()
Dim z As Long
Dim derlig As Integer
derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0).Row
z = derlig - Sheets("Feuil1").Range("A1:A" & derlig).Cells.SpecialCells(xlCellTypeConstants).Count
End Sub


Il me semble que la partie en gras ne fonctionne qu'une fois ou nécessite l'enregistrement du classeur au préalable. Donc :

Sub nbvide()
Dim z As Long
Dim derlig As Integer
derlig = Sheets("Feuil1").Range("A65536").End(xlUp).Offset(1, 0).Row
ActiveWorkbook.Save
z = derlig - Sheets("Feuil1").Range("A1:A" & derlig).Cells.SpecialCells(xlCellTypeConstants).Count
End Sub
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:38
ouaip pijaku je sais là je suis un peu parti en sucette et dans tous les sens . . ..je vais essayer de recadrer tous ça excusez moi les gars je vous aide pas beaucoup :s je vais me ressaisir
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:39
euuuh par contre j'ai pas de post de Michel_m . . . .enfin je ne le vois pas dans le sujet ou l'on parle depuis hier. . .. .
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 déc. 2009 à 11:42
il arrive... Laisse le finaliser, tu verras ton sujet remonter dans mes interventions (enfin dans les tiennes aussi...)
0
informatifien Messages postés 741 Date d'inscription lundi 18 mai 2009 Statut Membre Dernière intervention 10 janvier 2016 92
30 déc. 2009 à 11:44
ok bon alors j'attend de voir ça pour ce qui est de ta derniere proposition sur ce pot çi nbvide ça me fait les meme erreur que l'autre .. .décidement . . .pour le post sur le triage commme je l'ai dis je viens de le faire manuelement et donc n'aurai plu besoin de le faire. pour mon projet je vais prendre le temps de vous rédiger un truc le plus clair possible et ce soir eventuelement envoyer le fichier
0