Visual Basic
Résolu
Farfadet88
Messages postés
7780
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Encore un petit souci de débutant.
Comment faire en sorte qu'une combobox n'apparaisse que quand une autre combobox n'est pas vide. Autrement dit, quand je sélectionne une valeur disponible dans la combobox1, la combobox 2 apparait sur la meme userform
Encore un petit souci de débutant.
Comment faire en sorte qu'une combobox n'apparaisse que quand une autre combobox n'est pas vide. Autrement dit, quand je sélectionne une valeur disponible dans la combobox1, la combobox 2 apparait sur la meme userform
A voir également:
- Msgbox vba
- Visual basic - Télécharger - Langages
- Visual basic editor - Télécharger - Langages
- Visual petanque - Télécharger - Sport
- Microsoft 365 basic - Accueil - Microsoft Office
- Visual c++ 2019 - Guide
7 réponses
Salut,
Lorsque la valeur de la combobox1 change faire apparaitre la combobox2 [sous entendu elle est masquée initialement]
Private Sub ComboBox1_Change()
ComboBox2.Visible = true
End Sub
Lorsque la valeur de la combobox1 change faire apparaitre la combobox2 [sous entendu elle est masquée initialement]
Private Sub ComboBox1_Change()
ComboBox2.Visible = true
End Sub
Comment mettre la combobox 2 cachée? Et comment la rendre visible pour une réponse et cachée pour une autre réponse?
Bonjour,
Supposons que tu ais créés un Userform appelé Userform1. Celui ci contenant 2 ComboBox (1 & 2).
Au chargement du UserForm1 afficher le combo1 (par défaut excel le fera) et masquer le combo2 :
Private Sub UserForm_Activate()
ComboBox2.Visible = False
End Sub
Pour l'afficher au changement du combo1 :
Private Sub ComboBox1_Change()
ComboBox2.Visible = True
End Sub
Supposons que tu ais créés un Userform appelé Userform1. Celui ci contenant 2 ComboBox (1 & 2).
Au chargement du UserForm1 afficher le combo1 (par défaut excel le fera) et masquer le combo2 :
Private Sub UserForm_Activate()
ComboBox2.Visible = False
End Sub
Pour l'afficher au changement du combo1 :
Private Sub ComboBox1_Change()
ComboBox2.Visible = True
End Sub
Ca ne marche pas, la combobox reste apparente lorsque j'active la macro qui affiche la userform
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans la userform3, je cherche à cacher les combobox 2 3 4 et 5 lorsque la combobox1 n'affiche rien ou "non". Je veux qu'elles apparaissent quand la combobox1 affihe "Oui"
Ton fichier ici.
Pour info, c'est exactement ce que je t'avais indiqué :
1- au chargement du Userform masquer les combobox :
Private Sub UserForm_Activate()
ComboBox2.Visible = False
ComboBox3.Visible = False
ComboBox4.Visible = False
ComboBox5.Visible = False
End Sub
2- au changement de choix du combobox1 faire apparaitre les combobox (en gras ci dessous) :
Private Sub ComboBox1_Change()
réponse = Me.ComboBox1.Value
Select Case réponse
Case "Oui"
Me.Label2.Caption = "blablabla"
ComboBox2.Visible = True
Me.Label3.Caption = "blablabla"
ComboBox3.Visible = True
Me.Label4.Caption = "blablabla"
ComboBox4.Visible = True
Me.Label5.Caption = "blablabla"
ComboBox5.Visible = True
Case "Non"
Me.Label2.Caption = ""
Me.Label3.Caption = ""
Me.Label4.Caption = ""
Me.Label5.Caption = ""
Case "Ne sais pas"
Me.Label2.Caption = ""
Me.Label3.Caption = ""
Me.Label4.Caption = ""
Me.Label5.Caption = ""
End Select
End Sub
Remarque : on aurait pu simplifier le tout puisque les "case" non et ne sais pas sont identiques, mais j'ai voulu conserver ton code pour simplifier la compréhension.
Bon courage et n'hésite pas, tu connais le chemin...
@+
Pour info, c'est exactement ce que je t'avais indiqué :
1- au chargement du Userform masquer les combobox :
Private Sub UserForm_Activate()
ComboBox2.Visible = False
ComboBox3.Visible = False
ComboBox4.Visible = False
ComboBox5.Visible = False
End Sub
2- au changement de choix du combobox1 faire apparaitre les combobox (en gras ci dessous) :
Private Sub ComboBox1_Change()
réponse = Me.ComboBox1.Value
Select Case réponse
Case "Oui"
Me.Label2.Caption = "blablabla"
ComboBox2.Visible = True
Me.Label3.Caption = "blablabla"
ComboBox3.Visible = True
Me.Label4.Caption = "blablabla"
ComboBox4.Visible = True
Me.Label5.Caption = "blablabla"
ComboBox5.Visible = True
Case "Non"
Me.Label2.Caption = ""
Me.Label3.Caption = ""
Me.Label4.Caption = ""
Me.Label5.Caption = ""
Case "Ne sais pas"
Me.Label2.Caption = ""
Me.Label3.Caption = ""
Me.Label4.Caption = ""
Me.Label5.Caption = ""
End Select
End Sub
Remarque : on aurait pu simplifier le tout puisque les "case" non et ne sais pas sont identiques, mais j'ai voulu conserver ton code pour simplifier la compréhension.
Bon courage et n'hésite pas, tu connais le chemin...
@+
Merci beaucoup ça fonctionne parfaitement, j'ai élargi l'astuce à d'autres macros.
J'ai encore deux questions et après je ne devrais plus avoir de problème.
1/ Comment faire pour afficher une msg box lorsque, au minimum, une des combobox visibles n'a pas été remplie?
2/ Est-il possible d'adapter la taille de la userform en fonction des combobox et label visibles? (réduire la hauteur ou l'augmenter quand la combobox apparait)
merci
J'ai encore deux questions et après je ne devrais plus avoir de problème.
1/ Comment faire pour afficher une msg box lorsque, au minimum, une des combobox visibles n'a pas été remplie?
2/ Est-il possible d'adapter la taille de la userform en fonction des combobox et label visibles? (réduire la hauteur ou l'augmenter quand la combobox apparait)
merci
Salut,
1- Dans ton cas, c'est facile car il n'y a que 5 combobox. Dans le cas ou il y en aurait eu plus il aurait fallu boucler sur toutes. ton code est facile :
Si combo1 = rien ou combo2 = rien etc combo5 = rien
alors : message
sortie de la fonction.
Ca se traduit en VBA Excel par :
If ComboBox1.Value = "" Or ComboBox2.Value = "" Or ComboBox3.Value = "" Or ComboBox4.Value = "" Or ComboBox5.Value = "" Then
MsgBox ("merci de compléter tous les champs")
Exit Sub
End If
2- Il faut imposer une hauteur à ton userform en fonction des "actions" faites par l'utilisateur :
- au chargement du userform hauteur = 46
- au changement du combo1 : hauteur = 81
- au changement du combo2 : hauteur = 110
etc
le code pour déterminer la hauteur d'un userform : (pour info je t'ai mis le code pour la largeur en commentaire)
With UserForm3
.Height = 46
'.Width = 288
End With
Je l'ai adapté sur ton userform3 ici
Pour info également, excel n'apprécie que moyennement les .select de vba. Donc :
Sheets("données").Select
ActiveSheet.Range(("C9").Select
ActiveCell = ComboBox1.Value
ActiveSheet.Range(("C10").Select
ActiveCell = ComboBox2.Value
peut être remplacé par :
Sheets("données").Select
[C9] = ComboBox1.Value
[C10] = ComboBox2.Value
1- Dans ton cas, c'est facile car il n'y a que 5 combobox. Dans le cas ou il y en aurait eu plus il aurait fallu boucler sur toutes. ton code est facile :
Si combo1 = rien ou combo2 = rien etc combo5 = rien
alors : message
sortie de la fonction.
Ca se traduit en VBA Excel par :
If ComboBox1.Value = "" Or ComboBox2.Value = "" Or ComboBox3.Value = "" Or ComboBox4.Value = "" Or ComboBox5.Value = "" Then
MsgBox ("merci de compléter tous les champs")
Exit Sub
End If
2- Il faut imposer une hauteur à ton userform en fonction des "actions" faites par l'utilisateur :
- au chargement du userform hauteur = 46
- au changement du combo1 : hauteur = 81
- au changement du combo2 : hauteur = 110
etc
le code pour déterminer la hauteur d'un userform : (pour info je t'ai mis le code pour la largeur en commentaire)
With UserForm3
.Height = 46
'.Width = 288
End With
Je l'ai adapté sur ton userform3 ici
Pour info également, excel n'apprécie que moyennement les .select de vba. Donc :
Sheets("données").Select
ActiveSheet.Range(("C9").Select
ActiveCell = ComboBox1.Value
ActiveSheet.Range(("C10").Select
ActiveCell = ComboBox2.Value
peut être remplacé par :
Sheets("données").Select
[C9] = ComboBox1.Value
[C10] = ComboBox2.Value
Ok merci.
Dernier petit bug de mon outil, j'ai créé une macro qui copie la valeur d'une textbox dans une case excel mais le souci est qu'elle la prends en compte en tant que texte et non en tant que nombre. Du coup tous mes calculs sont faussés. Comment faire pour qu'il détecte automatiquement cette case en tant que nombre?
Dernier petit bug de mon outil, j'ai créé une macro qui copie la valeur d'une textbox dans une case excel mais le souci est qu'elle la prends en compte en tant que texte et non en tant que nombre. Du coup tous mes calculs sont faussés. Comment faire pour qu'il détecte automatiquement cette case en tant que nombre?