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
    1. merci beaucoup Frank P,

      ça fonctionne parfaitement.

      CDLT

      Leyjah
  2. 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
    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 
  3. 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
    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
      1. Formidable merci BEAUCOUP Pijaku, c parfait

        Cordialement

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