ListBox interactive

tabernake

XLDnaute Nouveau
Bonjour à tous,

C'est déjà ma deuxième demande sur ce forum (ehh oui déjà),elle fait suite à la première, celle-ci est la suivante :

Je souhaitais faire une ListBox interactive
Je résume l'utilité du fichier Excel, on montre des priorité de sessions a remplir et le manager voit s'il lui a besoin de mettre un agent sur la formation, via le UserForm suivant :
userform.PNG

Le manager se sélectionne :
1603394202236.png

Ensuite il voit toutes les sessions disponibles, et lorsqu'il clique sur une session :
1603394250075.png

J'aimerais que ça lui indique dans la ListBox2 à droite ça lui indique les agents concerné par cette formation (Sans cliquer sur le bouton "Quels agent est concerné", il me permettais de faire des test)
Hors je n'y arrive pas, celui me fait des décalages ou alors ne m'affiche rien 1x sur deux

Je vous met le code ci dessous, ainsi que le fichiers en pièce jointe :
VB:
Private Sub UserForm_Initialize()

  Set f = Sheets("Besoin")
  Set mondico = CreateObject("Scripting.Dictionary")
 
  Bd = f.Range("A2:D" & f.[D65000].End(xlUp).Row)   ' tableau Bd(n,1) pour rapidité
 
  For i = LBound(Bd) To UBound(Bd)
    If Bd(i, 4) <> "" Then mondico(Bd(i, 4)) = ""
  Next i
  '--avec tri
  temp = mondico.keys
  Call Tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
 
'Paramètrage de la ListBox
Me.ListBox1.ColumnCount = 3 'Nombre de colonne
Me.ListBox1.ColumnWidths = "150; 100; 50" 'La taille de la colonne 1,2 et 3
 
End Sub


Private Sub ComboBox1_Change()
   Dim Bd2, j As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub

   Me.ListBox1.Clear
Bd2 = Sheets("session").Range("A2:C" & Sheets("session").[A65000].End(xlUp).Row)

   Set mondico = CreateObject("Scripting.Dictionary")

'   Stop
   For i = LBound(Bd2) To UBound(Bd2)
            
               Me.ListBox1.AddItem Bd2(i, 1)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Bd2(i, 2)
               Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Bd2(i, 3)
    
   Next i
End Sub

Private Sub CommandButton2_Click()




End Sub
Private Sub ListBox1_Click()
If Me.ListBox1.ListIndex = -1 Then Exit Sub

ListBox2.Clear

Dim j As Byte
Dim sel As Variant

For j = 1 To ListBox1.ListCount
If ListBox1.Selected(j) = True Then

Selection = ListBox1.Value

End If
Next

Set f = Sheets("Besoin")

Bd = f.Range("A2:K" & f.[K65000].End(xlUp).Row)

For i = LBound(Bd) To UBound(Bd)
        If (Bd(i, 4) = Me.ComboBox1 And Bd(i, 3) = Selection) Then
            Me.ListBox2.AddItem Bd(i, 2)
        Else
            Me.ListBox2.AddItem Bd(i, 7)
        End If
Next i
End Sub

Private Sub Quitter_Click()

Unload Me

End Sub

Sub Tri(a, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2)
  G = gauc: d = droi
  Do
     Do While a(G) < ref: G = G + 1: Loop
     Do While ref < a(d): d = d - 1: Loop
     If G <= d Then
        Tbl = a(G): a(G) = a(d): a(d) = Tbl
        G = G + 1: d = d - 1
     End If
   Loop While G <= d
   If G < droi Then Call Tri(a, G, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub

Je vous remercie d'avance de vous pencher sur mon soucis.

Cordialement,
tabernake
 

Pièces jointes

  • test.xlsm
    181 KB · Affichages: 15

ChTi160

XLDnaute Barbatruc
Bonsoir

pas mal d'erreur qui ne pouvaient pas te permettre d'avancer Lol
VB:
For j = 1 To ListBox1.ListCount
If ListBox1.Selected(j) = True Then
Selection = ListBox1.Value 'ici voir dans mon fichier
End If
Next
Set f = Sheets("Besoin")

Bd = f.Range("A2:K" & f.[K65000].End(xlUp).Row) 'Ici voir dans mon fichier
'ta base (session) n'a que 4 colonnes pourquoi "k"
 

Pièces jointes

  • Test Chti160.xlsm
    177.4 KB · Affichages: 13

cp4

XLDnaute Barbatruc
Bonsoir tabernake :), ChTi160 ;),

