Microsoft 365 Sélection ligne dans ListBox avec boutons précédent-suivant

meyscal

XLDnaute Occasionnel
Bonjour le forum,

voilà, j'ai bien cherché dans les forums mais je n'ai rien trouvé qui répondait exactement à mon besoin.
J'ai un champ de recherche avec 2 boutons "Précédent" et "Suivant".

Mon besoin serait qu'avec un évènement Textbox1_Change, la 1ère ligne de la ListBox1 contenant le champ soit sélectionnée. Avec les boutons "Suivant" et "Précédent", je souhaiterais accéder à la prochaine ligne contenant l'élément. Là ou éventuellement ça peut se compliquer c'est que le champ recherché peut être une date (toujours format jj/mm/aaaa), un nom (majuscules et minuscules variables) , se trouver au milieu d'une phrase, ...

J'ai déjà essayé plusieurs codes dont certains me renvoient le résultat souhaité ou trient la ListBox mais ce n'est pas ce que je souhaite et je ne vois pas comment faire ça.

Quelqu'un aurait une idée par hasard ?

Voici ci-dessous le code pour ma listbox (initialize userform) + lors de la sélection de la ligne (récupération des champs dans textbox et combobox).7
Par avance merci

PS : je ne pourrais pas mettre de fichier exemple avant ce soir par contre.

VB:
Private Sub UserForm_Initialize()
HideBar Me
Sheets("Année 2023").Activate
With ListBox1
.List = Range("A2:N" & Range("B1000").End(xlUp).Row).Value
.ColumnCount = 14
End With
ListBox1.ColumnWidths = "35;44;65;45;75;18;13;120;140;45;65;140;45;140"
Dim i As Integer
For i = ListBox1.ListCount - 1 To 0 Step -1
If ListBox1.List(i) = "" Then ListBox1.RemoveItem (i)
Next i
End Sub


Private Sub ListBox1_Click() ' au clic dans la ListBox1
Me.TextBox1.Caption = Cells(Me.ListBox1.ListIndex + 2, 1)
Dim X As Integer
For X = 2 To 14 'boucle sur les 13 textboxes sauf n°1
Me.Controls("TextBox" & X).Value = Cells(Me.ListBox1.ListIndex + 2, X)
Next X
End Sub
 

meyscal

XLDnaute Occasionnel
Ok je comprends mieux alors : le filtre ne se fait que sur cette colonne.
Or mon besoin est que cela fonctionne sur toutes les colonnes ...

Je pense vraiment que le problème se situe sur la répercussion des colonnes dans les textbox (voir mon message précédent n°43)
 

cp4

XLDnaute Barbatruc
Ti = ActiveSheet.Range("A2:N" & Range("B1000").End(xlUp).Row).Value
C'est possible. Je verrai ça plus tard car je n'ai pas beaucoup de temps aujourd'hui.
Je n'ai pas tout compris à ton projet, je n'ai consulté que userform3.
Sur la feuille 'Année 2023', tu as un tableau structuré 'Tableau1' contenant 20 colonnes alors que tu ne prends que 14 (de A à N). Tu aurai pu prendre tout le tableau en une seule fois, comme ci-dessous
VB:
Ti = Range("Tableau1").Value
 

vgendron

XLDnaute Barbatruc
En PJ ton fichier avec les modifs dont je t'ai parlé auparavant

l'idée de Chti est bonne dans la mesure où tu ne supprimes pas vraiment la ligne dans la table, mais que tu fais jute un clearcontents

dans ma solution ci jointe, je supprime vraiment la ligne
les modifs "majeures"
1) les données de la feuille 2023, sont dans une table "t_BDD_2023"
2) toutes les données de la feuille BDD , les listes qui alimentent les combo sont aussi dans des tables avec des noms de type "t_Secteur", "t_Poste", "t_Pilote".....

3) la table t_BDD_2023 n'a QUE le nombre de lignes utiles ==> pas de ligne vide avec juste le numéro
==> quand tu supprimes une ligne, elle est vraiement supprimée de la table
==> quand tu ajoutes une ligne, le numéro est incrémenté avec le max de la colonne "numéro" +1
l'ajout des données est plus simple ==> plus besoin de faire les nombreux "range("B1000").end(xlup).offset....

4) j'ai mis des noms explicites dans les formulaires

pour le pb de filtrage, je ne comprend pas, avec le nouveau code que je t'avais donné (et que j'ai remis ici) ca fonctionne bien
 

Pièces jointes

  • meyscal.xlsm
    107.6 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
je viens de voir ton commentaire dans un post
dès que je tape 2 lettres la listbox est vide

déjà.. c'est pas possible que tu puisses filtrer car tant que tu n'as pas mis 3 caractères, le bouton OK pour filtrer n'est pas disponible (je me demande bien pourquoi tu obliges à avoir au moins 3 caractères d'ailleurs)

