Excel et VBA NB.VIDE [Résolu/Fermé]

Signaler
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
-
Bonjour,


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

Merci pour votre aide
Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014
1140
Salut,

ceci va surement t'aider : http://www.generation-nt.com/...

Bonne journée
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
oki merci ben ca vas etre la debauche j'ai jeter un oeil vite fai j'essaye demain et reviens si problème ;)
Messages postés
9516
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
18 septembre 2019
988
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 !
Ricky38
Messages postés
4401
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
29 décembre 2014
1140
...dans se cas ; COUNTIF 


heu ce n'est pas countblank ?
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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é ;)
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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 . . .?
Le Pingou
Messages postés
9516
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
18 septembre 2019
988
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").
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78 > Le Pingou
Messages postés
9516
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
18 septembre 2019

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
Le Pingou
Messages postés
9516
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
18 septembre 2019
988 > informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016

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.
informatifien
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78 > Le Pingou
Messages postés
9516
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
18 septembre 2019

oui enfin bref on s'est compris il marche tous au final. . . .
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
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
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
tu veux inserer ta formule en vba c ca?
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
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...
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
"l'indice n'appartient pas à la sélection". Quel code as tu utilisé? Le 1er ou le 2ème?
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
bah pas besoin de tout ca

exemple :

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

a bientot sur ccm
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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é. . .
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
pourquoi te compliquer alors que tu peux faire simple:

Cells(1, 1).FormulaLocal = "=nb.vide(A2:A99)"
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
par ce que je ne veux pas le resultat dans une cellule mais direct dans une variable pour ensuite l'afficher dans un USF
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
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...
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
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 = ""
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
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
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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 . . .
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
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......
Messages postés
1144
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
18 août 2014
56
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
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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. . .. .
pijaku
Messages postés
12254
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
10 décembre 2019
2248
il arrive... Laisse le finaliser, tu verras ton sujet remonter dans mes interventions (enfin dans les tiennes aussi...)
Messages postés
741
Date d'inscription
lundi 18 mai 2009
Statut
Membre
Dernière intervention
10 janvier 2016
78
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
1 2