Microsoft 365 Click sur ListBox pour récupérer info

  • Initiateur de la discussion Initiateur de la discussion pompaero
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pompaero

XLDnaute Impliqué
Bonjour le forum,

J'explique mon souci... dans le fichier joint en feuil2 "Fiche valider cp" je dois clicker sur le ListBox afin de récupérer les infos qui renseignent la fiche en feuil2.
Le code
VB:
Private Sub ListBoxcp_Click()
est créé mais n'est plus adapté par rapport aux autres codes en place et je n'arrive pas à l'adapter.
Quelqu'un peut-il m'aider, merci.

Cdlt
pompaero
 

Pièces jointes

Si si j'ai continué, mais pas de retour
Ah, pardon, je ne pensais pas que tu voulais continuer avec le pensement que j'avais tenté. Je croyais que tu voulais tout réécrire.
Nul doute que quelqu'un de plus doué que moi va te faire ça. 😉

nous pouvons retourné sur le précèdent si cela convient ?
Maintenant que c'est ouvert ici, on doit pouvoir y rester.
Je donne tout de même le lien vers le fil précédent au cas où ça puisse être utile :
 
Bonsoir

'Explication

VB:
Private Sub ListBoxcp_Click()
Ligne = Me.ListBoxcp.ListIndex
' Information  
MsgBox "Nombres de lignes Excel : --->> " & Me.ListBoxcp.ListCount  
MsgBox "Nombres de Colonne Excel : --->> " & Me.ListBoxcp.ColumnCount  
MsgBox "Lignes de """"ListBoxcp"""" : --->> " & Me.ListBoxcp.ListIndex  
MsgBox "Lignes 1 Colonne 1 : --->> " & ListBoxcp.List(Ligne, 0) & " --->> Nom"  
MsgBox "Lignes 1 Colonne 2 : --->> " & ListBoxcp.List(Ligne, 1) & " --->> Prénom"end sub
End Sub

En fait :
  • Une ListBox en VBA est un contrôle Windows, et non une plage Excel.
  • Elle gère ses éléments dans un tableau interne en mémoire, totalement indépendant d’Excel.
  • Ce tableau commence toujours à 0, aussi bien pour les lignes (ListIndex) que pour les colonnes (List(..., ...)).
  • Donc :
    • ListIndex = numéro de la ligne sélectionnée (0 = première ligne, 1 = deuxième, etc.)
    • ListCount = nombre total de lignes (mais attention, si tu as 10 lignes, la dernière a l’index 9)
    • ColumnCount = nombre de colonnes (pareil, la première colonne est à l’index 0)
    • List(Ligne, Colonne) = lecture du tableau interne (exemple : (0,0) = 1ère ligne, 1ère colonne).
 
Dernière édition:
Je te propose ceci :
VB:
Private Sub ListBoxcp_Click()
'
    Ligne = Me.ListBoxcp.ListIndex

    Range("B11").Value = ListBoxcp.List(Ligne, 1)   ' Nom
    Range("E11").Value = ListBoxcp.List(Ligne, 2)   ' Prénom
    Range("D13").Value = ListBoxcp.List(Ligne, 3)   ' Date d'entrée dans l'entreprise
    Range("D15").Value = ListBoxcp.List(Ligne, 4)   ' Date de la demande

    Select Case ListBoxcp.List(Ligne, 5)
    Case "CONGES PAYES"
        Me.OptionButton1 = True
    Case "RTT"
        Me.OptionButton2 = True
    Case "EVENEMENT FAMILIAL (à préciser et joindre justificatif)"
        Me.OptionButton3 = True
    Case "CONGES SANS SOLDE"
        Me.OptionButton4 = True
    Case "AUTRE"
        Me.OptionButton5 = True
        Range("C27").Value = ListBoxcp.List(Ligne, 6)
    End Select

    Range("C31").Value = ListBoxcp.List(Ligne, 7)   ' Date de début
    Range("C33").Value = ListBoxcp.List(Ligne, 8)   ' Date de fin
    Range("E33").Value = ListBoxcp.List(Ligne, 9)   ' Nombre de jours

