[RESOLU] Fonction qui retourne le numero d'un ligne ?? (excel)

Fonction qui retourne le numero d'un ligne ?? (excel) [RESOLU] - VB/VBA/VBS - Programmation

Marsh Posté le 08-09-2005 à 15:12:53    

Salut,
Je cherche a savoir un numero de ligne, y a t'il une commande qui retourne le numero de ligne selectionné... :??:  
Je vous explique : j'ai une colonne avec des noms de personne dedant,et un onglet en haut qui me permet de choisir tel ou tel personne.
Ensuite je dois lancer une macro qui marche avec une boucle qui compte les lignes,et comme j'ai choisie une personne,je n'ai plus qu'elle a l'ecran.
J'aimerais pouvoir connaitre le numero de la ligne ou est le nom de cette personne,la premiere,pour pouvoir donner cette valeur a ma variable de boucle...
J'espere que vous m'avez compris et que quelqu'un pourra m'aider,car je suis debutant et je ne connais pas tte les variable qui existe sous VB,meme en cherchant dans l'aide ...
 
EDIT -->> Je sais que : ActiveCell.Row retourne le numero de la ligne selectionné,mais comme l'utilisateur choisie dans la 1ere ligne d'onglet la personne sur qui il veut des renseignement,cela nous donne 1ere ligne : 1 mais la deuxieme ne sera pas 2 mais 155 par exemple...
Donc en fait ce qu'il me faudrai c'est que quand l'utilisateur choisi une personne dans l'onglet soit, que ça me selectionne la premiere ligne de cette personne soit, que grace au nom de la personne je puisse retrouver la ligne... :kaola: pffu c'est la galere non?


Message édité par wfs-tibal le 09-09-2005 à 16:31:38
Reply

Marsh Posté le 08-09-2005 à 15:12:53   

Reply

Marsh Posté le 08-09-2005 à 17:29:28    

Salut wfs-tibal,
 
Si tu veux trouver le numero de la ligne de la première apparition du nom présent dans la case sélectionée en feuille 1 pour moi il n'y a pas d'autre choix que de faire un test de valeur sur ta 2ème feuille.
 
Un truc un peu dans ce style (impose un tri sur la table de la feuille 2 si tu veux la première occurence en selection et la suite en dessous):

Code :
  1. Sub trouve()
  2.      Dim Nom, Ligne
  3.      Ligne = 0
  4.      Nom = ActiveCell.Text
  5.      Sheets(2).Activate
  6.      Do
  7.      Ligne = Ligne + 1
  8.      Loop While Cells(Ligne, 1).Text <> Nom
  9.      Cells(Ligne, 1).Activate
  10. End Sub


 
Sinon ton problème me fait plutot penser à un filtre automatique, comme ça tu ne vois que les données de la personne sélectionnée (imposde une ligne de nom de colone avant les données - ne nécessite aucun tri des données):

Code :
  1. Sub personne()
  2.      Dim Nom
  3.      Nom = ActiveCell.Text
  4.      Sheets(2).Activate
  5.      Columns("A:X" ).Select
  6.      Selection.AutoFilter Field:=1, Criteria1:=Nom, Operator:=xlAnd
  7. End Sub


 
Pour les 2 exemples, j'ai pris comme argument que le nom de la première collone se retrouvait adans la première colonne de la feuille 2.
@+

Reply

Marsh Posté le 09-09-2005 à 08:29:21    

Merci WaTaShi de t'etre penché sur mon probleme, mais ce n'est pas tt a fais ça :
 
j'ai un tableau, ou la premiere ligne a des onglet(dans chaque colonne) pour choisir ce que l'on a besoin exemple:
 
 1     nom        numero        adresse      ...     <<-- cette ligne comporte que des onglets  
 2     paul        135121        31 jhg jhg  
 3     mik          464466       54 rue pdh
 4     truc        1547            36 quai dsfg
 .
 .
 .   Donc voila si ici tu choisi "mik" ou "truc" tes lignes sur ton tableau seront la 1 PUIS la 3 et la est tout mon probleme,
     Il faut que j'arrive a savoir quel ligne renvoie tel ou tel nom...Pour ensuite donner ce numero de ligne a une boucle...
     Car pour cet exemple si tu commence ta boucle a 1 ça fausse tout car la 2 ne sera pas "mik" mais "paul" !
 
     En fait il faudrait que des que l'on selectionne un critere sur l'onglet de la premiere ligne,et que par la suite il selectionne la ligne du dessous  
     ET NON PAS LA LIGNE SUIVANTE.Apres je sors le numero de la ligne selectionné et ainsi je commence ma boucle avec cette valeur ...
 
Mais faire tt sa pour moi qui debute bah c'est plus que du chinois :pt1cable: ,et pourtant croyez moi que je cherche bcp,mais
rien ne correspond a ça... :pfff:  
Si quelqu'un voit comment resoudre ce probleme d'une autre maniere je suis preneur  :)  
Voila jespere metre mieux expliqué qu'auparavant et merci a ceux qui ce pencheront sur mon soucit !

Reply

Marsh Posté le 09-09-2005 à 10:24:40    

Oh la la ! Tes explications m'ont embroulé plus qu'autre chose, mais bon .... je suis sure que tu vas réussir à nous eclaircir ça un peu mieux
Ca c'est ta première feuille de ton classeur :

wfs-tibal a écrit :


 1     nom        numero        adresse      ...     <<-- cette ligne comporte que des onglets  
 2     paul        135121        31 jhg jhg  
 3     mik          464466       54 rue pdh
 4     truc        1547            36 quai dsfg
 .
 


Quand ton utilisateur sélectionne "mik"  tu veux que l'ordi te donne sur cette feuille le numéro de ligne ? ou sur une autre ?
Si c'est sur cette feuille alors ActiveCell.Row te renvois ici 3. (c'est ce chiffre dont tu a besoin pour ta boucle ?)
 
Pourquoi ton utilisateur aurait-il besoin de sélectionner un critère en première ligne ? Est-ce pour permettre la sélection d'un onglet pour une recherche après ?
 
Ta feuille 1 c'est bon je vois à quoi elle correspond mais je comprends pas les chiffres que tu attends. Essaye de clarifier un peu plus ce que tu recherches.  
 
@+

Reply

Marsh Posté le 09-09-2005 à 10:59:42    

LoL dsl pour mes explication qui embrouille je vais essayer d'etre clair cette fois ... :pt1cable:  
 
Bon alors j'ai une feuille ou sur la premiere ligne il y des titres...
exemple de titre : le nom, le numero, l'adresse...  
Donc pour que ce soit plus simple j'ai fait : DONNEE-->>Filtre-->>FiltreAutomatique
 
Ce qui me donne maintenant la possibilité de clické,par exemple sur "nom" et de choisir "michel"(c'est un exemple,je n'est rien contre les michel) ce qui me donnera tt les renseignements sur tt les personnes qui s'appelle "michel" dans cette  liste...
Donc lorsque je choisi "michel"sur ma feuille ça m'affiche tjrs ma ligne de titre, et en dessous dans la colonne "nom" que des "michel" et  
les renseignement qui leur corrsepondent,les autres personnes ne sont pas affichés(normal).
 
Mais voila, la est mon probleme, mettons que dans ma feuille AU DEPART(donc feuille non trié) "michel" etait a la ligne 52 et 53 par exemple et bien une fois le trie effectué sur les "michel", ma feuille sera comme ceci :
 
              col1        col2          col3
 
ligne 1      nom     numero      adresse
 
ligne 52   michel    153131     45 rue qsdf
 
ligne 53   michel     15635       5  avn fdsf
 
 
tu suis toujours  :pt1cable: ?
 
Bon et bien maintenant j'utilise une macro qui a besoin de savoir, que lorsque l'on choisie "michel" (par exemple), le numero de la premiere ligne ou il y a "michel" .(ici 52)
 
