Griser combobox en fonction de Textbox

Bonjour

Je souhaite qu'une combobox soit désactivée en fonction de la valeur d'une textbox. J'ai essayé ceci mais cela ne fonctionne pas :

Private Sub ComboBox1_Change()
  If TextBox1.Value = "A" Then
     ComboBox1.Enabled = False    
      End If
     
End Sub


Merci

6 réponses

  1. Contributeur
    Bonjour,

    Ce serait plutôt comme ceci :
    Private Sub TextBox1_Change()
    If TextBox1.Value = "A" Then
    ComboBox1.Enabled = False
    End If 


    Toujours zen
    La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer. Antoine de Saint-Exupéry
    0
    1. merci pour cette réponse rapide.
      Cela fonctionne quand je mets "A" mais quand je l'enlève la combobox reste bloquée...
      0
      1. Modérateur
        Bonjour,

        Salut gbinforme,

        Il te suffit d'ajouter un Else à ta condition If :
        Private Sub TextBox1_Change()
        If TextBox1.Value = "A" Then
            ComboBox1.Enabled = False
        Else
            ComboBox1.Enabled = True
        End If 
        End Sub


        Ou encore :
        Private Sub TextBox1_Change()
        If TextBox1.Value = "A" Then
            ComboBox1.Enabled = False
        ElseIf TextBox1.Value = "Ma grand mère" Then
            MsgBox "va cueillir des fraises"
        Else
            ComboBox1.Enabled = True
        End If 
        End Sub


        Mais d'une manière générale, l'événement Change est à utiliser avec parcimonie. En effet, il se déclenche à la saisie de chaque caractère dans le contrôle.
        Dans un tel cas de figure, je lui préfère l'événement Exit : à la sortie du textbox. En plus, cet événement bénéficie du paramètre Cancel pour annuler (empêcher) la sortie tant que la saisie n'est pas bonne.
        A tester :
        Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If TextBox1 = "" Then Cancel = True: Exit Sub
        If UCase(TextBox1.Value) = "A" Then
            ComboBox1.Enabled = False
            Cancel = True
            TextBox1 = ""
        ElseIf TextBox1.Value = "Ma grand mère" Then
            MsgBox "va cueillir des fraises"
        Else
            ComboBox1.Enabled = True
        End If
        End Sub
        0
      2. @pijakuMerci Gbinforme,

        Dernière question :
        Quel code pour écrire "si textbox1 = A ou B ou C"
        0
      3. Modérateur
        @romanzaJe crois que tu as tout ce dont tu as besoin non?
        0
    2. Merci pijaku mais
      je veux déclencher cette macro selon que textbox prend la valeur A, B ou C mais ça je ne sais pas l'écrire
      0
      1. Modérateur
        Si tu lis ma réponse, tu sais comment la déclencher si :
        - textbox = A
        ou si
        - textbox = Ma grand mère

        .....
        ça ne doit pas être beaucoup, beaucoup, beaucoup plus compliqué à adapter à textbox = A ou B ou C???
        Si?
        0
    3. Je me suis sans doute mal expliqué
      La combobox doit être desactivée si textbox prend la valeur A, B, ou C

      J'ai essayé Textbox1.Value("A","B","C") mais cela ne fonctionne pas
      0
      1. Modérateur
        Regarde du côté de Or.
        Essaye :
        If TextBox1 = "A" Or TextBox1 = "B" ...
        0
      2. Contributeur
        Bonsoir,

        @pijaku salut à toi : ce n'est pas simple de débuter... et ta grand mère n'a pas été comprise ;-)

        @romanza
        C'est bien de te lancer dans le langage VBA mais comme tout langage, il faut faire l'effort d'apprendre les rudiments : si tu vas dans un pays dont tu ne connais qu'une dizaine de mots et sans connaitre la syntaxe de la langue, cela va être très dur de te faire comprendre. Pour VBA il y a l'aide du logiciel qui fournit tout cela et il suffit de regarder au moins une fois avant de pouvoir y revenir.

        J'ai essayé Textbox1.Value("A","B","C")
        Cela ne fonctionne pas car ne n'est pas la syntaxe. Si tu veux l'écrire de cette façon emploie la fonction adaptée :
        If InStr(1, ",A,B,C", UCase(TextBox1.Value)) > 0 Then

        Ainsi si ta TextBox1 a la valeur d'une des lettres ton test sera validé.
        Tu peux regarder l'aide de la fonction "InStr" pour en comprendre le fonctionnement.
        0
    4. Salut gbinforme
      Je te remercie d'avoir pris du temps pour moi.
      Ça m'embête toujours qu'un forum mette les gens qui ne savent pas en position d'allégeance. Ça m'embête parce que le propre d'un forum c'est de faire avancer un peu plus vite le non initié que de le laisser aborder les premières leçons du VBA pour arriver au résultat escompté.
      Je passe par le forum parce que j'ai toujours pratiqué comme cela et que c'est ici que j'ai le mieux appris et ce, plus rapidement que de passer des heures à essayer de trouver dans la littérature la réponse à une question précise qui plus est sur ce langage. Avant de poser ma question sur le forum j'ai fouiné sur le net. J'ai réussi à mettre en place mon premier UserForm et quelques commandes qui fonctionnent mais je ne suis pas arrivé à tout faire.
      Alors je pose des questions directes et j'espère des réponses qui constitueront ma compétence en la matière et qui me serviront pour mes projets futurs.
      Ces projets sont des missions relatives à mon travail avec des dead line donc je n'ai pas forcémet le loisir de rester devant mon pc pendant des heures et paginer des moles d'informations surtout si au bout du compte
      Je n'ai que des bugs.
      Je suis sûr que dans mon domaine de compétence je pourrai vous en compter mais ma petite expérience de mec de plus de 50 balais m'a appris à ne pas faire trop le malin quand on sait mieux que les autres. Comme je pense que ta maîtrise du VBA fait que tu as dû emprunter un certain parcours scolaire, tu dois comprendre comme on a pu être saoulés par des profs qui se la jouaient et dont on a pu se foutre avec un doux sourire.
      Savoir aider c'est comprendre les autres et non pas aider tout en satisfaisant le nombril narcissique de son savoir.
      La formule que tu m'as léguée , je ne pouvais pas la sucer de mon pouce en démarrant le VBA. je ne t'apprendrai rien qu'en informatique le binaire est roi donc on sait ou on sait pas.
      Je te remercie vraiment pour ton aide et ne souhaite pas polémiquer car c'est parfois un peu trop souvent le propre des forums et réseaux sociaux et ça me gonfle.
      Mais comme le disait ma grand-mère : "Quand on attend après le postérieur d'un autre pour aller aux toilettes...
      0
      1. Contributeur
        Bonsoir romanza,

        Comme je pense que ta maîtrise du VBA fait que tu as dû emprunter un certain parcours scolaire
        Désolé mais tu as tout faux, j'ai appris en compulsant l'aide VBA qui est pratiquement exhaustive et en pratiquant les fonctions offertes. Lorsque tu veux utiliser un TextBox ou un ComboBox, si tu regardes l'aide, tu vas avoir toutes les propriétés et toutes les méthodes utilisables avec la syntaxe adéquate pour chaque objet et pour tout cela juste un F1 ! C'est pas beau ?
        Après chacun utilises les méthodes qu'il veut mais je te prie de croire que l'on va beaucoup plus vite avec l'aide microsoft pour comprendre la façon d'utiliser les objets ou les fonctions lorsque l'on fait l'effort de s'en servir..
        C'est dommage que la fonction que je t'ai fournie, et qui me semblait correspondre tout à fait à ton raisonnement pour empiler les choix , tu "ne pouvais pas la sucer de mon pouce" et je t'avais pourtant conseillé d'en regarder sa présentation dans l'aide : en aucune manière c'était une façon de te snober mais bien plutôt de t'ouvrir une porte sur quelque chose que tu faisais instinctivement sans avoir la syntaxe VBA pour le réaliser J'ai essayé Textbox1.Value("A","B","C") ce qui donne
        If InStr(1, ",A,B,C", UCase(TextBox1.Value)) > 0 Then
        assez proche me semble-t-il ? Non ?
        Si j'utilise cette fonction c'est quelle permet de rajouter autant de conditions que tu veux sans écrire de ligne supplémentaire. pijaku que je salue, t'as fourni d'autres méthodes pour le faire : c'est donc à toi de voir ce que tu veux utiliser.
        Je te souhaite de progresser pour venir nous remplacer : ce sera ma satisfaction si tu prends ma place !
        Bien cordialement.
        0
    5. Salut pijaku,
      Merci pour le tuyau. J'ai donc écris le code ci-dessous qui fonctionne.

      Private Sub TextBox1_Change()
      If TextBox1.Value = "A" Or TextBox1.Value = "B" Or TextBox1.Value = "C" Then
      ComboBox1.Enabled = True
      Else
      ComboBox1.Enabled = False
      End If
      If TextBox1.Value = "A" Or TextBox1.Value = "B" Or TextBox1.Value = "C" Then
      ComboBox1.Visible = True
      Else
      ComboBox1.Visible = False
      End If

      End Sub
      0
      1. Modérateur
        Salut,

        Essaye de rassembler les deux en un :
        Private Sub TextBox1_Change()
        If TextBox1.Value = "A" Or TextBox1.Value = "B" Or TextBox1.Value = "C" Then
            ComboBox1.Enabled = True
            ComboBox1.Visible = True
        Else
            ComboBox1.Enabled = False
            ComboBox1.Visible = False
        End If
        End Sub

        En effet, il n'est pas utile de faire deux fois le même test.
        0
      2. Modérateur
        Un autre essai après serait :
        Private Sub TextBox1_Change()
            ComboBox1.Enabled = (TextBox1 = "A" Or TextBox1 = "B" Or TextBox1 = "C")
            ComboBox1.Visible = (TextBox1 = "A" Or TextBox1 = "B" Or TextBox1 = "C")
        End Sub


        Tu peux le tenter pour le fun et revenir après si tu souhaites des explications
        0
      3. @pijakuMerci pijaku,

        Tes deux codes fonctionnent et sont vraiment plus light.
        J'ai compris la méthode.
        Bien à toi
        0