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 :

Forcer le choix dans une liste déroulante


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut Forcer le choix dans une liste déroulante
    Bonjour,

    Je souhaiterais savoir s'il est possible de choisir une valeur spécifique par défaut dans une liste déroulante.
    Mon problème est le suivant: j'ai une liste déroulante qui est alimentée par la zone A1:A100, à chaque fois que je sélectionne l'onglet ou se trouve cette liste la zone A1:A100 celle-ci est triée alphabétiquement, comme certaine cases sont parfois vide dans cette zone, les cases vides se retrouvent en haut de la liste:
    A1:
    A2:
    A3:
    A4: PRODUIT1
    A5: PRODUIT2
    ....
    S'il n'y a qu'une ou deux cases vides c'est gérable, par contre lorsqu'il y en a plusieurs cela devient contraignant car il faut descendre dans la liste déroulante avant de pouvoir apercevoir les premières valeurs.

    Est-il possible de forcer la liste déroulante à se positionner sur la première case non vide de la plage A1:A100 ou alors, lors du tri ne pas avoir les cases vides en premier ?

    Merci par avance de votre aide,

    Jarault

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Comment est triée ta colonne ?
    Une colonne triée par ordre alphabétique, tri croissant, les cellules vides se retrouvent en fin de liste
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set PLAGE = .Range("a1", .Range("a1").End(xlDown))
        Set PLAGE = PLAGE.Cells.SpecialCells(xlCellTypeVisible)
        With 'ta liste
        .Clear
        For Each cel In PLAGE
    'tes colonnes
          .AddItem cel(1, 0)
              .BoundColumn = 1
        Next cel
     
        End With
    Peut-etre !!!
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 66
    Points : 77
    Points
    77
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim base7 as string
     
        Zone_a_trier = Range("dep1").Address & ":" & Range("dixhuit").Offset(-1, 0).Address
        Range( Zone_a_trier ).Sort key1:=Range("dep1"), order1:=xlAscending
    dep1 est le nom de la cellule de départ et dixhuit celle de fin de liste
    Voila un code qui trie correctement les cellules, code donné par un des entraideurs.

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Ou mieux
    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
    Application.ScreenUpdating = False
    With sheets("feuil1") 
        If .AutoFilterMode Then
         .AutoFilterMode = False
        End If
        .Range("a1").AutoFilter
        .Range("a1").AutoFilter Field:=2, Criteria1:="*"
        Set PLAGE = .Range("a1", .Range("a1").End(xlDown))
        Set PLAGE = PLAGE.Cells.SpecialCells(xlCellTypeVisible)
        With ta listbox
        .Clear
        For Each cel In PLAGE
          .AddItem cel(1, 0)
             Next cel
     
        End With
    Selection.AutoFilter
    .Select
    If .AutoFilterMode Then
        .AutoFilterMode = False
        End If
    End With
    Application.ScreenUpdating = True
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par fring Voir le message
    Bonjour,

    Comment est triée ta colonne ?
    Une colonne triée par ordre alphabétique, tri croissant, les cellules vides se retrouvent en fin de liste

    La macro utilisée pour le tri est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub TriAlphabetique()
     
        Range("A1:A100").Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End Sub

  7. #7
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Teste le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TriAlphabetique()
        Range("A1:A" & Range("A65535").End(xlUp).Row).Sort Key1:=Range("A1"), _
        Order1:=xlAscending, Header:=xlGuess
    End Sub
    La colonne est trièe et les cellules vides renvoyées en fin de tri
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Pour l'instant aucunes des réponses ne semble fonctionner.
    Je pense que le problème vient peut-être du fait que les données contenues dans la zone A1:A100 sont en fait des formules car les données d'origines sont sur une autre feuille(du même classeur) car pour pouvoir utiliser une liste déroulante (crées à partir de Données-Validation) il faut que les données soient sur la même feuille.

  9. #9
    Membre actif Avatar de ilcocodrillo
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Âge : 18
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 276
    Points
    276
    Par défaut
    Non pas si tu nomme ta liste. Dans ce cas tu peux utiliser ce nom depuis une autre feuille
    80% des pannes informatiques se situent entre le clavier et la chaise...

    L'informatique ça vous énerve, prenez 5mns de détente ici


    =========== ===========

    Une fois que le problème à trouvé une solution n'oubliez pas le

  10. #10
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    je ne connais pas ton fichier mais je t'envoies un exemple simplifié (fait en excel2007, enregistré en compatible excel)
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Citation Envoyé par casefayere Voir le message
    je ne connais pas ton fichier mais je t'envoies un exemple simplifié (fait en excel2007, enregistré en compatible excel)
    Je n'utilise pas une listbox mais une liste déroulante, ce n'est pas la même chose, sinon ton exemple fonctionne bien effectivement.

    Citation Envoyé par fring Voir le message
    Teste le code ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TriAlphabetique()
        Range("A1:A" & Range("A65535").End(xlUp).Row).Sort Key1:=Range("A1"), _
        Order1:=xlAscending, Header:=xlGuess
    End Sub
    La colonne est trièe et les cellules vides renvoyées en fin de tri
    Cette fonction marche si les données sont brut parcontre comme ma zone contient des formules du type =SI(Feuil1!A1="";"";Feuil1!A1) cela met en premier les cellules "vides", ou alors il faut que je mette quelques chose du genre:=SI(Feuil1!A1="";"ZZZZZ";Feuil1!A1) mais bon c'est pas très esthétique.

  12. #12
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Trié ou pas trié, ceci fonctionne

    Dans le code de l'événement Activate de la feuille ou se trouve la liste déroulante...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Worksheet_Activate()
        Dim i As Integer
        With cmbParfum
            If .Text = "" Then
                For i = 0 To .ListCount - 1
                    If .List(i) <> "" Then
                        .ListIndex = i
                        Exit For
                    End If
                Next
            End If
        End With
    End Sub

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    Le principe du Worsheet_Activate me convient par contre la macro bloque à : If .Text = "" Then
    C'est bizarre car la formule est bien du genre '=SI(Feuil1!A1="";"";Feuil1!A1)'

    Jarault

  14. #14
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Que viennent faire les formules de cellules ici ? Je croyais qu'il s'agissait d'un ComboBox (pas celui de la barre d'outils Formulaire mais celui de la barre d'outils Contrôle) lié à une cellule pour le résultat et dont le contenu provient d'une plage de cellules... Donc, respectivement les propirétés LinkedCell et ListFillRange.

    Pour l'exemple que j'ai donné plus haut, j'ai nommé une plage de cellules de la feuil2 au nom de parfums et qui contient des parfums de glaces (vanille, fraise, etc.) en laissant des cellules vides un peu partout au travers (juste pour fins de l'exemple, même si d'un point de vue pratique, ce n'est pas trop logique).

    J'ai réglé les propriétés de mon ComboBox comme suit directement dans la fenêtre Propriétés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Propriété :     Valeur
    Name :          cmbParfum
    LinkedCell :    B2
    ListFillRange : parfums
    Il reste à adapter pour appliquer le principe avec ton classeur de façon cohérente.

    Il reste que les options de tri précédemment mentionnées par les autres potes sont toujours valables (selon moi...).

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 73
    Points : 38
    Points
    38
    Par défaut
    ZAZARAIGNEE, je n'ai jamais parlé de listbox, il s'agit bien d'une liste déroulante.

  16. #16
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    La confusion vient du terme utilisé "liste déroulante", si j'ai bien compris il s'agit d'une liste de validation

    Et tu as eu la réponse à ton problème ICI

    1. tu nommes ta plage A1:A100 (exemple Plage1)
    2. dans tes critères de validation --> Source : =Plage1
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

Discussions similaires

  1. Rafraichir un formulaire en fonction d'un choix dans une liste déroulante
    Par talondachil dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 29/01/2008, 23h17
  2. [SQL] Choix dans une liste déroulante issue d'une requête SQL
    Par Moustic74 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2007, 14h06
  3. [MySQL] affichage automatique d'un champs suite à un choix dans une liste déroulante
    Par sanaa.ben dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/10/2006, 00h18
  4. Réponses: 2
    Dernier message: 01/08/2006, 23h24
  5. [FORMULAIRE] affichage selon le choix dans une liste déroulante.
    Par gailup dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/06/2006, 14h58

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