peut etre es tu sur une version de fichier dans lequel le filtre est appliqué sur l'évènement change de la textbox ?, j'ai pas ouvert toutes les versions proposées par les différents intervenants du fil.
 

cp4

XLDnaute Barbatruc
Bonjour Vgendron,
VB:
dès que je tape 2 lettres la listbox est vide
Il répondait à mon post, je lui ai proposé le code ci-dessous qui filtre la listbox sans utiliser le bouton.
Code:
Private Sub Txt_Filtre_Change()
Dim Tbl(), clé, n As Long, i As Long, k As Integer
  clé = Me.Txt_Filtre & "*": n = 0
 
  For i = 1 To UBound(Ti)
    If Ti(i, 3) Like clé Then
        n = n + 1: ReDim Preserve Tbl(1 To UBound(Ti, 2), 1 To n)
        For k = 1 To UBound(Ti, 2): Tbl(k, n) = Ti(i, k): Next k
     End If
  Next i
  If n > 0 Then Me.ListBox1.Column = Tbl Else Me.ListBox1.Clear
End Sub
 

vgendron

XLDnaute Barbatruc
hello @cp4

j'étais justement en train de regarder ta solution: il va vraiment falloir que je me familiarise avec cette méthode et me la mettre de côté pour ne plus avoir à la chercher :)
si je ne dis pas de bêtise: elle ne filtre que sur la colonne 3 et elle est case sensitive
 

cp4

XLDnaute Barbatruc
hello @cp4

j'étais justement en train de regarder ta solution: il va vraiment falloir que je me familiarise avec cette méthode et me la mettre de côté pour ne plus avoir à la chercher :)
si je ne dis pas de bêtise: elle ne filtre que sur la colonne 3 et elle est case sensitive
Salut @vgendron : En effet, elle filtre sur la colonne 3. Tu trouveras des exemples sur le site de Feu Jacques Boisgontier. Il est possible de faire un filtrage sur toutes les colonnes. Aujourd'hui, j'ai une grosse corvée à faire. Je réponds durant mes pauses.
A+

edit: le mérite revient à JB
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Et si je comprends toujours bien, je devrais là aussi me référer à "Ti" et non à Listindex.
C'est cela.
Pour chaque ligne de la listbox, la dernière colonne invisible contient le numéro correspondant de la feuille de calcul !
Donc l'item sélectionnée a pour index listbox.listindex
La dernière colonne de la listbox est ubound(Ti,2)
Le numéro de la ligne dans la feuile de calcul est donc listbox.list(listbox.listindex , ubound(Ti,2)-1)
Le -1 car l'indice de colonne de Ti commence à 1 et pas à 0 comme l'indice de colonne de listbox.list
Pour listbox.listindex : inutile de retrancher 1 car le premier élément de la listbox a pour listindex zéro.
 

meyscal

XLDnaute Occasionnel
une question: y a t il une différence entre "Pilote" et "Collaborateur" ?
Bonjour à tous,
Oui ça peut être les mêmes personnes mais la plupart du temps non. La liste des pilotes se limite (en réel à mon travail) à 25 personnes environ alors qu'on a 150 collaborateurs.

déjà.. c'est pas possible que tu puisses filtrer car tant que tu n'as pas mis 3 caractères, le bouton OK pour filtrer n'est pas disponible (je me demande bien pourquoi tu obliges à avoir au moins 3 caractères d'ailleurs)
C'est une condition que j'ai ajouté moi-même mais qui n'était donc pas présente dans le 1er fichier anonymisé. Je prends 3 caractères minimum pour que la personne ne se retrouve pas avec une liste longue comme le bras après filtrage sur 2 caractères (1 n'a aucun intérêt). Et 3 car on a des noms de famille à 3 caractères donc 4 n'irait pas.

peut etre es tu sur une version de fichier dans lequel le filtre est appliqué sur l'évènement change de la textbox ?, j'ai pas ouvert toutes les versions proposées par les différents intervenants du fil.
oui il me semble que c'est @cp4 qui avait proposé un exemple avec 1 textbox avec évènement Change

Bon je vais regarder tout ça maintenant et reviens vers vous asap. Merci encore pour l'aide !
 

meyscal

XLDnaute Occasionnel
re,

@vgendron merci pour ton fichier. Malheureusement je rencontre toujours le même problème. Le filtre n'étant pas le souci car il fonctionne impec!
Mon besoin est :
1. je tape un mot clé
2. je sélectionne un élément dans la listbox
3. la carte reprend dans les différents champs les éléments de la listbox (c'est là que ça coince)
4. les modifications sont faites et on les enregistre avec le bouton confirmer les modifications
1682750548337.png
 

Discussions similaires

Réponses
17
Affichages
760
Réponses
4
Affichages
165

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG