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. 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
  2. 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
  3. 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
  4. http://www.cijoint.fr/cjlink.php?file=cj200909/cij8Ji2Wlo.xls

    0
    1. Modérateur
      Dans quel userform et quelles combo sont concernées?
      0
  5. 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
  6. 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
  7. 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