un essai
VB:
Private Sub ListBox1_Click()
   Dim i As Integer, Bdd, f As Worksheet, Selection As Integer, Stage As String
   Set f = Sheets("Besoin")
   Bdd = f.Range("A2:D" & f.[A65000].End(xlUp).Row)

   If Me.ListBox1.ListIndex = -1 Then Exit Sub
   ListBox2.Clear
   Selection = ListBox1.ListIndex
   Stage = Me.ListBox1.List(Selection, 0)

   For i = LBound(Bdd) To UBound(Bdd)
      If (Bdd(i, 4) = Me.ComboBox1 And Bdd(i, 3) = Stage) Then
         Me.ListBox2.AddItem Bdd(i, 2)
      End If
   Next i
End Sub
Bonne soirée.

Edit: Je te rajoute mes constatations (à celles de ChTi160 ;)).
Tu te mêles les pinceaux. En effet, tu invoques un mondico que tu n'utilises pas du tout. Donc tu fais "du copier/coller".
Tu as le même stage dispensé à différentes dates qui ne figurent pas sur la feuille besoin.
Du coup, le manager aura de résultats erronés, par exemple voir animation.
Il faudrait ajouter une colonne date de stage sur la feuille session.
confusion.gif
 

Pièces jointes

  • test.xlsm
    178.8 KB · Affichages: 10
Dernière édition:

tabernake

XLDnaute Nouveau
Bonjour,

Je suis le pro du retard en terme de réponse et pour cela je m'en excuse, vous m'avez été d'une aide royale.
Je me permets de posté ici, afin d'éviter une création d'une nouvelle discussion car, le problème concerne les mêmes fichiers.

Je vous sollicite pour la dernière fois (je l'espère).
J'analyse chacune de vos réponses et en comprend le raisonnement. J'ai de gros progès à faire avec l'utilisation du dictionnary.

Votre fichier, j'ai réussi à l'adapter pour moi, cependant je bosse sur un deuxième fichier se basant sur vos réponses.
Mais je n'arrive pas à trié et enlevé les doublons sur une listbox, je suis capable de le faire sur un ComboBox, mais pas sur une ListBox.

Et ce malgré les tutos de notre chère : Boisgontier Jacques

Le UserForm est celui-ci :
forum 1.JPG


Et j'aimerais que lorsque le manager se sélectionne, on lui affiche seulement ses agents (triés et sans doublons) dans la 1ère ListBox (ListBox1).

Ensuite lorsqu'on clique sur un agent, on nous montre les demandes de stages émis pour cette agent (Et grâce à vos fichier géniaux je suis capable de le faire moi-même) dans la 2ème ListBox (ListBox3).

Et pour finir lorsqu'on clique sur un stage, on nous montre les sessions dispos (Encore une fois, je suis en mesure de le faire grâce à vous). dans la 3ème ListBox (ListBox2)

Je vous sollicite donc pour la listbox triée et sans doublons.

Je vous remercie d'avance pour votre activité à tous sur ce forum !

Bien cordialement
tabernake
 

Pièces jointes

  • Pour forum.xlsm
    190.6 KB · Affichages: 11

tabernake

XLDnaute Nouveau
Bonjour à toi,

De retour avec mon retard habituel (Je m'en excuse bien évidemment), vous êtes geniaux, tout fonctionne, je me heurte à de nouvelles problématique, mais bien sûr j'ouvre une nouvelle discussion sur le forum pour en trouver la solution.

Je vous remercie tous de votre implication dans la résolution de ce problème !
Cordialement
Tabernake
 

Discussions similaires

Réponses
4
Affichages
165

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof