XL 2019 Alimenter plusieurs TEXTBOX avec la même LISTBOX

  • Initiateur de la discussion Initiateur de la discussion wrap food
  • 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 !

wrap food

XLDnaute Occasionnel
Bonjour à tous,

Voila mon problème,
J'ai une listbox avec deux colonnes dans un Userform qui alimente une série de deux textbox en double clickant dedans.
les résultats des textbox vont en suite sur une feuille de calcul ( DEVIS)
Jusque la tout va bien .

Je souhaiterais avec la même listbox pouvoir alimenter d'autres série de textbox ( 4 en faite) .

déjà est ce possible et si oui peut on le faire automatiquement .
En gros, une fois que la série de deux textbox est remplis peut-on sélectionner un nouveau choix, dans la listbox, pour alimenter la série de textbox suivant.


Je mets ci-dessous le code que j'ai ''réussis '' a faire pour le moment ….


Private Sub Lstprestation_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'déclaration des variables
Dim NumLigne As Integer
'affectation des variables
NumLigne = Me.Lstprestation.ListIndex 'trouver le numero de laligne séléectionné dans la ListBox
Me.pretestation.Value = Me.Lstprestation.Column(0)
Me.prix_pretestation = Me.Lstprestation.Column(1)
'Me.textpretestation.Value = Me.Lstprestation.Column(1)
End Sub

Private Sub pretestation_Change()
'If Len(pretestation.Text) = 14 Then pretestation1.SetFocus
Sheets("Devis").Range("J14") = pretestation.Value

Private Sub prix_pretestation_Change()
Sheets("Devis").Range("Q14") = Format(prix_pretestation.Value, "0.000")
Sheets("Devis").Range("Q14").Value = Replace(prix_pretestation, ",", ".")
End Sub



Encore merci aux personnes qui prendront le temps de regarder mon problème .

Cdt
 
Bonjour,

Une solution, parmi d'autres possibles suivant les circonstances et d'après ce que j'ai compris de votre demande.

Cette solution, normalement, alternera l'alimentation de vos textBox.

VB:
'
' IMPORTANT variable à mettre en tête de module du userform
Dim SecondClick As Boolean ' Faux par défaut

Private Sub Lstprestation_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If lstprestation.ListIndex = -1 Then Exit Sub ' si pas de choix dans listbox sortir
    If SecondClick Then
        'Alimenter les seconds textbox
    Else
        'Alimenter les premiers textbox
    End If
    '
    ' inverser la condition
    SecondClick = Not SecondClick
End Sub

Cordialement
 
Bonjour
Merci pour votre réponse et notre temps passé sur ma problématique.
Malheureusement, cela fonctionne très bien avec deux groupes de textbox mais j'ai besoin que cela fonctionne avec 4 groupes de 2 textbox..
désolé .
Y a t il un moyen à votre connaissance de nodifier le code .

Encore merci de votre aide
 
Bonsoir @wrap food @Roblochon

Une bonne vielle démo, 2004 ! Faite à l'origine pour notre ami Eric C... Drag & Drop !!! Et qui tourne encore sous Windows 8.1 Office 2013.
Ce n'est pas exactement ce que tu veux, mais si ca peut t'inspirer...

Là il n'y a pas de limite du nombre de texte box ... Mais il faut savoir bien draguer 😉
Le paramétrage est fait pour faire disparaitre l'item de la ListBox, mais on pourrait neutraliser cette fonctionalité...

Bien à vous
Thierry
 

Pièces jointes

Bonjour,
Bonjour
j'ai besoin que cela fonctionne avec 4 groupes de 2 textbox..

Il suffit de remplacer la variable booléenne SecondClick par un compteur (ex: DbClickCount as integer) et de le tester/modifier dans l'évènement , quelque chose comme ça.
VB:
Dim DbClickCount As Integer

