XL 2019 Alimenter plusieurs TEXTBOX avec la même LISTBOX

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
 

Hasco

XLDnaute Barbatruc
Repose en paix
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
 

wrap food

XLDnaute Occasionnel
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
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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

  • USF_Drag_N_Drop_Planning-V01.00.xls
    110 KB · Affichages: 32

Hasco

XLDnaute Barbatruc
Repose en paix
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
 

job75

XLDnaute Barbatruc
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

  • Classeur(1).xlsm
    22.8 KB · Affichages: 17

patricktoulon

XLDnaute Barbatruc
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:

job75

XLDnaute Barbatruc
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

  • Classeur(2).xlsm
    24.8 KB · Affichages: 12

wrap food

XLDnaute Occasionnel
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
 

Discussions similaires

Réponses
10
Affichages
315

Statistiques des forums

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