Renvoi du numéro de ligne d'une cellule en VBA

Renvoi du numéro de ligne d'une cellule en VBA - VB/VBA/VBS - Programmation

Marsh Posté le 22-12-2010 à 15:26:08    

Bonjour,
 
Je souhaite savoir comment faire en VBA pour automatiser le renvoi du numéro de ligne d'une cellule. Je m'explique j'ai un tableau avec des noms :
 
       A
       
 1  Michel  |
 2  Paul     |
 3  Truk     |
 4  Bidule   |
 
En VBA je fais un filtre qui cherche un nom précis dans la colonne A et je cherche à savoir quel est le numéro de ligne qui correspond à ma recherche avec mon filtre.
Pour être clair, l'utilisateur clique dans une combobox un nom et ceci est mis dans une variable nommée var et je veux savoir sur quelle ligne il se trouve sans passer par une boucle qui est beaucoup trop longue.
Plutôt en utilisant la méthode Find(var).row mais ça ne marche pas.
 
Si quelqu'un peut m'aider.
 
Merci d'avance.

Reply

Marsh Posté le 22-12-2010 à 15:26:08   

Reply

Marsh Posté le 23-12-2010 à 07:57:22    

Personne ne peut m'aider?

Reply

Marsh Posté le 23-12-2010 à 08:59:52    

Je pense que le plus simple est de te créer un second ComboBox dans lequel tu renseigneras les numéros de lignes correspondants dans Excel pour chaque entrée de ton premier ComboBox.

Reply

Marsh Posté le 24-12-2010 à 14:35:11    

GuiGui013 a écrit :

Je pense que le plus simple est de te créer un second ComboBox dans lequel tu renseigneras les numéros de lignes correspondants dans Excel pour chaque entrée de ton premier ComboBox.


Euh... Tu es sérieux quand tu dis ca ?????
Et s'il passe finalement "Mickael" en ligne 3, il fait quoi ??
Quand on ne sait pas, le mieux c'est quand meme d'eviter de raconter des aneries...
Il va se faire une gestion de clé primaire numérique incrémentée pour récuperer les numéros de ligne...  
 
 
Pour aidevba :
 
Pas besoin de vba pour faire ce genre de chose.
Je pars du principe que ton tableau est en colonne A, et que les valeurs commencent à la ligne 2 (la ligne 1 etant le titre de la colonne)
En C2 : tu saisis ton critere de recherche, Ex : Mickael
En D2 : Tu saisis : =SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20)) et tu valides avec Ctrl+Shift+Entree
Tu te retrouves donc en D2 avec : {=SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20))}  
 
EnJoY

Message cité 2 fois
Message édité par SuppotDeSaTante le 24-12-2010 à 14:38:51

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 31-12-2010 à 01:50:04    

SuppotDeSaTante a écrit :


Euh... Tu es sérieux quand tu dis ca ?????
Et s'il passe finalement "Mickael" en ligne 3, il fait quoi ??
Quand on ne sait pas, le mieux c'est quand meme d'eviter de raconter des aneries...
Il va se faire une gestion de clé primaire numérique incrémentée pour récuperer les numéros de ligne...  
 
 
Pour aidevba :
 
Pas besoin de vba pour faire ce genre de chose.
Je pars du principe que ton tableau est en colonne A, et que les valeurs commencent à la ligne 2 (la ligne 1 etant le titre de la colonne)
En C2 : tu saisis ton critere de recherche, Ex : Mickael
En D2 : Tu saisis : =SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20)) et tu valides avec Ctrl+Shift+Entree
Tu te retrouves donc en D2 avec : {=SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20))}  
 
EnJoY


 
Tu me fais bien rigoler avec tes formules à deux balles ...

Reply

Marsh Posté le 31-12-2010 à 14:47:06    

GuiGui013 a écrit :


 
Tu me fais bien rigoler avec tes formules à deux balles ...


Il a peut être tord, mais on argumente stp.
Ta phrase ne devrait pas avoir de place ici, ça n'apporte rien au posteur initial.
 
 
Personnellement je serais passé par la formule
=EQUIV("XAVIER";D16:D30)
ça donne le numéro de ligne du tableau indiqué D16:D30
en gros si Xavier est en D18, ça rend 3  (car c'est la 3ème ligne de D16:D30)


Message édité par Xxxaaavvv le 31-12-2010 à 14:52:03
Reply

Marsh Posté le 31-12-2010 à 19:19:21    

Je ne vois pas où j'ai tort. Ces formules a "deux balles" comme le souligne guigui013, expert en recuperation de numero de ligne par le biais d'une combo, fonctionnent sans souci.
Encore faut il les comprendre.


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 03-01-2011 à 14:29:23    

J'ai dis "peut être"
mais faut argumenter ;)

Reply

Marsh Posté le 03-01-2011 à 23:48:12    

Tu chercherais pas a réinventer le vlookup ?

 

Tu crées une colonne avec les numéros de ligne, une autre avec les prénoms, et le vlookup sur le prénom te permettras de renvoyer le numéro de ligne stocke dans la colonne d'a coté)

 

Rustique, mais fonctionnel :)


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 03-01-2011 à 23:51:04    

