XL 2010 Sélectionner un TextBox sur une feuille depuis un ComboBox

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Sur la feuille il y a un ComboBox. À côté de celui-ci un TextBox.
Je choisis un item dans le ComboBox et je voudrais, sitôt l'item choisi, sélectionner le TextBox pour y entrer une donnée. Comment s'y prendre ?
J'ai bien essayé, dans la procédure du ComboBox, TextBox.SetFocus, TextBox.Select... rien ne marche, plantage à chaque fois.
 

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Merci pour ta réponse. Je viens d'essayer et ça plante.
La macro marche très bien, mais elle achoppe là.
VB:
Sub ChangeItem(ComboName$)
'Quand on change d'item dans la liste du ComboBox, le pourcentage s'annule et le CheckBox est décoché s'il l'était
'Magic_Doctor

    Dim suf As Byte, obj As Object, i As Byte, ad#
    
    suf = ExtractNumber(ComboName)                                          'suffixe du ComboBox
    Set obj = ActiveSheet.OLEObjects("TextBoxPP" & suf).Object              'TextBox "TextBoxPP"
    obj.Value = Format(0, "##,##0.00""%""")                                 'affiche 0 + formatage (--> 0,00%)
    
    
    
    Worksheets("Données").obj.Activate                                      'ÇA PLANTE ICI
    
    
    
    Set obj = ActiveSheet.OLEObjects("CheckBoxPP" & suf).Object             'CheckBox "CheckBoxPP"
    If obj Then                                                             'le CheckBox correspondant au ComboBox est coché
        obj = 0                                                             'le CheckBox est décoché
        CheckSolvants = CheckSolvants - 1                                   'et hop ! 1 solvant checké en moins
        pourcents(suf) = 0                                                  'le pourcentage sera forcément 0 dans le tableau dynamique "pourcents()"
        If CheckSolvants > 0 Then
            For i = 1 To NbSolvants + 1                                     '(Base 0)
                Set obj = ActiveSheet.OLEObjects("CheckBoxPP" & i).Object   'CheckBox "CheckBoxPP"
                If obj Then ad = ad + pourcents(i)                          'repérage des CheckBox toujours cochés et addition de leurs pourcentages
            Next
            Set obj = ActiveSheet.OLEObjects("TextBox_AddPourcent").Object  'TextBox "TextBox_AddPourcent"
            obj.Value = Format(ad, "##,##0.00""%""")                        'le TextBox "TextBox_AddPourcent" affiche la somme de tous les pourcentages toujours checkés + mise en forme (suffixe "%")
        End If
    End If
End Sub
Où me suis-je encore foutu dedans ?
 

Magic_Doctor

XLDnaute Barbatruc
J'ai réussi à régler le problème :
VB:
Sub ChangeItem(ComboName$)
'Quand on change d'item dans la liste du ComboBox, le pourcentage s'annule dans le TextBox et le CheckBox est décoché s'il l'était

    Dim suf As Byte, tb As MSForms.TextBox, cb As Object, i As Byte, ad As Double
    
    suf = ExtractNumber(ComboName)                                          'suffixe du ComboBox
    Set tb = ActiveSheet.OLEObjects("TextBoxPP" & suf).Object               'TextBox "TextBoxPP"
    tb.Value = Format(0, "##,##0.00""%""")                                  'affiche 0 + formatage (--> 0,00%)
    
    tb.Activate
    
    Set cb = ActiveSheet.OLEObjects("CheckBoxPP" & suf).Object              'CheckBox "CheckBoxPP"
    If cb Then                                                              'le CheckBox correspondant au ComboBox est coché
        cb = 0                                                              'le CheckBox est décoché
        CheckSolvants = CheckSolvants - 1                                   'et hop ! 1 solvant checké en moins
        pourcents(suf) = 0                                                  'le pourcentage sera forcément 0 dans le tableau dynamique "pourcents()"
        If CheckSolvants > 0 Then
            For i = 1 To NbSolvants + 1                                     '(Base 0)
                Set cb = ActiveSheet.OLEObjects("CheckBoxPP" & i).Object    'CheckBox "CheckBoxPP"
                If cb Then ad = ad + pourcents(i)                           'repérage des CheckBox toujours cochés et addition de leurs pourcentages
            Next
            Set tb = ActiveSheet.OLEObjects("TextBox_AddPourcent").Object   'TextBox "TextBox_AddPourcent"
            tb.Value = Format(ad, "##,##0.00""%""")                         'le TextBox "TextBox_AddPourcent" affiche la somme de tous les pourcentages toujours checkés + mise en forme (suffixe "%")
        End If
    End If