' ***************************************************************************
' Peut-être revoir cette partie et utliser les boutons radio                *
' ----------------------------------------------------------                *
'    Range("A44").Value = ListBoxcp.List(Ligne, 11)  ' Choix du responsable *
' ***************************************************************************

    Range("E44").Value = ListBoxcp.List(Ligne, 12)  ' Nom cds
    Range("H44").Value = ListBoxcp.List(Ligne, 13)  ' Date cds
    Range("E46").Value = ListBoxcp.List(Ligne, 14)  ' Motif refus

    If IsDate(ListBoxcp.List(Ligne, 15)) Then Range("F48").Value = Format(ListBoxcp.List(Ligne, 15), "dd/mm/yyyy")    ' Du
    If IsDate(ListBoxcp.List(Ligne, 16)) Then Range("H48").Value = Format(ListBoxcp.List(Ligne, 16), "dd/mm/yyyy")    ' Au
    Range("E50").Value = ListBoxcp.List(Ligne, 17)  ' Signature cds

    Range("A1").Select

End Sub

Sans oublier ceci :
VB:
Sub charge_listboxcp()
'
Dim TabGen(), TabTemp()

    nbCol = Range("t_formulaire_1").ListObject.ListColumns.Count + 1 + Range("t_formulaire_2").ListObject.ListColumns.Count
    nbLig = Range("t_formulaire_1").ListObject.ListRows.Count
    TabGen = Range("t_formulaire_1").Resize(nbLig, nbCol).Value

    If Not Range("t_formulaire_1").ListObject.DataBodyRange Is Nothing Then
        ' Boucle pour chaque ligne du tableau
        x = 0
        For Lgn = 1 To UBound(TabGen, 1)
            If (Not IsEmpty(TabGen(Lgn, 12))) And (Year(TabGen(Lgn, 8)) = Range("O4") Or Year(TabGen(Lgn, 9)) = Range("O4")) Then
                Select Case TabGen(Lgn, 12)
                Case 1
                    TabGen(Lgn, 12) = "Acceptée"
                Case 2
                    TabGen(Lgn, 12) = "Date refusée"
                Case 3
                    TabGen(Lgn, 12) = "Reportée"
                End Select
                x = x + 1
                ReDim Preserve TabTemp(1 To 20, 1 To x)
                For i = 1 To nbCol
                    TabTemp(i, x) = TabGen(Lgn, i)
                Next i
                TabTemp(11, x) = Lgn    ' Ligne source
            End If
        Next Lgn
    End If

    With Sheets("Fiche valider cp")
        With .ListBoxcp
            .ColumnCount = 20
            .ColumnWidths = "0;80;80;0;70;85;95;50;50;0;0;50;0;0;0;0;0;0;0;0"
            .Width = 600
            .Clear
            Select Case x
            Case 0
                TabTemp = Array()
            Case 1
                .Column = TabTemp
            Case Else
                .List = Application.Transpose(TabTemp)
            End Select
        End With
    End With

End Sub


⚠️ Je te laisse vérifier si les dates sont correctes ou si les quantièmes et mois sont inversés.
 

Pièces jointes

Dernière édition:
Bonjour au fil,

Laurent850, merci pour tes explications et de l'interet porté à ce post.

TooFatBoy, Je vais testé ton code, voir is cela fonctionne.

Perso, je pensais prendre modele sur le code créé par Chit160 sur la Feuil3 "Validation cds"
VB:
Public Sub LstBx_1_Click()
puis le compléter avec la partie du 2ème tableau Feuil1 "Retour formulaire demande cp".
Je n'y suis pas arrivé !!!
 
Bonsoir à toutes & à tous, bonsoir @pompareo,

As-tu au moins regarder la proposition de @TooFatBoy avant de dire "Personne veut essayer de m'aider" ! 🫣
Moi je comprends très bien sa réaction, son post#7 t'envoyait quand même une solution !

