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

Macros et VBA Excel Discussion :

Selection par defaut dans menu deroulant combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 18
    Par défaut Selection par defaut dans menu deroulant combobox
    Bonjour,

    Aprés plusieurs recherches et essais je me retrouve dans une impasse un peu ennuyeuse .... D’où ma demande d'aide .

    j'ai un menu déroulant qui me déclanche des macros et je souhaiterais qu’après une sélection sur le menu ,ce dernier reviennent sur un choix par défaut.
    J'ai essayé par les propriété du menu, en essayant de rappeler dans le menu la valeur "Choix", mais rien n'y fait,
    après une sélection le menu reste sur la dernière valeur sélectionné

    Comment peut-on faire ?
    Voici le Code du Menu

    Merci d'avance.

    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
    Private Sub ListUp_Change()
    Const Source As String = "ComboBox barre d'outils Contrôle"
     
        Select Case Me.ListUp.Value
        Case "Acceuil": Vers_Acceuil Source
        Case "VERROUILLAGE": Blocage_Deblocage Source
        Case "DEVERROUILLAGE": Deverrouiller Source
        Case "MISE A JOUR CHEVAUX": MAJ_Chevaux Source
        Case "AFFICHER TOUTES LES COLONNES": Affiche_Tout Source
        Case "AFFICHER SEMAINE REPRISES": Affiche_Reprises Source
        Case "AFFICHER SEMAINE STAGES": AFFICHE_STAGES Source
        Case "DEPLACER SEMAINE EN DERNIER": Deplacer_Feuilles_dernier Source
        Case "AIDE": Vers_Aide_Sxx Source
        Case "xxx": Vers_Aide_Sxx Source
        Case "CHOIX": Vers_Aide_Sxx Source
        Case "QUITTER": Enregistrer_Quitter Source
     
     
        End Select
    End Sub

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Deux propriétés permettent de sélectionner un élément de la liste d'un ComboBox
    • ListIndex
    • Value

    Exemple avec Value (dépend de la valeur de la propriété BoundCoulumn qui par défaut est à 1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       With Me.ComboBox1
       .List = Feuil1.ListObjects(1).DataBodyRange.Value
       .Value = "Samedi"
       End With
    Exemple avec ListIndex
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       With Me.ComboBox1
       .List = Feuil1.ListObjects(1).DataBodyRange.Value
       .ListIndex = 5
       End With
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 18
    Par défaut
    Merci pour ta réponse
    mais j'essaie la encore sans succès.

    Peux-tu m’éclairer encore plus a partir du code que j'ai fourni?

  4. #4
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Septembre 2018
    Messages : 18
    Par défaut
    Merci pour le code, j'y vois deja bien plus clair.
    Et en plus ca fonctionne nickel

    de Plus la 2eme version et trés bien expliqué pour un novice comme moi,
    me reste plus qu'a l'essayer en essayant de comprendre ce que je fais .

    Grand merci a toi et a toute la team de "developpez.net"

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    pour créer un menu (d'action) avec une combo il te suffit de le remettre a listindex-1 et de l'excepter dans le select case par un if global
    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
    Private Sub ListUp_Change()
        Const Source As String = "ComboBox barre d'outils Contrôle"
        With ListUp
            If .ListIndex >= 0 Then
                Select Case .Value
                Case "Acceuil": Vers_Acceuil Source
                Case "VERROUILLAGE": Blocage_Deblocage Source
                Case "DEVERROUILLAGE": Deverrouiller Source
                Case "MISE A JOUR CHEVAUX": MAJ_Chevaux Source
                Case "AFFICHER TOUTES LES COLONNES": Affiche_Tout Source
                Case "AFFICHER SEMAINE REPRISES": Affiche_Reprises Source
                Case "AFFICHER SEMAINE STAGES": AFFICHE_STAGES Source
                Case "DEPLACER SEMAINE EN DERNIER": Deplacer_Feuilles_dernier Source
                Case "AIDE": Vers_Aide_Sxx Source
                Case "xxx": Vers_Aide_Sxx Source
                Case "CHOIX": Vers_Aide_Sxx Source
                Case "QUITTER": Enregistrer_Quitter Source
                End Select
            End If
            .ListIndex = -1
        End With
    End Sub
    cela dit c'est sensé te simplifier la vie et toi tu utilise une expression pour la faire correspondre a une autre
    perso j'aurais mis les vrai nom de je suppose que ce sont des subs qui sont appelées avec l'argument "source"

    voila comment j'aurais fait ton menu

    dans le UserForm activate je rentre les items du menu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_Activate()
        With ListUp
            .List = Array("Acceuil", "Blocage_Deblocage", "Deverrouiller", "MAJ_Chevaux", "Affiche_Tout", "Affiche_Reprises", "AFFICHE_STAGES", "Deplacer_Feuilles_dernier" _
                  , "Vers_xxx_Sxx", "Vers_Aide_Sxx", "Vers_choix_Sxx", "Enregistrer_Quitter")
        End With
    End Sub
    l'avantage de l'évènement click de la combo ne se déclenché que si le click est fait sur un item ben..bingo

    l'evenement click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ListUp_Click()
        source = "toto"'j'ai mis ca pour les tests 
        With ListUp
            If .ListIndex >= 0 Then Application.Run .List(.ListIndex), source
            .ListIndex = -1
        End With
    End Sub
    il y a un inconveniant tout de meme c'est que cet evenement peut etre declenché quand on ajoute ou modifie l'index ou une valeur
    pour cela rien de plus facile
    on ajoute le control que c'est bien la listup l'activecontrol du UserForm

    comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ListUp_Click()
        If ActiveControl.Name = "ListUp" Then
            source = "toto"
            With ListUp
                If .ListIndex >= 0 Then Application.Run .List(.ListIndex), source
                .ListIndex = -1
            End With
        End If
    End Sub
    voila ni plus ni moins tu a ton menu en 3/4 lignes de code
    pour les subs appelée comme je ne les ai pas les tiennes je les ai fait pour tester avec un simple msgbox
    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
     
    Sub Acceuil(source)
    MsgBox source
    End Sub
    '
    Sub Blocage_Deblocage(source)
    MsgBox source
    End Sub
    '
    Sub Deverrouiller(source)
    MsgBox source
    End Sub
    '
    Sub MAJ_Chevaux(source)
    MsgBox source
    End Sub
    '
    Sub Affiche_Tout(source)
    MsgBox source
    End Sub
    '
    Sub Affiche_Reprises(source)
    MsgBox source
    End Sub
    '
    Sub AFFICHE_STAGES(source)
    MsgBox source
    End Sub
    '
    Sub Deplacer_Feuilles_dernier(source)
    MsgBox source
    End Sub
    '
    Sub Vers_xxx_Sxx(source)
    MsgBox source
    End Sub
    '
    Sub Vers_Aide_Sxx(source)
    MsgBox source
    End Sub
    '
    Sub Vers_choix_Sxx(source)
    MsgBox source
    End Sub
    '
    Sub Enregistrer_Quitter(source)
    MsgBox source
    End Sub
    voila
    bonne route
    une petite dernière précision et/ou complément d'information
    l'utilisation de application.run n'est pas annodynne on peut très bien appeler une sub d'un autre classeur ou d'un xla(m) en le précisant bien sur
    j'ai tout dis
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    @Patrick: Ton code ne remet pas de valeur par défaut mais vide le combobox. Or, c'est quand même l'objet de la discussion!

    Voici un code qui affiche le choix par défaut après exécution de la macro. J'ai utilisé la colonne 1 d'un combobox à deux colonnes pour contenir le nom de la macro à utiliser. Il faut passer par une variable de userform (déclarée en haut du module du userform) pour neutraliser la remise à la valeur par défaut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Dim AlreadyClicked As Boolean
     
    Private Sub ComboBox1_Click()
      If Not AlreadyClicked Then
        AlreadyClicked = True
        Run ComboBox1.Column(1)
        ComboBox1.ListIndex = 0
      Else
        AlreadyClicked = False
      End If
    End Sub
    Cela étant dit, sur le plan ergonomique va se poser le problème suivant: Et si la personne veut le choix par défaut, comment va-t-elle faire? Car l'ouverture de la liste et le choix de la valeur déjà choisie ne lève ni l'évènement Click, ni l'évènement Change => Elle ne pourra donc jamais utiliser le choix par défaut. je précise d'ailleurs que ce problème n'est pas uniquement présent avec une remise sur une valeur par défaut. Si tu laisses le combobox sur le choix précédent, comment l'utilisateur va-t-il opérer pour relancer ce choix?

    Perso, je ne suis pas fan de cette ergonomie car ce n'est normalement pas le rôle d'un combobox d'activer une action. Il me semblerait plus judicieux de placer un bouton et de déclencher l'action sur le clic du bouton. Ca éviterait en plus de devoir passer par la variable de userform pour désactiver le retour au choix par défaut.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour pierre
    non je la vide pas je la met a index-1

    et oui je la met a -1 car justement j'ai entrevu les problèmes qu'un item par default pourrait causer a moins que ce soit simplement un titre au quel cas c'est pareil que le -1 mais un visuel sur un intitulé en plus mais la gestion se ferait de la mémé manière "if .listindex<>x then"
    un dérouler-> une sélection->remet a -1 pour la prochaine sélection qui pourrait être la même d'ailleurs
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

Discussions similaires

  1. Valeur par defaut dans select ?
    Par rimas2009 dans le forum Struts 2
    Réponses: 2
    Dernier message: 07/12/2010, 16h59
  2. Valeurs par defaut dans une ComboBox
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/12/2008, 14h26
  3. selection par defaut dans un GtkTreeView
    Par fantomas75010 dans le forum GTK+
    Réponses: 3
    Dernier message: 20/08/2008, 23h12
  4. Affichage par defaut dans combobox
    Par creale10 dans le forum IHM
    Réponses: 10
    Dernier message: 11/02/2006, 09h04
  5. Table par defaut dans un select sur 2 tables
    Par gibee dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/10/2005, 21h05

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