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 :

Création d'une liste de validation de données en indirect [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Création d'une liste de validation de données en indirect
    Bonjour ,

    Je souhaiterais créer une liste déroulante dynamique en mode indirect > 200 membres . J'ai d'abord essayé de créer une liste de validation de données de la manière suivante :
    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
     
    Dim SignalsTable() As String
    ...
     
    ...
    For Each r In .Columns("M").Cells
                    If (r.Row > 2) Then
                        If IsEmpty(r.Offset(0, -12).Value) Then Exit For
                            With r.Validation
                                .Delete
                                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(SignalsTable, ",")
                                .InputMessage = "Must be in the joined list"
                                .IgnoreBlank = True
                                .InCellDropdown = True
                                .ShowInput = True
                                .ShowError = True
                            End With
                    End If
     
    ...
                Next
    Je suis arrivé à la conclusion que cette méthode ne fonctionne que pour les listes(ici SignalsTable) contenants peu de choix (dans mon cas <~20) . Je tiens à préciser que j'ai effectué pas mal de vérification quant au format des membres de ma liste( pas d'espaces , pas de doublons, pas trop long <~20caracteres) .

    La solution que j'envisage est de me servir de la fonction indirect() qui aura comme argument un label (un objet?) qui pointe sur la plage de données qui constituras ma liste mais malheureusement je ne trouve pas cette fameuse fonction indirect et je ne sais pas non plus comment l'on peux créer un label qui se réfère a la plage que je souhaite lui assigner .


    Je ne souhaite pas utiliser de combo box dans mon cas de figure .

    Merci d'avance pour l'aide

    Leiam

  2. #2
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    lorsque tu crée ta liste tu peux ensuite la nommer simplement en la selectionnant et changer le nom à l'endroit ou tu voit apparaitre la référence de la
    première cellule sélectionnée en haut à gauche.

    ou alors en passant par le name manager

    enduite, on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= xlBetween, Formula1:="=maliste"

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonjour mayekeul,

    J'aimerais justement créer à travers mon code vba un label qui pointe vers ma liste (une colonne dynamique dans une feuille excel ) .
    J'ai trouvé ca qui ne semble pas fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveWorksheet.Names.Add Name:="MySignalsList", RefersTo:=.Columns("A").Rows("3:" & k + 3).Value
    
    'Comment utiliser mon label dans ma formula1 en indirect  
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(MySignalsList, ",")
    Est ce que tu vois ce que j'essaye de faire ? Je peux ajouter des précisions si nécessaire .

  4. #4
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    Alors deux choses,
    il faut lui donner une référence ('si possible complete, c'est mieux) genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... refersto:=sheet1.range("A1:B100")
    donc oublie le
    .Value
    ensuite, juste mettre la deuxième ligne en commençant par
    .Add
    si cela n'est pas à l'intérieur d'un block WITH, cela risque de ne pas fonctionner, il faut mettre l'instruction en entier

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Merci Mayekeul ,

    Cela fonctionne parfaitement à présent .

    Remarque importante: Lorsque l'on souhaite créer un label qui pointe sur un Range de cellule dans mon cas mes données de A3:Ax il faut que le range démarre avec une cellule vide .Pourquoi me diriez vous ? Trés simple ... je n'en ai aucune idée . J'ai donc d'abord copié mes données dans une sheet en masqué et démarer mon record a partir de A2 .
    Peut etre une meilleure optimisation à proposer ? En sachant que la copie dans un onglet masqué me permet de mettre l'utilisateur hors de portée de mon label , pour éviter toute mauvaise manipulation de sa part.

    Encore Merci

  6. #6
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je dirais peut-être de mettre la feuille avec le statut xlveryhidden, cela empechera même l'utilisateur de faire "unhide"

    ps: si c'est le cas, n'oublie pas de mettre résolu sur la discussion

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2015
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bonne idée pour le xlveryhidden mais du coup il est préférable de le faire dans le code ou bien manuellement une seule fois .

    J'aimerais également ajouter des sécurités suplémentaires comme la suppression de doublons sur mon Range je sais que manuellement c'est possible mes en vba je ne connais pas la méthode .

    J'en profite pour préciser que j'ai utiliser dans différents modules la taille de ce fameux range dynamique . J'utilise deux fonctions qui me permette de record cette valeur puis de l'utiliser quand bon me semble . Cette méthode n'est pas approprié , j'aimerais bien par exemple créer un fonction qui me demande en parametre une cells et qui me renvoie la taille du range sur la collonne de la cellule de départ jusqu'a une cell vide . Cette fonction pourrait etre utilisé qi le besoin est différent à l'avenir .

    Pardon de m'écarter du sujet de départ .

    Merci

    Leiam

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    moi je le ferai manuellement.

    éventuellement en passant par une liste intermédiaire

    un élément de réponse a chercher du coté de range("xx").currentregion

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2014, 10h22
  2. [XL-2007] Créer une liste de validation à partir de données contenues dans un autre fichier
    Par familledacp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/10/2011, 19h03
  3. [XL-2003] Remplir une liste de validation de données.
    Par lecail65 dans le forum Excel
    Réponses: 1
    Dernier message: 03/08/2010, 17h09
  4. Création d'une liste ...
    Par keryss dans le forum Access
    Réponses: 6
    Dernier message: 21/10/2004, 10h00

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