Visual Basic

Résolu
Farfadet88 Messages postés 19 Date d'inscription   Statut Membre 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

--
Thor tue
Configuration: ...

7 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  2. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  3. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    Ca ne marche pas, la combobox reste apparente lorsque j'active la macro qui affiche la userform
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Peux tu nous joindre ton fichier (ou un exemple) ici
      0
  4. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    http://www.cijoint.fr/cjlink.php?file=cj200909/cij8Ji2Wlo.xls

    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Dans quel userform et quelles combo sont concernées?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  7. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  8. Farfadet88 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   1 402
     
    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. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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