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
 

cp4

XLDnaute Barbatruc
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
Regarde la pièce jointe 1169246
Bonjour,

@meyscal : Etant donné qu'il y a eu plusieurs versions proposées. Merci de joint ton dernier fichier, ça sera plus facile.
 

meyscal

XLDnaute Occasionnel
re, franchement toutes vos propositions sont top !
Avec une préférence pour le fichier proposé par @ChTi160.

En prenant comme base ce fichier, j'aurais quelques questions :

- le format réel du numéro de carte en fait est : 23-0000 (23= année suivi d'un tiret puis du numéro de carte). En partant de ce constat, est-il possible d'incrémenter les nouvelles cartes avec ce format ? Avec le passage à l'année suivante, peut-on repartir du numéro 1 (exemple = 24-0001) ? Avec modification des données dans la feuille "Année 2023", les valeurs dans la Listbox ont un format bizarre

- pour la recherche, Option Compare Text permet de ne pas tenir compte de la casse. Quid des accents et caractères spéciaux ? Peut-on faire en sorte que Legumes renvoie Légumes, idem avec "c" au lieu de "ç", "a" au lieu de "à" ..., etc ...

- pour le formulaire USF_EditAlerte, il est impératif que le n° de carte soit dans 1 Label et non 1 Textbox. car je ne veux pas qu'il soit modifiable et que le design soit identique à celui connu de tous. Le Textbox TBx_15 est-il indispensable ? Je ne comprends pas son utilité (n° de ligne ?). Ces 2 Textbox vont recouvrir le logo de la société qui figurera à cet endroit au centre de la carte. Pour l'anonymisation je l'ai retiré

Etant donné qu'il y a eu plusieurs versions proposées. Merci de joint ton dernier fichier, ça sera plus facile.

du coup j'ai modifié quelques petites choses dans le fichier fourni @ChTi160 que je remets ici et qui devient donc le fichier de référence.

@vgendron : je suis impressionné par le travail accompli dans ton fichier et t'en remercie grandement
 

Pièces jointes

  • meyscal (Chti160)-1.xlsm
    110.2 KB · Affichages: 1

ChTi160

XLDnaute Barbatruc
Re
Peux-tu m'expliquer ceux -ci ?
Avec le passage à l'année suivante, peut-on repartir du numéro 1 (exemple = 24-0001) ? Avec modification des données dans la feuille "Année 2023"
Tu as combien de Carte par an ?
Auras-tu une feuille par Année ex : "Année 2023","Année 2024" Etc ?
Pourquoi pas Une BDD Unique, Ex : "BDD_Cartes"
Ce sont juste des questions qui n'engagent à rien Lol !
Jean marie
 

meyscal

XLDnaute Occasionnel
Re
Peux-tu m'expliquer ceux -ci ?

Tu as combien de Carte par an ?
Auras-tu une feuille par Année ex : "Année 2023","Année 2024" Etc ?
Pourquoi pas Une BDD Unique, Ex : "BDD_Cartes"
Ce sont juste des questions qui n'engagent à rien Lol !
Jean marie
Re
On doit tourner à environ 150 cartes par an.

Initialement je pensais faire 1 fichier par année mais s'il est possible d'incrémenter chaque carte selon le format AA-n°carte cela présente de nombreux avantages :

Nul besoin de reporter les en-cours de année à année+1, possibilité de voir les évolutions et comparaisons d'une année sur l'autre, accessibilité à toutes les données dans le même fichier, autres stats ...

Oui effectivement dans ce cas de figure, l'onglet "Année 2023" devra être nommé autrement. Par exemple "Cartes Alerte émises"

Merci
 

vgendron

XLDnaute Barbatruc
Hello
@meyscal : pour faire suite à ton post 60: OK, j'ai vu où était le problème: au chargement des textbox
je n'avais pas touché au code associé à l'évent "Listbox_click"
ton code charge les données à partir de la feuille excel, ==> donc si filtre en cours = décalage de lignes
==>j'ai corrigé pour charger les texbox directement à partir de la ListBox (autant qu'elle serve à quelque chose)
j'en ai aussi profité pour remplacer ton label (que tu as appelé TextBox1) par un vrai TextBox
==> on peut donc faire un boucle de x=1 to 14
(d'ou l'intérêt de donner des noms au controls qui précisent à la fois de type de control et le contenu du controle:
ex de règle de nommage (celle que je prend habituellement)
le préfixe précise le type de control
Textbox ==> Tbx_
ComboBx==>Cbx_
CommandBouton==>Cbn_
Label==>Lbl_
Listbox==> Lbx_

et le suffixe qui indique ce qu'on met dedans
bon la. pour l'utilisation de la boucle ca donnerait Tbx_Textbox1 Tbx_Textbox2...

pour éviter de perturber un peu tout le monde, je ne reposte pas ma version pour l'instant, je regarde les dernières propositions des uns et des autres, et je les intgère
 

vgendron

XLDnaute Barbatruc
Hello

De mon coté,
j'ai supprimé les rowsources des propriétés des combo
==> dans les userform initialize, je charge les combo.list avec les tables structurées

PS: la feuille BDD est devenue "Listes"
en général, BDD est utilisé pour LA table de données (dans ton cas, la feuille qui contient les Cartes (ca me perturbait :))

j'ai repris le filtre et le compteur de Chti

les numéros sont formatés sous forme: yy-incrément

je reste avec la solution qui n'utilise pas le numéro de ligne dans le tableau Ti, mais qui recherche la position de la ligne à modifier ou supprimer directement dans la table

pour le Numéro de fiche sur le formulaire, comme Chti, j'ai remplacé le Label par un TextBox (que j'ai rendu DISALBE) ==> le numéro ne peut donc pas etre modifié par l'utilisateur
je lui ai aussi mis des propriétés de backcolor pour qu'il ne se démarque pas par rapport au formulaire..
 

