Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 :
  1. Me.Recherche.List = SansDoublonsTrié(Range([A6], [A65000].End(xlUp))) 'Filtrer les codes sans doublons


Function correspondante
  1. Function SansDoublonsTrié(champ As Range)
  2. Dim temp()
  3. j = 1
  4. ReDim temp(1 To j)
  5. For i = 1 To champ.Count
  6. témoin = Not IsError(Application.Match(champ(i), temp, 0))
  7. If Not témoin And champ(i) <> "" Then
  8. ReDim Preserve temp(1 To j)
  9. temp(j) = champ(i)
  10. j = j + 1
  11. End If
  12. Next i
  13. Call Tri(temp, 1, j - 1)
  14. SansDoublonsTrié = temp
  15. End Function


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

  1. Private Sub Recherche_Change() 'au changement dans la Combobox "Recherche"
  2. Dim cel As Range 'déclare la variable cel (CELlule)
  3. Me.CodeList.ColumnCount = 2
  4. Me.CodeList.Clear 'vide la listbox "CodeList"
  5. 'Boucle sur toutes les cellules éditées cel de la colonne A de l'onglet "Sheet1"
  6. For Each cel In Sheets("Sheet1").Range("A6:A" & Sheets("Sheet1").Cells(Application.Rows.Count, 1).End(xlUp).Row)
  7. 'condition : si la valeur de la cellule (convertie en texte) est égale à la valeur de la combobox "Recherche"
  8. If CStr(cel.Value) = Me.Recherche.Value Then
  9. Me.CodeList.AddItem cel.Value 'ajoute la valeur de la cellule dans la première colonne de la listbox (colonne 0)
  10. With Me.CodeList 'prend en compte la listbox "CodeList"
  11. .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
  12. End With 'fin de la prise en compte de la listbox "CodeList"
  13. End If 'fin de la condition
  14. Next cel 'prochaine cellule cel de la boucle
  15. End Sub


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) à cette adresse 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 ;) 
Lassé par la pub ? Créez un compte
Expert Programmation

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).
  1. Application.Rows
Ouh que c'est laid (lis l'aide d'Excel sur Rows).
  1. ' // Ton code :
  2. For Each cel In Sheets("Sheet1" ).Range("A6:A" & Sheets("Sheet1" ).Cells(Application.Rows.Count, 1).End(xlUp).Row)
  3.  
  4. ' // Revu :
  5. For Each cel In Worksheets("Sheet1" ).Range("A6", Worksheets("Sheet1" ).Cells(Worksheets("Sheet1").Rows.Count, 1).End(xlUp))
  6.  
  7. ' // 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.
Lassé par la pub ? Créez un compte