Pour que ce soit moin compliqué, lorsque l'on choisie un nom ("michel","paul",ou n'importe qui d'autre) les numeros de ligne ce suivrons tjrs,come dans ce cas ou "michel" est en ligne : 52 et 53 !!! et non pas 5 , 12 ....
 
Donc voila il faut que je trouve un moyen de savoir quel et le numero de la ligne que j'ai choisi de trier et non pas la ligne de trie qui est la n°1 !
Voila jespere avoir ete un peu plus clair ... :heink:  
Et je te remercie enormement de prendre le temps de comprendre mes explication tordues WaTaShi  :jap:
 
EDIT -->> l'utilisateur selectionne la case de trie et nom celle choisie ("michel" ),on ne peux pas fonctionné avec les case de selections...
Sauf si on fais une boucle qui compare dans la colonne trié,exemple "nom",tt les nom jusqua celui selectionné :
il faudrait comparer le choix de l'utilisateur(si une variable le renvoi,Compar je crois...) avec le text qui est dans la colonne selectionné et on test
tte les case de cette collonne en descendant...  
mais je sai pas faire sa...
 

Code :
  1. Dim Ligne As Variant
  2.   Dim rRange3 As Range
  3.   Dim vCell3 As Variant
  4.   Set rRange3 = Range([I1], [I1].End(xlDown))
  5.       For Each vCell3 In rRange3
  6.         Do While vCell3 <> vCell3.Criteria1
  7.           Exit For
  8.         Loop
  9.       Next vCell3
  10.   vCell3.Select
  11.   Let numins = ActiveCell.Row


dans mon code je voudrais que "Criteria1" retourne le choix de l'utilisateur,sa marcherait alors non?


Message édité par wfs-tibal le 09-09-2005 à 11:36:03
Reply

Marsh Posté le 09-09-2005 à 13:34:45    

re,
 
J'ai un peu du mal avec ton code mais j'ai peut-être une autre piste pour ta recherche si j'ai bien compris la problématique...
 
1- Ton utilisateur fait manuellement le tri sur le colone 1
2- Tu veux récupérer la valeur de critère du tri (j'ai pas trouver comment récupérer la valeur de criteria1 sur le filtre automatique, mais tu peux la reprendre comme ça :

Code :
  1. Dim Nom
  2. Range("A1" ).Select
  3. Selection.End(xlDown).Select
  4. Nom = ActiveCell.Text


3- tu récupère la ligne de la première apparition soit à partir de la cellule que tu as en selection (deriere apparition) soit partir du début de ton tableur

Code :
  1. Dim Ligne
  2.      Range("A1" ).Select
  3.      Selection.End(xlDown).Select
  4.      Nom = ActiveCell.Text
  5.      Ligne = ActiveCell.Row
  6.      Do While Nom = Cells(Ligne - 1, 1).Text
  7.      Ligne = Ligne - 1
  8.      Loop
  9.      MsgBox (Ligne)


ou

Code :
  1. Dim Ligne, Nom
  2.      Range("A1" ).Select
  3.      Selection.End(xlDown).Select
  4.      Nom = ActiveCell.Text
  5.      Ligne = 2
  6.      Do While Nom <> Cells(Ligne, 1).Text
  7.      Ligne = Ligne + 1
  8.      Loop
  9.      MsgBox (Ligne)


 
C'est ça ? ou pire ? lol
;)

Reply

Marsh Posté le 09-09-2005 à 13:47:31    

Merci !
Bon c'est ça mais non  :pt1cable:  lol !
 
non en fait c'est tt a fait sa dans la theorie, mais en pratique non car quand l'utilisateur choisie son tri,
la colone du trie valide indique "nom" et non pas "michel" (par exemple) ... :fou:  
Donc quand tu fait :

Code :
  1. Dim Nom
  2. Range("A1" ).Select
  3. Selection.End(xlDown).Select
  4. Nom = ActiveCell.Text


