Récupération du n° de ligne (index) dans excel [Résolu]

Signaler
Messages postés
91
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
15 mars 2013
-
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
-
Bonjour à tous et tous mes voeux,
Mon problème est simple:
Je choisi un item dans la liste chargé dans une combobox à partir d'une feuille Excel ex: TOTO, ce nom correspond à une ligne je souhaite récuperer ce N° de ligne pour m'en servir comme index (pour remonter ma liste par exemple )
merci d'avance pour l'aide apportée

JF

5 réponses

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Humm... le début, parfait (admirable de clarté je dirais même!!!), la fin me paraît moins évidente!!!

Qu'entends-tu lorsque tu dis "J'effectue un tri en fonction du nom selectionné dans ma combobox" ??? Tu tries quoi, les lignes du tableau Excel ou celles du Combo !???
Enfin... qu'importe après tout...

En somme, tu mets tout dans ton combobox mais après tu ne sais pas resortir le numéro de la ligne puise que ton ComboBox fait un tri par ordre alphabétique (et qu'ainsi, les Indexes ne correspondent plus aux numéros des lignes Excel), c'est bien ça ???
S'il n'y a pas de doublons, tu peux toujours faire une routine de recherche du texte (ligne par ligne!) mais ce serait idiot !

En effet, le problème étant récurrent, ils ont pensé à tous en faisant le ComboBox et ils ont mit "ItemDate". Regarde l'aide pour plus d'infos (mais c'est pas évident à comprendre au début !!!).
En fait, c'est une sorte de liste parallèle... Chaque entrée possède 2 choses :
- Une valeur entrée dans Combo1.List(index)
- Et un nombre (facultatif!) dans Combo1.ItemData(index)
En fait, ça permet de numéroter manuellement les entrées... Afin, justement, de ne pas perdre leur ordre d'origine... Mais comme tu peux attacher n'importe quel nombre aux entrées, tu peux aussi t'en servir comme variable...
Bref, on peut se servir de ce système dans différentes optiques. La tienne étant de prendre ça pour des variable...

Toute la question est de savoir s'il tri les données dans ta collection... La solution que je vais te proposer repose sur l'hypothèse (j'avoue ne jamais m'être servi des Collections utilisateur!) que ta collection ne touche pas l'ordre des lignes... A toi de me dire si c'est ou non le cas!!!

Mais reprenons ton code :

'Filtre les doublons (colonne A)
On Error Resume Next
For Each Cell In Range("a2:a200")
Un.Add Cell, CStr(Cell)

Next Cell
On Error Goto 0
'Insertion des données uniques dans le ComboBox
For i= 1 To Un.Count
ComboBox1.AddItem Un(i)

ComboBox1.ItemData(ComboBox1.NewIndex) = i + 1 'Pour 2 à 200! Vérifie!


Next i

Il va sans dire que tout ça a été fait de tête et doit donc être soigneusement/minutieusement vérifier !

Après, si tu veux récupérer le numéro de ligne Excel "Toto"... Il faut déjà connaitre l'index de Toto dans la ComboBox ! Mais supposont que Toto soit sélectionné (Combo1.ListIndex) :

ComboBox1.List(Combo1.ListIndex) '<= Te renvoit normalement "Toto"

ComboBox1.ItemData(Combo1.ListIndex) 'Te renvoit normalement le numéro de sa ligne Excel!!!

ComboBox1.ItemData(index)


Alors, la question fatidique :

Est-ce que cela répond à ta question et résoud ton problème ???????????

Enjoy

<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Pense à nous donner la version et le langage dans lesquelles tu codes!

Ta question est tout sauf claire !!! Essaie de la reposer correctement STP. Pense à ne nous donner que les données factuelles :
- Qu'est-ce qui est dans la combox : du texte, des numéros, quoi et pour faire quoi ???
- Le nom correspond à une ligne !!! CA NE VEUT ABSOLUMENT RIEN DIRE en prog!!! Les lignes Excel sont numérotés, elles ne portent pas de noms! Alors, si tu as donné des noms à tes lignes en, par exemple, mette en texte dans la première cellule de chaqu'unes (ligne), c'est pas pareil !!!
- Tu souhaites récupérer le numéro de ligne que tu as pour t'en servir comme index, c'est à dire, comme il sert déjà !?!?!?
- Pour remonter ta liste !!! On sait à quoi sert un index!!!

Bref essaie vraiment d'être plus clair, plus factuel et donne toi la peinne de perdre au moins la moitié du temps qu'on va te consacrer à rédiger ta question (afin de ne pas, justement, nous faire perdre notre temps!!!.

Compare la taille de ma réponse avec la taille de ta question, multiplie ça par le nombre de posts auquels je réponds chaque jour sur ce forum et tu devineras que si je veux bien être à votre service gratuitement, faut pas non plus me prendre pour un con!

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
91
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
15 mars 2013

En premier lieu BONJOUR
Si la question ne te plait pas, n'y répond pas!!!!
Je n'est pas par habitude de prendre les gens pour des "cons" comme tu le dit si mal
Comme le disais georges Charpack pendant ces cours (pour infos prix nobel de physique)
"Les questions ne sont jamais idiotes, les réponses malheureusement trops souvent"
Médite! je pense que cela te fera le plus grand bien et "déglonflera" ton ego
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Oh mais mon cher monsieur, avant de savoir si la question me plait ou pas, il faudrait pouvoir la comprendre!!! Et... malheureusement... je n'ai pas un prix nobel... Alors pardonne moi si mon ego prend la place de mon intelligence! Mille pardons.
Enfin, note quand même que si les questions n'étaient jamais idiote, le monde ne serait pas ce qu'il est!

Bon, je vois bien que tu as pris ma réponse comme une attaque personnelle et que tu n'as pas sû trouver mieux que d'y répondre par une attaque dévié du sujet! C'est bien! Surtout à 51 ans!!! Ta maturité m'épate! Avais-tu peur d'admettre tes propres erreurs ??? (<= attaques personnelles tellement basses que tu me déceverais de t'y abaisser!!!).

Mais bon, je m'excuse si tu as mal pris ce que je t'ai dis. C'était général (pi relis, je n'ai jamais dit que tu prenais les gens pour des cons!!!!!!!!!). Il faut bien comprendre qu'il y a beaucoup plus de gens à aider que de gens qui aident (et partagent donc) sur VBFrance. Du coup, si chacun est aussi imprécis, nous (c-a-d, ceux qui participent activement [en bien ou en mal, qu'importe, l'essentiel est de participé n'est-ce pas ;-]), ben on passe notre temps à vous demander de bien vouloir prendre le temps de formuler correctement et clairement les questions (qu'importe d'ailleurs les fautes d'orthographe et cie du moment qu'ont pigent!) en pensant au temps qu'on prendre (sur nous donc) pour y répondre.

