Griser combobox en fonction de Textbox

Fermé
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 - Modifié par pijaku le 30/04/2015 à 12:10
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 2 mai 2015 à 22:51
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
A voir également:

6 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
Modifié par crapoulou le 30/04/2015 à 17:38
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
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2
30 avril 2015 à 12:11
merci pour cette réponse rapide.
Cela fonctionne quand je mets "A" mais quand je l'enlève la combobox reste bloquée...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 avril 2015 à 14:37
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
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
30 avril 2015 à 16:28
Merci Gbinforme,

Dernière question :
Quel code pour écrire "si textbox1 = A ou B ou C"
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023
30 avril 2015 à 16:33
Je crois que tu as tout ce dont tu as besoin non?
0
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2
30 avril 2015 à 16:37
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 avril 2015 à 16:40
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
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2
30 avril 2015 à 16:49
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
30 avril 2015 à 19:01
Regarde du côté de Or.
Essaye :
If TextBox1 = "A" Or TextBox1 = "B" ...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
Modifié par gbinforme le 30/04/2015 à 20:55
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2
1 mai 2015 à 12:50
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 685
2 mai 2015 à 22:51
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
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2
1 mai 2015 à 13:23
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
2 mai 2015 à 09:49
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
Modifié par pijaku le 2/05/2015 à 09:51
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
romanza Messages postés 250 Date d'inscription samedi 27 janvier 2007 Statut Membre Dernière intervention 10 avril 2023 2 > pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024
2 mai 2015 à 15:35
Merci pijaku,

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