Pièces jointes

  • meyscal.xlsm
    123.9 KB · Affichages: 4

meyscal

XLDnaute Occasionnel
Voir les adaptations faites, pour répondre aux demandes (feuille Logo)
Re,

franchement du top niveau !!
Format de n° de carte au top ! J'y étais d'ailleurs arrivé aussi mais je ne parvenais pas à reprendre le format 0000.
La recherche fonctionne impec' !

quelques points :

- blocage du calendrier à l'année en cours ne convient malheureusement pas car le délai peut être placé à l'année suivante, surtout en fin d'année. L'idéal serait que cela prenne les années dans date d'émission + année en cours + année suivante mais sinon ce n'est pas grave, je peux remettre l'ancien code.

- le format du texte pour le numéro de carte, j'aimerais qu'il soit identique à celui affiché lors d'une émission de nouvelle carte. J'ai modifié pas mal de choses pour s'en rapprocher mais cela reste affiché en gris et je n'ai rien vu dans ton code qui faisait référence à "forecolor" pour "TBx_1". Bon comme dit j'aurais préféré un Label mais vu qu'on peut le passer en transparent et le désactivé ça fait l'affaire.
1682775241610.png

- bug au clic des boutons Modifline & Deleteline. Je pense qu'il faut remettre la TBx_15 ? En visible.false ça devrait pas gêner ?
1682775581868.png


Le reste m'a l'air de très bien fonctionner 👍
 

ChTi160

XLDnaute Barbatruc
re
Pour ce qui est du "TextBox" "TBX_1" qui contient le N° de Carte !
il suffit de mettre un Label Transparent devant et le tour est joué Lol
voir vidéos !
Jean marie
 

Pièces jointes

  • LBL_Transparent-1.gif
    LBL_Transparent-1.gif
    140.7 KB · Affichages: 23
  • LBL_Transparent-2.gif
    LBL_Transparent-2.gif
    96.3 KB · Affichages: 21

ChTi160

XLDnaute Barbatruc
re
Tu demandes à pouvoir utiliser dans le Calendrier l'année qui suit l'année en Cours
blocage du calendrier à l'année en cours ne convient malheureusement pas car le délai peut être placé à l'année suivante, surtout en fin d'année. L'idéal serait que cela prenne les années dans date d'émission + année en cours + année suivante mais sinon ce n'est pas grave, je peux remettre l'ancien code.
Mais tu as ceux-ci dans el Code :

VB:
If Not Year(TextBox2) = Sheets("BDD").Range("T1") Then
        MsgBox ("Vous ne pouvez saisir que des données pour l'année en cours."), vbCritical, ("Année saisie incorrecte")
        TextBox2 = ""
           Exit Sub
 End If

Peux-tu m'expliquer,
Jean marie
 

meyscal

XLDnaute Occasionnel
Re,

@vgendron 👍

il suffit de mettre un Label Transparent devant et le tour est joué Lol
J'ignore si c'est la version 365 qui provoque ceci mais le label fond blanc et transparent ne change rien.

ce message d'erreur est dû au fait que j'ai supprimé le Contrôle "TBx_15" et je n'ai pas supprimé les références à ce control dans le Code ;
j'ai bien supprimé les refs à TBx_15 mais les modifs ne sont pas enregistrées :(

Mais tu as ceux-ci dans el Code :
oui car l'émission est généralement la date du jour, éventuellement le jour travaillé suivant. Le délai quant à lui peut être assez loin dans le temps si besoin de faire des travaux pour éliminer le risque. Dans ce cas de figure on met en place une mesure conservatoire qui permet d'éliminer le risque provisoirement.
La date de clôture est la date de mise en place de la solution finale.

Globalement on répond au besoin avec cette façon de faire. On pourrait même simplifier avec : "année -1", "année en cours" et "année +1"
 

ChTi160

XLDnaute Barbatruc
Re
qu'entends-tu par :
J'ignore si c'est la version 365 qui provoque ceci mais le label fond blanc et transparent ne change rien.
J'ai office 365 si c'est une question !
ce que j'ai recouvert intégralité du TextBox "TBx_1" avec un label peut import sa couleur de Fond, je l'ai mis en Transparent dans les propriétés et ça marche chez moi Lol
tu dis :
j'ai bien supprimé les refs à TBx_15 mais les modifs ne sont pas enregistrées
C'est à dire qu'ayant tout supprimé, de ce qui concerne le TBx_15 , tu as toujours un message d'erreur ?
jean marie
 

Discussions similaires

Réponses
17
Affichages
1 K
Réponses
4
Affichages
403

Statistiques des forums

Discussions
314 841
Messages
2 113 481
Membres
111 877
dernier inscrit
thierry@1965