Listbox filtrée sans doublons, sélection ligne excel

  • Auteur de la discussion DPH91070
  • Date de début

DPH91070

Nouveau membre
Bonjour,

Je travaille actuellement sur un fichier Excel, dans lequel j'ai en colonne A des codes (doublons possibles), en colonne B (le nom correspondant), et d'autres colonnes. Ce tableau fait plus de 10000 lignes.
Sur mon Userform, j'ai une Combox (Recherche) qui filtre les codes de la colonne A sans Doublons :
[cpp]Me.Recherche.List = SansDoublonsTrié(Range([A6], [A65000].End(xlUp))) 'Filtrer les codes sans doublons[/cpp]

Function correspondante
[cpp]Function SansDoublonsTrié(champ As Range)
Dim temp()
j = 1
ReDim temp(1 To j)
For i = 1 To champ.Count
témoin = Not IsError(Application.Match(champ(i), temp, 0))
If Not témoin And champ(i) <> "" Then
ReDim Preserve temp(1 To j)
temp(j) = champ(i)
j = j + 1
End If
Next i
Call Tri(temp, 1, j - 1)
SansDoublonsTrié = temp
End Function[/cpp]

A la sélection d'un choix dans la Combobox (Recherche), cela alimente alors une ListBox (CodeList) des codes identiques.

[cpp]Private Sub Recherche_Change() 'au changement dans la Combobox "Recherche"
Dim cel As Range 'déclare la variable cel (CELlule)
Me.CodeList.ColumnCount = 2
Me.CodeList.Clear 'vide la listbox "CodeList"
'Boucle sur toutes les cellules éditées cel de la colonne A de l'onglet "Sheet1"
For Each cel In Sheets("Sheet1").Range("A6:A" & Sheets("Sheet1").Cells(Application.Rows.Count, 1).End(xlUp).Row)
'condition : si la valeur de la cellule (convertie en texte) est égale à la valeur de la combobox "Recherche"
If CStr(cel.Value) = Me.Recherche.Value Then
Me.CodeList.AddItem cel.Value 'ajoute la valeur de la cellule dans la première colonne de la listbox (colonne 0)
With Me.CodeList 'prend en compte la listbox "CodeList"
.List(.ListCount - 1, 1) = cel.Offset(0, 1).Value 'ajoute la valeur de la cellule décalée d'une colonne dans la seconde colonne
End With 'fin de la prise en compte de la listbox "CodeList"
End If 'fin de la condition
Next cel 'prochaine cellule cel de la boucle
End Sub[/cpp]

Mon souci est maintenant le suivant, lorsque je clique sur l'une des lignes de la Listbox (Recherche) je souhaiterai que la ligne correspondante du fichier Excel, alimente alors différents TextBox des valeurs présentes dans le fichier Excel : et là je coince un peu, je ne trouve pas la solution à mon problème.

Vous trouverez un fichier Excel synthétique, (pas l'original : trop lourd) à [strike] [/strike] pour plus de compréhension.
Actuellement, lorsque je clique sur une des lignes de la Listbox (CodeList), ce n'est pas la bonne ligne qui est reprise dans mes Textbox.

Une aide serait la bienvenue :??:

Didier

_____________
Moderator dixit : deux fois désolé.
1°) Pas de lien, merci. [:zeb:6]
2°) Je pars en WE, je ne peux pas t'aider avant Lundi :( Mais d'autres peuvent le faire ;)
 

zeb

Modérateur
Arf... de retour.

Je viens de lire ton code. Bon, Il y aurait des choses à redire.

Utilise l'Option Explicit, ce qui t'obligera à déclarer tes variables.
Mets des commentaires fonctionnels, et non pas techniques.
Ne rappelle pas la variable de boucle derrière les Nexts. On n'est plus en 1985 ! C'est l'indentation qui te permet de te repérer (ce que tu fais bien par ailleurs).
Code:
Application.Rows
Ouh que c'est laid (lis l'aide d'Excel sur Rows).
Code:
' // Ton code :
For Each cel In Sheets("Sheet1" ).Range("A6:A" & Sheets("Sheet1" ).Cells(Application.Rows.Count, 1).End(xlUp).Row)

' // Revu :
For Each cel In Worksheets("Sheet1" ).Range("A6", Worksheets("Sheet1" ).Cells(Worksheets("Sheet1").Rows.Count, 1).End(xlUp))

' // Trop de Worksheets("Sheet1" ) à mon goût => Utiliser une variable ou un With

----------------

A part ça, je ne comprends pas ton problème.
A la ligne 11, tu l'as, la cellule correspondante à ta liste. En plus, tu sais te décaler avec Offset().
Je ne vois pas ce qui te coince.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 126
Messages
6 717 808
Membres
1 586 365
Dernier membre
matiOs1
Partager cette page
Haut