Traduire NBVal en VBA

Ours masqué

XLDnaute Junior
Bonjour à tous,

Je me permets de remercier encore une fois ce forum pour toutes les réponses que je trouve en cherchant des discussions résolues. Quoi qu'il en soit, je sèche sur un problème sans doute tout bête :

J'ai dans une page, trois cellules qui contiennent respectivement :
en A1 =NBVAL(E:E)-1
en D1 =A1-NB.SI(A:A;"<100")-1
en F1 =NB.SI(A:A;">=100")

parce que j'ai besoin de ces valeurs pour faire des tris du style :
Rows("3:" & Range("A1").Value + 2).Select

Seulement, ça ne fait pas très propre dans mon programme. J'aimerais mieux :
Rows("3:" & la traduction de la formule en A1).Select

Y a t'il moyen de traduire ces expressions en VBA de manière très simple ? Je ne trouve pas et ça m'embête.

Merci beaucoup pour votre aide. Ours masqué !
 

Staple1600

XLDnaute Barbatruc
Re : Traduire NBVal en VBA

Bonjour à tous


En complément du conseil de Spitnolan08, je te conseillerai
la combinaison de touches suivantes:
ALT+F11
puis F1


en A1 =NBVAL(E:E)-1
en D1 =A1-NB.SI(A:A;"<100")-1
en F1 =NB.SI(A:A;">=100")
En VBA ( avec FormulaLocal)

Range("A1").FormulaLocal="=NBVAL(E:E)-1"

Je te laisse faire les deux autres
 

Ours masqué

XLDnaute Junior
Re : Traduire NBVal en VBA

Re bonjour

Désolé de ne pas répondre plus tôt.
J'ai bien pensé à l'enregistreur de macro mais ce n'est pas du tout satisfaisant : ca me met ça :
ActiveCell.FormulaR1C1 = "=COUNTA(C[-11])"

ce que je veux, c'est ne plus mettre de formule dans la cellule puisque d'autres macros pourraient modifier ces mêmes cellules et ça ne fait pas très propre ce problème...

J'ai cherché dans les count ou countA mais je ne trouve pas (et pour le NB.SI encore moins...). C'est ballot !
au mieux, j'ai Columns("e:e").Count mais ça me donne 1 puisque ça compte la colonne. J'aurais donc bien besoin d'un coup de main !

Merci beaucoup
 

Pierrot93

XLDnaute Barbatruc
Re : Traduire NBVal en VBA

Bonsoir Ours, Spitnolan, Staple

pas sur d'avoir tout compris, regarde peut être le code ci dessous :

Code:
Rows("3:" & Range("E:E").SpecialCells(xlCellTypeConstants).Count - 1).Select

bonne soirée
@+
 

Ours masqué

XLDnaute Junior
Re : Traduire NBVal en VBA

Non, désolé, je n'ai pas lu la réponse à temps, je tapais la mienne tout en essayant une solution et en attendant sur ça, j'essayais d'aider sur la question posée d'une boîte de dialogue : j'en ai plein dans mon projet donc j'y arrive mieux.

Mais justement, ce n'est pas ma solution. J'ai dû mal exprimer ma question. Désolé. Je voudrais ne plus rien mettre ni en A1 ni en D1 ni en F1, juste pouvoir sélectionner mes lignes avant de les trier. Mais le nombre de ligne varie suivant le nombre saisi en colonne A.
Je joins ma page 1 pour mieux comprendre. Je dissimule les cases sus dites. Je trie toutes mes données suivant A d'abord ceux qui ont moins de 100 puis ceux qui n'ont rien puis ceux qui ont plus de 100.

Comment faire mes sélections avec une seule ligne sans faire figurer Range("A1") dans la formule ?
Rows("3:" & Range("A1").Value + 2).Select

Merci
 

Pièces jointes

  • Classeur2.xls
    40 KB · Affichages: 187
  • Classeur2.xls
    40 KB · Affichages: 183
  • Classeur2.xls
    40 KB · Affichages: 181

Ours masqué

XLDnaute Junior
Re : Traduire NBVal en VBA

Ca me semble encore bien mieux, j'y réfléchis mais dans ce cas, il me restera le problème de sélectionner toutes les lignes : comme la population est variable, il me faudra au moins le fameux équivalent de nbval...
Je cherche là dedans. Merci.

Ours masqué
 

albert

XLDnaute Occasionnel
Re : Traduire NBVal en VBA

bonjour ours masqué,

j'ai cru comprendre que tu veux un compteur en A1 ?

alors cela peut-être te convient-il ?

Sub compte()
A = Range("E3", Range("E3").End(xlDown)).Count
Cells(1, 1) = A
End Sub


albert
 

Ours masqué

XLDnaute Junior
Re : Traduire NBVal en VBA

Bonjour Albert,

Justement non, je ne veux rien en A1 : j'avais une formule en A1 et je ne veux plus rien pour la récupérer et la laisser vierge (de telle sorte que personne ne l'efface par erreur et plante mon affaire ensuite.
La réponse de Pierrot93 répond bien en partie à mon problème. C'est dans ce sens que je cherchais en vain jusqu'ici. Il me reste à comprendre quoi mettre pour optimiser entre Range et count. La proposition filtre suivant le critère Constant. C'est pas mal. Je le retiens pour le NBVAL. Reste à trouver comment faire le NB.SI >100.

Ensuite, je regarderai le filtre élaboré qui peut sans doute me faire améliorer mon filtre (jusqu'ici, j'ajoute une liste personnelle à Excel puisque je trie suivant les critèresz saisis en colonne F dans mon exemple suivant un ordre pas logique à première vue A B8 B6 B5 C D...)mais dans l'aide de VBA, l'exemple est pourri.

D'ores et déjà merci.
 

Pierrot93

XLDnaute Barbatruc
Re : Traduire NBVal en VBA

Re, bonsoir Albert, PierreJean:)

peut être avec le code ci dessous, avec utilisation partielle des fonctions de feuille de calcul :

Code:
Rows("3:" & (Range("E:E").SpecialCells(xlCellTypeConstants).Count - 1) - WorksheetFunction.CountIf( _
    Range("A:A"), "<100") - 1).Select

@+
 

Ours masqué

XLDnaute Junior
Re : Traduire NBVal en VBA

La réponse de PierreJean peut sans doute me permettre de résoudre le problème du nb.si : je crée une fonction, c'est sûr, ça peut marcher.
Merci pour cette solution finalement simple mais efficace.

Je pense qu'il doit exister un code qui la remplace (dans tout ce que j'ai fait, je n'ai jamais fait de compteur comme ça : n = n + 1, souvent, il y a un truc comme le Count mais il faut définir le critère...) mais si je ne le trouve pas, je ferai cette méthode.

Merci
 

Discussions similaires