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 :

VBA - Ajouter des lignes à une liste déroulante dans une feuille de calcul


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut VBA - Ajouter des lignes à une liste déroulante dans une feuille de calcul
    Bonjour à tous,

    je fais appel à vous car cela fait quelques jours que je suis sur un problème et mes recherches sur le forum et net restent infructueuses.


    J'ai un tableau en VBA que je cherche à afficher toujours en VBA sous forme de liste déroulante dans une cellule sélectionnée d'une feuille de classeur.

    J'arrive à créer la liste déroulante avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    With Selection.Validation
           .Delete
           .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="Bidule"
           .IgnoreBlank = True
    End With

    Mais je n'arrive pas à afficher plusieurs lignes à la liste. Je ne connais pas la commande. J'ai essayé les Redim, AddItem ... comme dans une Userform mais sans succès.


    Je vous remercie d'avance pour votre aide!
    MerlotJep

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Essaie ce code après avoir adapté le nom de feuille et défini la cellule qui doit contenir la liste de validation :
    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
    Sub Test()
    Dim Cel As Range
    Dim Texte As String
        With Worksheets("Feuil1") 'Nom de feuille à adapter
            For Each Cel In .Range("Bidule")
                Texte = Texte & Cel & ","
            Next Cel
            Texte = Left(Texte, Len(Texte) - 1)
            With .Range("Cible").Validation 'Cellule cible à définir
                   .Delete
                   .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                   Operator:=xlBetween, Formula1:=Texte
                   .IgnoreBlank = True
            End With
        End With
    End Sub
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse gFZT82,

    effectivement ton code fonctionne. Toutefois il intègre une plage de cellules (visible sur ma feuille de calcul) en liste de validation.
    Ce que je voudrais faire, c'est intégré les éléments d'un tableau (une variable tableau donc) créé en VBA.

    J'avais fait un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Test()
    Dim MonTableau (1 to 4) As Integer 'en admettant que mon tableau a été rempli par une autre procédure
            With Worksheets("Feuil1").Range("Cible").Validation 'Cellule cible à définir
                   .Delete
                   .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                   Operator:=xlBetween, Formula1:= MonTableau
                   .IgnoreBlank = True
            End With
    End Sub
    Forcément, il ne comprend pas la variable MonTableau. J'ai essayé avec une boucle For i = 1 to 4... mais il finit par ne m'afficher que la dernière ligne de MonTableau et je n'ai qu'un élément dans ma liste.


    Si je ne trouve pas de solution, je ferai ce que suggère gFZT82.

    Si vous pouviez me donner un coup de pouce,
    Merci!

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    L'utilisation d'une variable tableau ne change pas le principe d'élaboration de la liste de validation :
    Exemple avec un tableau constitué avec les valeurs de la plage A1:C3.
    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
    Sub Test()
    Dim MonTableau
    Dim i As Integer, j As Integer
    Dim Texte As String
        With Worksheets("Feuil1") 'Nom de feuille à adapter
            MonTableau = Range("A1:C3").Value
            For i = 1 To UBound(MonTableau, 1)
                For j = 1 To UBound(MonTableau, 2)
                    Texte = Texte & MonTableau(i, j) & ","
                Next j
            Next i
            Texte = Left(Texte, Len(Texte) - 1)
            With .Range("Cible").Validation 'Cellule cible à définir
                   .Delete
                   .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                   Operator:=xlBetween, Formula1:=Texte
                   .IgnoreBlank = True
            End With
        End With
    End Sub
    Cordialement.

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 139
    Points : 9 974
    Points
    9 974
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    si le tableau est unidimensionnel, on peut le transmettre à la liste de validation sans boucle, en "joignant" les éléments avec séparateur ","


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub tiit()
    Dim Tabl(1 To 4)
     
    ' pour avoir un tableau exemple
    For i = 1 To 4
        Tabl(i) = i * 2
    Next i
     
        With Feuil1.Cells(1, 1).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(Tabl, ",")
            .IgnoreBlank = True
        End With
    End Sub

  6. #6
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Super à tous les deux! Cela fonctionne.
    Il me manquait la syntaxe "=Join(....)" et la gestion des tableaux multidimensionnels.

    Vraiment merci!

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

Discussions similaires

  1. [SP-2010] Ajouter une liste déroulante dans une liste externe
    Par -Strix- dans le forum SharePoint
    Réponses: 0
    Dernier message: 19/05/2016, 08h47
  2. Réponses: 4
    Dernier message: 20/02/2012, 16h59
  3. Réponses: 1
    Dernier message: 12/12/2011, 10h07
  4. Réponses: 3
    Dernier message: 24/11/2008, 14h09
  5. Réponses: 4
    Dernier message: 24/04/2003, 22h28

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