End Sub
Le problème, tel que je l'avais posé, est donc maintenant résolu, mais je n'attendais pas vraiment ce résultat. En fait, ce que je voulais réellement obtenir, c'est que le contenu du TextBox soit surligné, de telle sorte qu'il ne suffirait plus qu'à entrer directement un nouveau pourcentage, comme le montre l'image jointe :

EXEMPLE.jpg


Est-ce possible ?
 

Magic_Doctor

XLDnaute Barbatruc
Version finale, un peu plus "propre".
VB:
Sub ChangeItem(ComboName$)
'Quand on change d'item dans la liste du ComboBox, le pourcentage s'annule dans le TextBox et le CheckBox est décoché s'il l'était

    Dim suf As Byte, cb As MSForms.CheckBox, tb As MSForms.TextBox, i As Byte, ad As Double
    
    suf = ExtractNumber(ComboName)                                          'suffixe du ComboBox
    Set cb = ActiveSheet.OLEObjects("CheckBoxPP" & suf).Object              'CheckBox "CheckBoxPP"
    If cb Then                                                              'le CheckBox correspondant au ComboBox est coché
        cb = 0                                                              'le CheckBox est décoché
        CheckSolvants = CheckSolvants - 1                                   'et hop ! 1 solvant checké en moins
        pourcents(suf) = 0                                                  'le pourcentage sera forcément 0 dans le tableau dynamique "pourcents()"
        If CheckSolvants > 0 Then                                           'il y a un ou des TextBox checkés
            For i = 1 To NbSolvants + 1                                     '(Base 0)
                Set cb = ActiveSheet.OLEObjects("CheckBoxPP" & i).Object    'CheckBox "CheckBoxPP"
                If cb Then ad = ad + pourcents(i)                           'repérage des CheckBox toujours cochés et addition de leurs pourcentages
            Next
            Set tb = ActiveSheet.OLEObjects("TextBox_AddPourcent").Object   'TextBox "TextBox_AddPourcent"
            tb.Value = Format(ad, "##,##0.00""%""")                         'le TextBox "TextBox_AddPourcent" affiche la somme de tous les pourcentages toujours checkés + mise en forme (suffixe "%")
        End If
    End If
    
    'Résultat, formatage et surlignage du TextBox "TextBoxPP" pour une saisie rapide
    Set tb = ActiveSheet.OLEObjects("TextBoxPP" & suf).Object               'TextBox "TextBoxPP"
    With tb
        .Value = Format(0, "##,##0.00""%""")                                'affiche 0 + formatage (--> 0,00%)
        .Activate                                                           '|
        .SelStart = 0                                                       '| SURLIGNAGE
        .SelLength = Len(tb)                                                '|
    End With
End Sub
VB:
Function ExtractNumber#(Txt As String, Optional n As Byte = 1)
'*************************************************************
'Renvoie un nombre contenu dans une chaîne
'job75
'*************************************************************
'- txt : une chaîne contenant un ou plusieurs nombres
'- n   : numéro d'ordre du nombre recherché. Si omis, le 1er
'Ex : Combo208  -33,15 romina4 | n = 1 --> 208
'                                n = 2 --> -33,15
'                                n = 3 --> 4

    Dim i%, t As String, u As String, s
    
    Txt = Replace(Txt, ",", ".")
    For i = 1 To Len(Txt)
        t = Mid(Txt, i, 1): u = Mid(Txt, i, 2)
        If t <> "." And Not (t Like "#" Or u Like "-#") Then Txt = Application.Replace(Txt, i, 1, " ")
    Next
    s = Split(Application.Trim(Txt))
    If n - 1 > UBound(s) Then ExtractNumber = "" Else ExtractNumber = Val(s(n - 1))
End Function
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 535
dernier inscrit
moimeme1