XL 2016 Lier combobox et listbox

baumer

XLDnaute Nouveau
Bonjour,

pour un projet je dois faire un code de gestion de dettes. Pour cela j'ai créé une liste déroulante avec le nom des personnes, puis je calcule la dette que devrait avoir la personne. et je souhaiterai que suivant le nom choisi dans la combobox, la case de mon excel en face du nom de la personne en question se mette à jour avec la nouvelle dette calculée.
Mon projet est pour demain.. si quelqu'un pouvais m'aider.. merci.
J'ai mis la partie du userform en entier désolé si c'est long mais je préfère que vous ayez tout pour m'aider..

VB:
Option Explicit
Dim ws As Worksheet
Dim ligne As Integer
Dim j As Integer



Private Sub CommandButton1_Click()

Interdits.ListBox1.Clear

    Dim i As Integer
    For i = 3 To 34
        If Cells(i, 3).Value > 10 Then
        Interdits.ListBox1.AddItem Cells(i, 2).Value
   
    End If
Next
    For i = 37 To 67
        If Cells(i, 3).Value > 10 Then
        Interdits.ListBox1.AddItem Cells(i, 2).Value
   
    End If
   
Next
    For i = 71 To 94
        If Cells(i, 3).Value > 10 Then
        Interdits.ListBox1.AddItem Cells(i, 2).Value
   
    End If
Next
Dettes.Hide
Interdits.Show
End Sub


Private Sub tb20_Change()
Call checkall
'tbt20.Value = tb20.Value * 0.2
'Call calcul


End Sub


Private Sub tb30_Change()

'tbt30.Value = tb30.Value * 0.3
'Call calcul
Call checkall
End Sub

Private Sub tb50_Change()
'tbt50.Value = tb50.Value * 0.5
'Call calcul
Call checkall
End Sub



Private Sub tb70_Change()
Call checkall
'tbt70.Value = tb70.Value * 0.7
'Call calcul
'Call checkall
End Sub
Private Sub UserForm_Initialize()


tb20.Value = 0
tb30.Value = 0
tb50.Value = 0
tb70.Value = 0
Tbdancien.Value = 0

    'initialisation des variables
    ligne = 3
    'On realise une boucle qui va charger les noms
    Do While Cells(ligne, 2).Value <> "" 'Tant qu'il y a des valeurs on continu
   
        Dettes.ComboBox1.AddItem Cells(ligne, 2).Value
        ligne = ligne + 1 ' on incremente de 1
       
    Loop
   
    ligne = 37 'on reprend ligne 37 car il y a un blanc entre les noms pour impression
   
    Do While Cells(ligne, 2).Value <> "" 'Tant qu'il y a des valeurs on contnu
   
        Dettes.ComboBox1.AddItem Cells(ligne, 2).Value
        ligne = ligne + 1 ' on incremente de 1
    Loop

    ligne = 71
   
    Do While Cells(ligne, 2).Value <> "" 'Tant qu'il y a des valeurs on contnu
   
        Dettes.ComboBox1.AddItem Cells(ligne, 2).Value
        ligne = ligne + 1 ' on incremente de 1
    Loop



End Sub


Private Sub tbdancien_Change()
' text box contenant l'ancienne dette
Call checkall

End Sub

Private Sub tbdnew_Change()
'text box contenant la nouvelle dette

End Sub


Sub calcul()
   
    Dim u20 As Long
    Dim u30 As Long
    Dim u50 As Long
    Dim u70 As Long

   
   
u20 = CInt(tb20.Value)
u30 = CInt(tb30.Value)
u50 = CInt(tb50.Value)
u70 = CInt(tb70.Value)

   
   
tbt20.Value = u20 * 0.2
tbt30.Value = u30 * 0.3
tbt50.Value = u50 * 0.5
tbt70.Value = u70 * 0.7
tbdnew.Value = 1 * Tbdancien.Value + tbt20.Value + 1 * tbt30.Value + tbt50.Value + tbt70.Value

End Sub

Sub checkall()
Dim res As Boolean
res = check(tb20, True)
res = res And check(tb30, True)
res = res And check(tb50, True)
res = res And check(tb70, True)
res = res And check(Tbdancien)

If Not res Then
    tbdnew.Value = ""
    tbt20.Value = ""
    tbt30.Value = ""
    tbt50.Value = ""
    tbt70.Value = ""

    Else
        Call calcul
    End If
End Sub

Function check(obj As MSForms.TextBox, Optional negatif As Boolean = False) As Boolean
    Dim val As Integer
   
    On Error GoTo traiteErreur
    val = CInt(obj.Value)
    negatif = CInt(obj.Value)
    On Error GoTo 0
   
    If val = 1245987.2 And negatif > 0 Then ' on choisis une valeur qui peut etre difficilement utilisé par l'utilisateur
        check = False
        obj.BackColor = RGB(255, 200, 200)
       obj.ControlTipText = "La valeur doit être non nulle"
    Else
       check = True
       obj.BackColor = RGB(255, 255, 255)
       obj.ControlTipText = ""
    End If
       
    Exit Function
traiteErreur:
    check = False
    obj.BackColor = RGB(255, 200, 200)
    obj.ControlTipText = "La valeur doit être un entier valide"
End Function
 

Dranreb

XLDnaute Barbatruc
Vous ne devriez pas mettre de répétition des titres c'est gênant pour le traitement: vous ne pouvez pas déduire la ligne dans la feuille de ComboBox1.ListIndex.
Ça se définit à la mise en page, les lignes à répéter sur chaque page.
 

Statistiques des forums

Discussions
312 033
Messages
2 084 803
Membres
102 672
dernier inscrit
gemo911