Private Sub Lstprestation_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    If lstprestation.ListIndex = -1 Then Exit Sub ' si pas de choix dans listbox sortir
    DbClickCount = cbclickcount + 1
    Select Case cbclickcount
        Case 1
            ' Alimenter les textBox 1 et 2
        Case 2
            ' Alimenter les textBox 3 et 4
        Case 3
            ' Alimenter les textbox 5 et 6
        Case 4
            ' Alimenter les textbox 7 et 8
            'IMPORTANT :   remettre le compteur à 0
            DbClickCount = 0
    End Select
End Sub

Sinon il y a la proposition de @_Thierry, à vous de voir.

Et qui tourne encore sous Windows 8.1 Office 2013.

Et sous w10 et office 2019 32bits. Application dont les pseudos évoquent de joyeux souvenirs. Merci Thierry.

bonne journée
 
Bonjour wrap food, Roblochon, Thierry,

Voyez le fichier joint et le code de la ListBox dans l'UserForm :
VB:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim a, b
Static n
a = Array("TextBox1", "TextBox3", "TextBox5", "TextBox7")
b = Array("TextBox2", "TextBox4", "TextBox6", "TextBox8")
With ListBox1
    Me(a(n)) = .Columns(0)
    Me(b(n)) = .Columns(1)
End With
n = n + 1
If n = 4 Then n = 0
End Sub
A+
 

Pièces jointes

Bonjour le fil
@job75: il faudrait simplement prévoir l'annulation si un item a été dblcliqué par erreur

il y aurait cette solution
on ne peut en sélectionner plus de 4 et après le 4 me il est remplacé

VB:
Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  Dim a, i, Z&
    a = Array("1", "3", "5", "7")
    With ListBox1
        For i = 1 To 8: Me.Controls("TextBox" & i) = "": Next
        For i = 0 To .ListCount - 1
            If .Selected(i) And Z < 4 Then
                Me.Controls("Textbox" & a(Z)) = .List(i, 0): Me.Controls("Textbox" & a(Z) + 1) = .List(i, 1): Z = Z + 1
            Else
                .Selected(i) = False
            End If
        Next
    End With

End Sub
demo4.gif
 
Dernière édition:
Bonjour patricktoulon,

C'est une bonne idée de permettre l'annulation, fichier (2) avec :
VB:
Dim a, b, n As Byte 'mémorise les variables

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
a = Array("TextBox1", "TextBox3", "TextBox5", "TextBox7")
b = Array("TextBox2", "TextBox4", "TextBox6", "TextBox8")
With ListBox1
    Me(a(n)) = .Column(0)
    Me(b(n)) = .Column(1)
End With
n = IIf(n = 3, 0, n + 1)
End Sub

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button <> 2 Then Exit Sub 'Button = 2 => clic droit
ListBox1.ListIndex = -1 'désélectionne
If Not IsArray(a) Then Exit Sub
n = IIf(n = 0, 3, n - 1)
Me(a(n)) = ""
Me(b(n)) = ""
End Sub
Le clic droit annule l'effet du dernier double-clic.

A+
 

Pièces jointes

Bonjour et un grand merci à tous pour votre aide.
c'est presque parfait .
j'ai juste besoin encore de votre aide car les éléments qui agrémentent ma listbox sont dans une feuille différence.
Et si j'ai bien compris ( ça c'est moins sur) la partie qui défini la Listbox est :

With [A1].CurrentRegion
dans le UserForm_Initialize

J'ai essayé d'adapter le code comme suit ( qui est le début de la liste de donnée) mais je dois faire une erreur puisque cela ne fonctionne pas ..

With [Sheets("BD").Range("A2")].CurrentRegion


je suit vraiment désolé de vous importuner avec mon incompétence.

Encore merci de votre aide
 
- 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
7
Affichages
429
  • Question Question
Microsoft 365 Textbox userform
Réponses
10
Affichages
572
Réponses
6
Affichages
589
Réponses
2
Affichages
722
Retour