Visual Basic

Résolu
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

--
Thor tue
Configuration: ...

7 réponses

  1. Modérateur
    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

    0
    1. Comment mettre la combobox 2 cachée? Et comment la rendre visible pour une réponse et cachée pour une autre réponse?
      0
      1. Modérateur
        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

        0
    2. Ca ne marche pas, la combobox reste apparente lorsque j'active la macro qui affiche la userform
      0
      1. Modérateur
        Peux tu nous joindre ton fichier (ou un exemple) ici
        0
    3. http://www.cijoint.fr/cjlink.php?file=cj200909/cij8Ji2Wlo.xls

      0
      1. Modérateur
        Dans quel userform et quelles combo sont concernées?
        0
    4. 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"
      0
      1. Modérateur
        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...
        @+
        0
    5. 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
      0
      1. Modérateur
        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
        0
    6. 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?
      0
      1. Modérateur
        Bizarre, je n'ai pas cela chez moi. Bon pas important.
        Tu peux passer ta cellule au format "nombre" comme ceci :
        Range("A12").Select
        Selection.NumberFormat = "0"
        0