Changer la valeur d'une cellule a partir d une listbox
Hello petit blocage dans mon projet vba conernant l'objet listbox de mon userform:
J'initialise l'ensemble des valeurs situe dans le range B2:B400 de mon tableau excel dans ma listbox en veillant a supprimer les doulons comme ceci
Private Sub UserForm_Activate()
Dim Cell As Range
Dim Unique As New Collection
Dim Valeur As Range
Dim i As Integer
i = Range("B500").End(xlUp).Row
On Error Resume Next
For Each Cell In Range("B2:B" & i)
Unique.Add Cell, CStr(Cell)
Next Cell
On Error GoTo 0
For Each Valeur In Unique
Me.ListBox1.AddItem Valeur
Next Valeur
End Sub
Jusqu'ici tout va bien,
Mais, une fois les valeurs de la colonne B initialiser dans ma listbox je souhaite desormais pouvoir selectionner une ou plusieurs valeur dans cette liste, puis cliquer sur un bouton de commande qui va detecter les valeurs selectionner dans mon tableaux excel et pour chaque ligne ou ses valeurs sont presentes alors modifier le resultat de la cellule en colonne D par exemple :
voici mon code mais forcement ca ne marche pas :
Private Sub CommandButton1_Click()
Dim B as range
Dim D as range
Dim i as integer
Set B = Worksheets("Sheet1").Range("B2:B400")
Set D = Worksheets("Sheet1").Range("D2:D400")
For i = 1 To 400
If ListBox1.Selected(i) = B.Cells(i).value Then
D.Cells(i).Value = 3+2
End If
Next i
Unload Me
End Sub
Pouvez vous me dire ce qui cloche dans mon code et comment egalement faire une selection multiple dans ma list box svp ?
Merci d'avance
Hugo
Bonjour,
Essaie comme cela
Private Sub CommandButton1_Click()
Dim B As Range
Dim i As Integer
With Worksheets("Sheet1")
Set B = .Range("B2", .Range("B" & Rows.Count).End(xlUp))
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) = True Then
B.Find(Me.ListBox1.List(i), , xlValues, xlWhole).Offset(, 2) = 3 + 2
End If
Next i
End With
Unload Me
End Sub
Pour autoriser la multisélection dans une Listbox, tu dois indiquer 1_fmMultiSelectMulti dans la propriété "Multiselect" de la Listbox.
A+
Merci pour ta reponse,
Cependant la colonne D etait un exemple en soit pour mon projet j'aurais besoin que pour chaque valeur de la colonne B qui match avec les valeur selectionner faire un calcul qui reprend plusieurs donne du tableaux et les afficher dans une autre colonne c est pourquoi la propriete offset ne m'arrange pas lol pour etre plus clair voice mon code:
Dim A As Range
Dim B As Range
Dim C As Range
Dim D As Range
Dim E As Range
Dim F As Range
Dim G As Range
Dim i as integer
Set A = Worksheets("Sheet1").Range("A2:A400")
Set B = Worksheets("Sheet1").Range("B2:B400")
Set C = Worksheets("Sheet1").Range("C2:C400")
Set D = Worksheets("Sheet1").Range("D2:D400")
Set E = Worksheets("Sheet1").Range("E2:E400")
Set F = Worksheets("Sheet1").Range("F2:F400")
Set G = Worksheets("Sheet1").Range("G2:G400")
For i = 1 To ListBox1.ListCount - 1
If CheckBox1.Value = True And ListBox1.Selected(i) = True Then
B.Find(Me.ListBox1.List(i), , xlValues, xlWhole).Select
A.Cells(i).Value = D.Cells(i).Value + E.Cells(i).Value + F.Cells(i).Value
If Abs(D.Cells(i).Value) <= (3 / 100) Then G.Cells(i).Value = Round((10 / 100) * (A.Cells(i).Value -C.Cells(i).Value), 0)
End If
Next i
Unload Me
Ainsi je souhaites appliquer ce calcul uniquement aux valeurs selectionner dans ma list box qui match avec les valeurs situe en colonne B
Pouvez vous m'aider svp
Tu n'as pas besoin de déclarer les plages A, C,D, etc.
Tu peux rechercher la cellule correspondant à l'éléments de la liste :
Set C=B.Find(Me.ListBox1.List(i), , xlValues, xlWhole)
puis effectuer les calculs avec cette cellule de référence.
C.offset(,-1)=C.offset(,2).Value+C.offset(,3).Value+C.offset(,4).Value
A+