Bon, les webmasters sont entrein de réfléchir à ce problème parce qu'il commence à devenir de plus en plus pénible et récurrent - au fur et à mesure que le site devient populaire.

Donc, ne te sent pas visé personnellement d'accord (enfin, tu fais ce que tu veux ... on est bien d'accord!).

Moi je te conseille de tout reprendre à zéro et de reposter ta question sur le forum en tachant quand même d'être un chouïa plus concis... surtout que, visiblement, tu sais t'exprimer avec des mots (pas comme certains sur VBF qui ont du mal avec notre belle langue!).

Sans rencune.

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Messages postés
91
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
15 mars 2013

Bien, mon cher ScSami, dédramatisons le débat:
Mon problème
Une feuille excel "liste" avec 5 colonnes :
A=Nom
B=adresse
C= téléphone
D= Fax
E= commentaire
une userform avec une combobox
la colonne A me sert à "charger" cette combobox
voici le code :
Dim i As Integer
Dim Cell As Range
Dim Un As New Collection
Sheets("liste").Activate
ComboBox1.Clear
On Error Resume Next
'filtre les doublons (colonne A)
For Each Cell In Range("a2:a200")
Un.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0
'insertion données uniques dans le Combobox
For i = 1 To Un.Count
ComboBox1.AddItem Un(i)
Next i
j'effectue un tri en fonction du nom selectionné dans ma combobox : Exemple TOTO qui se trouve en ligne 186 (dans l'absolu je ne connais pas ce N°)
c'est ce numéro que je souhaite "récuperer"

Bon est ce clair
merci de ta réponse