Bref, entre temps j'ai fait quelque chose alors je le transmets :
Code de la feuille "Fiche valider cp" :
VB:
Private Sub ListBoxcp_Click()
     Set WshR = ThisWorkbook.Worksheets("Retour formulaire demande cp")
     With Me.ListBoxcp
          idx = .ListIndex
          Ligne = .List(idx, 10)
     End With
    
     With WshR.[t_formulaire_1]
          Me.[B11].Value = .Cells(Ligne, 2)  'Nom
          Me.[E11].Value = .Cells(Ligne, 3)  'Prénom
          Me.[D15].Value = .Cells(Ligne, 5)  'Date de la demande
          Me.[C31].Value = .Cells(Ligne, 8)  'Date de début
          Me.[C33].Value = .Cells(Ligne, 9)  'Date de fin
          Me.[E33].Value = .Cells(Ligne, 10) 'nb jours
          Me.[D13].Value = .Cells(Ligne, 4)  'Date d'entrée dans l'entreprise
          Motif = .Cells(Ligne, 6)
          Me.[C27].Value = .Cells(Ligne, 7)  'Autre à préciser
     End With
    
     Select Case Motif
          Case "CONGES PAYES"
               Me.OptionButton1 = True
          Case "RTT"
               Me.OptionButton2 = True
          Case "EVENEMENT FAMILIAL (à préciser et joindre justificatif)"
               Me.OptionButton3 = True
          Case "CONGES SANS SOLDE"
               Me.OptionButton4 = True
          Case "AUTRE"
               Me.OptionButton5 = True
     End Select
    
     With WshR.[t_formulaire_2]
          Me.[A44].Value = .Cells(Ligne, 1)  'Choix du responsable
          Me.[E44].Value = .Cells(Ligne, 2) 'Nom cds
          Me.[H44].Value = .Cells(Ligne, 3) 'Date cds
          Me.[E46].Value = .Cells(Ligne, 4) 'Motif refus
          If IsDate(.Cells(Ligne, 5)) Then Me.[F48].Value = Format(.Cells(Ligne, 5), "dd/mm/yyyy") 'du
          If IsDate(.Cells(Ligne, 6)) Then Me.[H48].Value = Format(.Cells(Ligne, 6), "dd/mm/yyyy") 'au
          Me.[E50].Value = .Cells(Ligne, 7) 'Signature cds
     End With
    
     Range("A1").Select
    
End Sub
Et :
VB:
Sub ClearOptionButtons()
     Me.OptionButton1 = False
     Me.OptionButton2 = False
     Me.OptionButton3 = False
     Me.OptionButton4 = False
     Me.OptionButton5 = False
End Sub

Code modifié du module 1 pour le bouton

1757008397752.png
:
VB:
Sub Actualiser_ListBx()

     Dim WshFVCP As Worksheet
     Set WshFVCP = ThisWorkbook.Worksheets("Fiche valider cp")
     Call charge_listboxcp
     With WshFVCP
          .Range("B11,E11,D13,D15,C27,C31,C33,E33,A44,E44,H44,E46,F48,H48,E50").ClearContents
     End With
     Feuil2.ClearOptionButtons
    
End Sub

Voir le fichier joint

À bientôt
 

Pièces jointes

😒 no stress !! c'est juste une question et cherchais simplement à compléter ton code, la ou tu note
VB:
' ***************************************************************************
' Peut-être revoir cette partie et utliser les boutons radio                *
' ----------------------------------------------------------                *
tout simplement.
Mais je viens de trouver le complément de code manquant 😊
Merci tout de même.

Cdlt
pompaero
 
Bonsoir AtTheOne, le fil,

Oui je comprends également la réaction de TooFatBoy, j'ai mal exprimé ma question, désolé.

Merci à toi d'intégrer ce fil et proposer des solutions, c'est toujours constructif d'avoir plusieurs idées.
Je regarde ta proposition tranquillement et reviens te dire.

Au plaisir
Cdlt
pompaero
 
TooFatBoy, Je vais testé ton code, voir is cela fonctionne.

Perso, je pensais prendre modele sur le code créé par Chit160 sur la Feuil3 "Validation cds"
VB:
Public Sub LstBx_1_Click()
puis le compléter avec la partie du 2ème tableau Feuil1 "Retour formulaire demande cp".
Je n'y suis pas arrivé !!!
Personne veut essayer de m'aider ??
On ne sait même pas si la proposition a été testée, et si jamais elle l'a été on ne sait pas si ça a fonctionné.
Même pas un "merci", juste un "Personne veut essayer de m'aider ??"... super agréable pour ceux qui ont répondu (car, oui, il y a bien eu plusieurs personnes qui ont essayé d'aider !).

Et après ça ne s'arrange pas :
😒 no stress !! c'est juste une question et cherchais simplement à compléter ton code, la ou tu note
VB:
' ***************************************************************************
' Peut-être revoir cette partie et utliser les boutons radio                *
' ----------------------------------------------------------                *
tout simplement.
Mais je viens de trouver le complément de code manquant 😊
Merci tout de même.

Cdlt
pompaero
C'est tout juste si je ne me fais pas engueuler avec un "no stress !!".
Même pas une ombre d'excuse ! Et on ne sait toujours pas si la proposition a été testée ou pas.
Un tel comportement est déjà lamentable en soi, mais le pire c'est que c'est loin d'être la première fois de la part de ce personnage. 🙁


Bye
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
239
Réponses
4
Affichages
872
Retour