la valeur de Nom sera : "nom" !!! Et c'est sa qui me soul !! :pt1cable:  :fou:  
Au lieu d'etre "michel"...Car c'est un onglet et pas un endroit ou tu tape ce que tu veux...
 
Bon sinon en me balladant un peu partout j'ai entendu parler de "combobox",dans certain exemple je me dis que sa pourrait marcher mais je sais pas du tout m'en servir ni comment les creer...
Donc en fait je sais pas si je continue de chercher dans cette voie ou si je m'oriente vers un "combobox" ...  
 
La j'ai vraiment besoin d'aide parce que je suis vraiment bloqué ... :fou:  
Merci encore WaTaShi !


Message édité par wfs-tibal le 09-09-2005 à 13:48:34
Reply

Marsh Posté le 09-09-2005 à 14:28:01    

Décidément c'est pas top ! lol
 
regarde j'ai enfin réussi à faire récipréere la donnée criteria1 du tri :

Code :
  1. Dim critere
  2. With Worksheets(1)
  3.     If .AutoFilterMode Then
  4.         With .AutoFilter.Filters(1)
  5.             If .On Then critere = .Criteria1
  6.         End With
  7.     End If
  8.     critere = Right(critere, Len(critere) - 1)
  9.     MsgBox ("Le tri est sur : " & critere)
  10. End With


 
ensuite je comprends pas si ton utilisateur fait son tri sur "michel" ton tableau devrait être
ligne 1   Nom
Ligne 52 Michel
Ligne 53 Michel ...
Mais si t'arrive à utiliser le code ci dessus tu dois pourvoir récuperer le critère du filtre mais il faut que ce soit un filtre effectif
pour ce qui est des boîtes de dialogue tu peux demander à ton utilisateur de saisir le nom sur lequel il veut le filtre

Code :
  1. Nom = inputbox("Vous voulez filtrer sur ?" )


 
avec l'une ou l'autre sollution tu récupère le critère et tu l'utilise pour rechercher ton numèro de ligne.
 
vois si-tu peux pas joindre un fichier exemple ce sera peut etre plus simple pour comprendre.

Reply

Marsh Posté le 09-09-2005 à 15:14:57    

MERCI ! MERCI WaTaShi  :jap:  :jap:  :jap:  
 
Trop bien sa marche nikel !!!
pffuu :kaola: c'etait bien dure en tout cas...J'aurais jamais pu trouver le code tout seul,surtout que je debute alors la...
 
Voila mon code (que la partie qui concerne la recherche de ligne a partir du critere),le reste est bien trop long...
 

Code :
  1. Dim critere
  2.     With Worksheets(1)
  3.        If .AutoFilterMode Then             
  4.          With .AutoFilter.Filters(9)
  5.                 If .On Then critere = .Criteria1
  6.             End With
  7.        End If
  8.      critere = Right(critere, Len(critere) - 1)
  9.      MsgBox ("Le tri est sur : " & critere)         'Recupere dans critere la valeur du tri, l'identifiant ici
  10.     End With
  11.    
  12.   Dim var As Variant
  13.   Dim rRange3 As Range
  14.   Dim vCell3 As Variant
  15.   var = 2                                           'C'est la variable qui nous donne le numero de la ligne
  16.   Debug.Print Cells(var, 9)
  17.   Set rRange3 = Range([I2], [I2].End(xlDown))
  18.       For Each vCell3 In rRange3
  19.         If Cells(var, 9) = critere Then             'Si la condition est verifié on est a la bonne ligne
  20.         Exit For
  21.         End If
  22.             var = var + 1
  23.       Next vCell3                                   'Boucle permettant de trouver la ligne
  24.                                                         'var indique le numero de la ligne grace a cette boucle


 
Encore merci !!!!!

Reply

Marsh Posté le 09-09-2005 à 16:29:25    

De rien !
Tu devrai marquer résolu dans le titre du sujet ;) Ca pourra en aider d'autres;)
 
bon courage pour le reste

Reply

Sujets relatifs:

Leave a Replay

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