IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Modifications, Affichage ou non de Liste Déroulante ActiveX dans un UserForm [WD-2010]


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Modifications, Affichage ou non de Liste Déroulante ActiveX dans un UserForm
    Bonjour,

    En m'appuyant sur les Tuto d'Heureuxoli (merci à lui), j'ai édité quelques lignes VBA me permettant dans un UserForm d'Afficher ou Masquer des Listes Déroulantes ActiveX suivant les choix faits par l'utilisateur.

    J'y suis parvenu avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    Private Sub UserForm_Initialize()
     
        'Création de la liste des valeurs de la ComboBox1
        ComboBox1.List = Array("Valeur1", _
        "Valeur2", _
        "Valeur3", _
        "Valeur4", _
        "Valeur5")
     
    End Sub
     
    Sub ComboBox1_Change()
     
    Dim 1 As String, 2 As String, 3 As String
     
    'Récupération de la valeur des ComboBox1, ComboBox2 et ComboBox3
    1 = ComboBox1.Value
    2 = ComboBox2.Value
    3 = ComboBox3.Value
     
    'Nettoyage des listes ComboBox2 et ComboBox3
    ComboBox2.Clear
    ComboBox3.Clear
     
    'Ajout des valeurs ComboBox2 en fonction de la ComboBox1
    Select Case 1
    Case "Valeur1": _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur2" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur3" _
     
        'Affichage de la liste du ComboBox2
        ComboBox2.Visible = True
     
        'Modification de la liste du ComboBox2
        ComboBox2.List = Array("ValeurA", _
        "ValeurB", _
        "ValeurC", _
        "ValeurD")
     
        'Ajout du ComboBox3 en fonction du ComboBox2
        Select Case 2
     
        Case "ValeurA": _
     
            'Liste ComboBox3 Masquée
            ComboBox3.Visible = False
     
        Case "ValeurB": _
     
            'Liste ComboBox3 Masquée
            ComboBox3.Visible = False
     
        Case "ValeurC": _
     
            'Affichage de la liste du ComboBox3
            ComboBox3.Visible = True
     
            'Modification de la liste du ComboBox3
            ComboBox3.List = Array("ValeurC1", _
            " ValeurC2", _
            " ValeurC3")
     
        End Select
     
     
        Case "ValeurD": _
     
            'Liste ComboBox3 Masquée
            ComboBox3.Visible = False
     
    Case "Valeur4" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur5" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    End Select
     
    End Sub
    Cela fonctionne correctement de la liste ComboBox1 à la ComboBox2, mais je n'y arrive de la ComboBox2 à la 3.
    Ce que je voudrais faire :
    Si le choix de la ComboBox1 est l'une des valeurs : 1, 2, 4 ou 5 - les ComboBox2 et ComboBox3 sont Masquées (visible = False)
    Si le choix de la ComboBox1 est la valeur 3, on affiche la ComboBox2 avec la liste des valeurs A, B, C, D ... Jusque là pas de problème, ça marche.
    Après j'ai essayé de créé une "Sub ComboBox2_Change" imbriquée dans les "case", mais ça me dit que le nom est ambiguee.
    Et en récréant un Select Case cela ne fonctionne pas.

    Ce que je voudrais faire (dans le cas de la valeur 3 dans la ComboBox1):
    Si le choix de la ComboBox2 est l'une des valeurs : A, B ou D - la ComboBox3 est Masquée (visible = False)
    Si le choix de la ComboBox2 est la valeur C, on affiche la ComboBox3 avec la liste des valeurs C1, C2, C3 ...

    Je ne suis peut être pas très clair, n'hésitez pas à me faire préciser des choses.

    Et je remercie d'avance ceux qui pourront m'aider.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oups, c'était tout bête ...
    Voilà le bon code ... Pardon d'avoir posté "pour rien"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    Private Sub UserForm_Initialize()
     
        'Création de la liste des valeurs de la ComboBox1
        ComboBox1.List = Array("Valeur1", _
        "Valeur2", _
        "Valeur3", _
        "Valeur4", _
        "Valeur5")
     
    End Sub
     
    Sub ComboBox1_Change()
     
    Dim 1 As String
     
    'Récupération de la valeur du ComboBox1
    1 = ComboBox1.Value
     
    'Nettoyage des listes ComboBox2 et ComboBox3
    ComboBox2.Clear
    ComboBox3.Clear
     
    'Ajout des valeurs ComboBox2 en fonction de la ComboBox1
    Select Case 1
    Case "Valeur1": _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur2" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur3" _
     
        'Affichage de la liste du ComboBox2
        ComboBox2.Visible = True
     
        'Modification de la liste du ComboBox2
        ComboBox2.List = Array("ValeurA", _
        "ValeurB", _
        "ValeurC", _
        "ValeurD")
     
    Case "Valeur4" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    Case "Valeur5" _
     
        'Listes ComboBox2 et ComboBox3 Masquées
        ComboBox2.Visible = False
        ComboBox3.Visible = False
     
    End Select
     
    End Sub
     
     
     
     
    Sub ComboBox2_Change()
     
    Dim 2 As String, 3 As String
     
    'Récupération de la valeur des ComboBox2 et ComboBox3
    2 = ComboBox2.Value
    3 = ComboBox3.Value
     
    'Nettoyage des listes ComboBox2 et ComboBox3
    ComboBox2.Clear
    ComboBox3.Clear
     
     
      ComboBox3.Visible = False
     
        'Ajout du ComboBox3 en fonction du ComboBox2
        Select Case 2
     
        Case "ValeurA": _
     
            'Liste ComboBox3 Masquée
            ComboBox3.Visible = False
     
        Case "ValeurB": _
     
            'Liste ComboBox3 Masquée
            ComboBox3.Visible = False
     
        Case "ValeurC": _
     
            'Affichage de la liste du ComboBox3
            ComboBox3.Visible = True
     
            'Modification de la liste du ComboBox3
            ComboBox3.List = Array("ValeurC1", _
            " ValeurC2", _
            " ValeurC3")
     
        End Select
     
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Validation de données
    Bonjour,

    Je reviens vers vous pour l'exploitation des "résultats"/choix des utilisateurs.
    J'arrive bien à écrire dans un signet les résultats, mais j'ai mis un Bouton OK et je voudrais que mon UserForm ne se ferme que si la totalité des champs accessibles sont remplis (avec le souci que j'ai deux ComboBox la 2 et la 3, qui ne s'affichent que dans certains cas).

    Bref y-a-t-il moyen de vérifier que tous les champs sont remplis ... j'ai essayé avec des If And Or, mais j'ai dû me planter !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     
    Private Sub BoutonOK_Click()
     
    Dim UserX As String
     
    If TextBox1.Value = "" Or TextBox2.Value = "" Then
     
        MsgBox "Veuillez préciser votre TextBox1 et votre TextBox2"
     
        Else
     
        ActiveDocument.Bookmarks("User1").Range.Text = TextBox1.Value & " " & TextBox2.Value
     
        End If
     
    If ComboBox1.Value = "" And ComboBox2.Visible = False Then
     
        MsgBox "Veuillez préciser votre ComboBox1"
     
        Else
     
            If ComboBox1.Value <> "" And ComboBox2.Visible = True Then
     
                If ComboBox2.Value = "" And ComboBox3.Visible = False Then
     
                MsgBox "Veuillez préciser votre ComboBox2"
     
                Else
     
                    If ComboBox2.Value = "" And ComboBox3.Visible = True Then
     
                        If ComboBox3.Value = "" Then
     
                        MsgBox "Veuillez préciser votre ComboBox3"
     
                        Else
     
                             UserX = ComboBox1.Value
                             ActiveDocument.Bookmarks("User2").Range.Text = Left(UserX, InStr(1, UserX, " ")) & "/"
     
                        End If
                    End If
                End If
            End If
    End If
     
    UserForm.Hide
     
    End Sub

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    ça devient du code spaghetti, je pense qu'avec une exécution pas à pas, tu devrais pouvoir déterminer ce qui coince.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Code spaghetti = "bordélique" ?

    J'avoue ne pas savoir faire autrement qu'avec des "Si", c'est certainement pas la meilleure solution, mais je ne sais pas testé autrement si un choix a été fait dans les menus déroulants ...

    Pour le pas à pas ... je n'y arrive pas (désolé pour la boulet'itude)

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Pour le pas à pas, tu place un point d'arrêt au début de ta procédure et avec F8, tu l'exécutes ligne par ligne.
    En plaçant le curseur de la souris sur chaque variable tu peux voir ce qu'elle contient.
    Tu peux aussi utliser l'outil qui affiche le contenu de tes variables.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci je lance tout ça.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'essaye d'effacer les textes écrits dans les signets sans succès.
    Je n'arrive à effacer (avec Delete) que le premier caractère.

    J'ai essayé avec ton code .Start et .End mais cela ne fonctionne pas
    Je devrais pouvoir Selectionner tout le texte et le supprimer, non ?

  9. #9
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Tu dis que ton code ne fonctionne pas, mais avant de savoir si il efface le contenu d'un signet, il faut savoir si les test logiques sont corrects.

    Il faut procéder une étape à la fois.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Oui, grace à tes explication j'ai réussit à corriger certaines erreurs.
    J'ai amélioré les tests logiques.

    En fait, c'est pour les boutons OK et Annuler (validation sous réserve de controle et remise à zéro) que je galère.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Responsable des études
    Inscrit en
    Avril 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Avril 2014
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci.
    Tout roule.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/11/2008, 15h09
  2. Réponses: 1
    Dernier message: 05/09/2008, 12h56
  3. Affichage des flèches des listes déroulantes
    Par willyol3 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/04/2008, 16h25
  4. Modification des valeurs d'une liste déroulante
    Par edogawa dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 29/01/2008, 21h12
  5. [Tableaux] affichage valeur d'une liste déroulante
    Par Henry9 dans le forum Langage
    Réponses: 3
    Dernier message: 23/09/2006, 21h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo