Modifier la valeur d'une listbox

Résolu
Bonjour,
je sollicite votre aide parce que j'ai un petit souci avec mon appli.
Voici ce qui en est:
1. j'ai 2 userform: CLIENTS et modification
2. Dans CLIENTS, j'ai trois zone de liste, zn1 (produits), zn2 (quantité) zn3 (montant), un bouton de commande (MODIFIER).
3. grâce à MODIFIER, les valeurs sélectionnées en zn1, 2 et 3 sont transférés dans des zone de texte dans un userf modification.
CODE:
Private Sub CommandButton1_Click()
modification.zdt1 = zn1.Value
modification.zdt2 = zn2.Value
modification.zdt3 = zn3.Value
modification.Show
End Sub

Ce que je souhaiterai c'est que:
si je modifie les valeurs inscrite dans les zones de texte (zdt1, 2 et 3) de modification elle sont mise à jour dans les zones de liste (zn1, 2 et 3) de CLIENTS.
CODE TEST:
Private Sub CommandButton1_Click()
CLIENTS.zn1.RemoveItem
CLIENTS.zn2.RemoveItem
CLIENTS.zn3.RemoveItem

CLIENTS.zn1.AddItem zdt1.Value
CLIENTS.zn2.AddItem zdt2.Value
For i = 2 To 46
If zdt1.Value = Cells(i, 1) Then
CLIENTS.zn3.AddItem (zdt2.Value * Cells(i, 3))
End If
Next
modification.Hide
End Sub

MERCI POUR TOUTE L'AIDE DE VOUS POURRAI M'APPORTER

CDLT.

5 réponses

  1. Modérateur
    Bonjour,

    Voici comment je procèderai :
    1- création d'un module standard
    2- dans ce module, déclarer 3 variables public :
    Public Var1 As String 
    Public Var2 As String 
    Public Var3 As String


    3- Le code du bouton de l'userufom CLIENTS devient :
    Private Sub CommandButton1_Click()
    Var1 = zn1.Value
    Var2 = zn2.Value
    Var3 = zn3.Value
    With modification
        .zdt1 = zn1.Value
        .zdt2 = zn2.Value
        .zdt3 = zn3.Value
        .Show
    End With
    End Sub

    4- le code du bouton "Modifier" dans l'userform "modification" :
    Private Sub CommandButton1_Click() 
    Dim i As Integer 
    
    With CLIENTS 
        For i = 0 To .zn1.ListCount - 1 
            If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value 
        Next i 
        For i = 0 To .zn2.ListCount - 1 
            If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value 
        Next i 
        For i = 0 To .zn3.ListCount - 1 
            If .zn3.List(i) = Var3 Then .zn3.List(i) = zdt3.Value 
        Next i 
        modification.Hide 
    End With 
    End Sub

    5- subsidiaire : il faudrait éventuellement empêcher la saisie, dans les textbox, d'un item déjà existant dans les listbox... Ou pas!
    Cordialement,
    Franck P
    0
    1. merci beaucoup Frank P,

      ça fonctionne parfaitement.

      CDLT

      Leyjah
      0
  2. non pas spécialement.
    0
    1. j'ai encore un petit problème qui persiste:
      à ce niveau là :
      Private Sub CommandButton1_Click()
      Dim i As Integer

      With CLIENTS
      For i = 0 To .zn1.ListCount - 1
      If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value
      Next i
      For i = 0 To .zn2.ListCount - 1
      If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value
      Next i
      For i = 0 To .zn3.ListCount - 1
      If .zn3.List(i) = Var3 Then .zn3.List(i) = zdt3.Value
      Next i

      modification.Hide
      End With

      zdt3.value en général contient un produit (la valeur de la zdt2 * une valeur présente dans une cellule de ma feuille de calcul).

      Est-ce que tu peux m'éclairer un peu STP.

      CDLT
      0
      1. Modérateur
        Bonjour,

        Suffit, une fois zn2 modifié, de multiplier sa valeur par la valeur contenue dans la cellule.

        Private Sub CommandButton1_Click() 
        Dim i As Integer 
        
        With CLIENTS 
            For i = 0 To .zn1.ListCount - 1 
                If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value 
            Next i 
            For i = 0 To .zn2.ListCount - 1 
                If .zn2.List(i) = Var2 Then 
                    .zn2.List(i) = zdt2.Value
                    .zn3.List(i) = zdt2.Value * Sheets("Machin").Range("Truc")
                End If
            Next i
            modification.Hide 
        End With 
        0
    2. http://cjoint.com/data/0Dto1NU7Kbu.htm

      ainsi tu comprendra peut être mieux ce que je souhaite parce que ça:
      .zn3.List(i) = zdt2.Value * Sheets("Machin").Range("Truc")

      ne pourra pas fonctionné puisque les cellules varient en fonction du produit sélectionné.

      Cdlt

      Leyjah
      0
      1. Modérateur
        En effet.
        Alors tu dois :
        - insérer un module (Insertion/module sous VBE)
        y placer ces déclarations :
        Public Var1 As String
        Public Var2 As String
        Public Var3 As String

        2- le bouton Modifier de l'Userform Clients devient:
        Private Sub CommandButton1_Click()
        Var1 = zn1.Value
        Var2 = zn2.Value
        Var3 = zn3.Value
        With modification
            .zdt1 = zn1.Value
            .zdt2 = zn2.Value
            .zdt3 = zn3.Value
            .Show
        End With
        End Sub

        3- le bouton Modifier de l'Userform modifications devient :
        Private Sub CommandButton1_Click()
        Dim i As Integer, Prix As Double, Trouve As Range
        
        'va chercher la cellule colonne A contenant la sélection dans la list zn1
        With Sheets("Feuil1")
            Set Trouve = .Columns(1).Cells.Find(Var1, lookat:=xlWhole)
        End With
        's'il trouve alors on stocke dans prix le contenu de la colonne C correspondant Sinon on ne fait rien de plus
        If Not Trouve Is Nothing Then Prix = Trouve.Offset(0, 2).Value Else Exit Sub
        With CLIENTS
            For i = 0 To .zn1.ListCount - 1
                If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value
            Next i
            For i = 0 To .zn2.ListCount - 1
                If .zn2.List(i) = Var2 Then
                    .zn2.List(i) = zdt2.Value
                    .zn3.List(i) = zdt2.Value * Prix
                End If
            Next i
            modification.Hide
        End With
        End Sub 

        Ton fichier exemple en retour
        0
        1. Formidable merci BEAUCOUP Pijaku, c parfait

          Cordialement

          Leyjah
          0
        2. Modérateur
          Mais de rien.
          A+ n'hésite pas.
          0