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
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
A voir également:
- Excel et VBA NB.VIDE
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
32 réponses
Ricky38
Messages postés
4349
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
2 novembre 2013
1 459
29 déc. 2009 à 16:10
29 déc. 2009 à 16:10
Salut,
ceci va surement t'aider : https://www.generation-nt.com/reponses/nb-si-ou-nb-vide-avec-vba-entraide-395313.html#reponse
Bonne journée
ceci va surement t'aider : https://www.generation-nt.com/reponses/nb-si-ou-nb-vide-avec-vba-entraide-395313.html#reponse
Bonne journée
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
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 ;)
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 452
29 déc. 2009 à 23:18
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 !
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
4349
Date d'inscription
samedi 15 mars 2008
Statut
Contributeur
Dernière intervention
2 novembre 2013
1 459
30 déc. 2009 à 00:57
30 déc. 2009 à 00:57
...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
92
30 déc. 2009 à 07:23
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é ;)
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
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 . . .?
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
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 452
30 déc. 2009 à 14:34
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").
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
92
>
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
30 déc. 2009 à 14:38
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
a = 1000 - Worksheets(2).Range("A1:A1000").Cells.SpecialCells(xlCellTypeConstants).Count
au lieu de sheets("Feuil2").Range. . . . . ... .
Merci
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
1 452
>
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
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.
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
92
>
Le Pingou
Messages postés
12225
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
6 décembre 2024
30 déc. 2009 à 14:57
30 déc. 2009 à 14:57
oui enfin bref on s'est compris il marche tous au final. . . .
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 752
30 déc. 2009 à 09:51
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 :
Avec une plage "variable" qui peux s'agrandir etc... :
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
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
30 déc. 2009 à 10:04
tu veux inserer ta formule en vba c ca?
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
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
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
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 10:41
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 :
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...
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
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 11:18
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?
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
30 déc. 2009 à 10:44
bah pas besoin de tout ca
exemple :
Cells(1, 1).FormulaLocal = "=somme(A2:A5)"
a bientot sur ccm
exemple :
Cells(1, 1).FormulaLocal = "=somme(A2:A5)"
a bientot sur ccm
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
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é. . .
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é. . .
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
30 déc. 2009 à 11:02
pourquoi te compliquer alors que tu peux faire simple:
Cells(1, 1).FormulaLocal = "=nb.vide(A2:A99)"
Cells(1, 1).FormulaLocal = "=nb.vide(A2:A99)"
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
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 11:06
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...
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
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 = ""
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 = ""
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
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
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
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
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
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
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
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
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 . . .
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 11:35
30 déc. 2009 à 11:35
Essaie ceci :
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......
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......
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
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 11:47
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 :
Il me semble que la partie en gras ne fonctionne qu'une fois ou nécessite l'enregistrement du classeur au préalable. Donc :
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
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
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
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
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. . .. .
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 752
30 déc. 2009 à 11:42
30 déc. 2009 à 11:42
il arrive... Laisse le finaliser, tu verras ton sujet remonter dans mes interventions (enfin dans les tiennes aussi...)
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
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