SuppotDeSaTante a écrit :


Euh... Tu es sérieux quand tu dis ca ?????
Et s'il passe finalement "Mickael" en ligne 3, il fait quoi ??
Quand on ne sait pas, le mieux c'est quand meme d'eviter de raconter des aneries...
Il va se faire une gestion de clé primaire numérique incrémentée pour récuperer les numéros de ligne...

 


Pour aidevba :

 

Pas besoin de vba pour faire ce genre de chose.
Je pars du principe que ton tableau est en colonne A, et que les valeurs commencent à la ligne 2 (la ligne 1 etant le titre de la colonne)
En C2 : tu saisis ton critere de recherche, Ex : Mickael
En D2 : Tu saisis : =SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20)) et tu valides avec Ctrl+Shift+Entree
Tu te retrouves donc en D2 avec : {=SOMMEPROD((A2:A20=C2)*LIGNE(A2:A20))}

 

EnJoY


Les matrices c'est puissant, mais j'évite : très peu de gens savent s'en servir, et on peut te casser la formule facilement

 

Mais jolie utilisation ;€


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 03-01-2011 à 23:51:04   

Reply

Marsh Posté le 04-01-2011 à 09:33:32    

L'avantage des formules matricielles c'est que ca marche tout le temps.
 
L'exemple de Xxxaaavvv est fonctionnel. Certes. Mais le jour ou pour X raisons, le tableau ne commence plus en ligne 16, il faut changer non seulement la reference de cellule du début, mais en plus modifier la variable pour calculer le numéro de ligne.

Citation :

=EQUIV("XAVIER";D16:D30)  
ça donne le numéro de ligne du tableau indiqué D16:D30  
en gros si Xavier est en D18, ça rend 3  (car c'est la 3ème ligne de D16:D30)


Donc si Xavier est en 18, il faut ajouter 15 a la valeur renvoyee. Mais si le tableau commence en ligne 10, il faut changer 15 en 9. Je trouve plus pratique de ne changer que "A16" en "A10" et ce meme s'il faut valider par Ctrl+Shift+Entrée.
 
Quant au VLookUp, oui c'est une solution, mais ca oblige a gerer les numéros de lignes. Alors qu'Excel fait ca tres bien. Ca veut dire faire attention quand tu travailles sur ton tableau lors de copier/couper/coller etc.
 
Et comme souvent, je pars du principe (peut etre a tort) que l'histoire du prénom n'est qu'un exemple simplifié d'un tableau plus complexe. Et comme on a pas la tronche du tableau, moins on ajoute d'info a ce dit tableau mieux c'est.
 
Après toutes les manieres proposées ici fonctionnent (sans parler de celle de GuiGui013 :sarcastic: ) il n'a qu'a choisir la plus simple en ayant tous les tenants et les aboutissants.
 
:jap:


Message édité par SuppotDeSaTante le 04-01-2011 à 09:34:17

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-01-2011 à 13:11:44    

Oui enfin bon, le coup du tableau qui évolue c'est un autre problème limite HS par rapport a la question de base...
 
Et la solution simple contre les tableaux qui bougent, c'est les plages nommées, la formule devient :
=EQUIV("XAVIER";MON_TABLEAU)
ou MON_TABLEAU est la plage "D16:D30" ou ce que l'on veux par la suite...
 
Et puisqu'il faut ajouter un chiffre pour avoir le numéro de ligne absolu (et non par pas rapport au tableau)
Quid de :
= EQUIV("XAVIER";MON_TABLEAU) + LIGNE(MON_TABLEAU) - 1


Message édité par Xxxaaavvv le 04-01-2011 à 13:16:57
Reply

Marsh Posté le 04-01-2011 à 15:01:54    

Euh un tableau sous Excel qui evolue c'est HS...?
J'ai pas beaucoup de tableau statique sous Excel...
 
Oui donc au final on se retrouve avec une formule au résultat équivalent, tout aussi complexe avec deux fonctions, et plus longue a saisir.
 
Bref, je vais arreter la je pense.
 
Topic clos pour ma part :jap:
 
Putin ces lyonnais de 1978 m'exasperent...  :o

Message cité 1 fois
Message édité par SuppotDeSaTante le 04-01-2011 à 15:09:20

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 04-01-2011 à 15:16:16    

SuppotDeSaTante a écrit :

Euh un tableau sous Excel qui evolue c'est HS...?
J'ai pas beaucoup de tableau statique sous Excel...


Ce n'est pas la question du premier post :o
 

SuppotDeSaTante a écrit :


Oui donc au final on se retrouve avec une formule au résultat équivalent, tout aussi complexe avec deux fonctions, et plus longue a saisir.


J'ai été cordial jusqu'à maintenant, mais sur la "complexité" comparée de nos formules, tu me prend un tout petit peu pour du jambon la :D
Je n'ai fait que proposer ma solution sans la comparer aux autres, et la défend face aux critiques :o
 

SuppotDeSaTante a écrit :


Bref, je vais arreter la je pense.
 
Topic clos pour ma part :jap:
 
Putin ces lyonnais de 1978 m'exasperent...  :o


Idem.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed