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 :

Selectionner un Item d'une liste de validation en VBA [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Selectionner un Item d'une liste de validation en VBA
    Bonjour à tous,

    En VBA, j'aimerais par exemple selectionner le deuxieme item d'une liste de validation.

    Alors comment coder ce truc ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, via une recherche

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir kiki29,

    J'ai fait plusieurs recherche et j'ai vu des codes, mais je n'ai rien trouvé un qui fait sélectionner un élément d'une liste de validation par du VBA.

  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
    Par défaut
    Bonjour,

    Tu peux biaiser en utilisant l’indice d’un tableau de correspondance.
    Si ma liste de validation correspond à la plage A1:A10, et que cette liste est affectée à la cellule B2,
    Pour sélectionner l’item n° j, il suffit d’écrire range("B2")=cells(j, "A")

    Cordialement.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une petite fonction qui donne l'item n° Itm de la liste de validation appliquée à la cellule Rng (gymnastique oblige)
    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
    Function VLD(ByVal Rng As Range, ByVal Itm As Byte) As String
    Dim Frml As String
    Dim Tb
     
    On Error Resume Next
    Frml = Rng.Validation.Formula1
    On Error GoTo 0
     
    If Frml <> "" Then
        If Rng.Validation.Type = xlValidateList Then
            If InStr(Frml, "=") > 0 Then
                Tb = Evaluate(Frml)
                If UBound(Tb, 1) >= UBound(Tb, 2) Then
                    If Itm <= UBound(Tb, 1) Then VLD = Tb(Itm, 1)
                Else
                    If Itm <= UBound(Tb, 2) Then VLD = Tb(1, Itm)
                End If
            Else
                Tb = Split(Frml, ";")
                If Itm <= UBound(Tb) + 1 Then VLD = Tb(Itm - 1)
            End If
        End If
    End If
    End Function

  6. #6
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir gFZT82 , mercatog

    J'ai essayé d'appliquer la fonction VLD, mais je n'ai rien obtenu
    Fichiers attachés Fichiers attachés

  7. #7
    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
    Par défaut
    Bonsoir,

    Voici une version très épurée qui te montre comment utiliser les indices d’un tableau (Tb) pour établir un lien avec la position d’un élément de ta liste de validation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
    Sub ItemList()
    Dim Tb
        Tb = Split([E2].Validation.Formula1, ";")
        If [C2].Value > 0 And [C2].Value <= UBound(Tb) + 1 Then
            [G2].Value = Tb([C2].Value - 1)
        Else
            MsgBox "L'item recherché doit être compris entre 1 et " & UBound(Tb) + 1
            [G2].Value = ""
        End If
    End Sub
    Cordialement.
    Fichiers attachés Fichiers attachés

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour ton cas, remplace la ligne 11 du code de la fonction (générique) VLD par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Left(Frml, 1) = "=" Then
    Le jonglage de VLD prends en compte les 3 cas de figures:
    1. Liste en dur (ton cas sur le fichier et malheureusement pour moi tu avais un = dans ta liste)
    2. Liste issue d'une plage de cellule en colonne
    3. Liste issue d'une plage de cellule en ligne

    Code modifié
    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
    Function VLD(ByVal Rng As Range, ByVal Itm As Byte) As String
    Dim Frml As String
    Dim Tb
     
    If Itm > 0 Then
        On Error Resume Next
        Frml = Rng.Validation.Formula1
        On Error GoTo 0
     
        If Frml <> "" Then
            If Rng.Validation.Type = xlValidateList Then
                If Left(Frml, 1) = "=" Then
                    Tb = Evaluate(Frml)
                    If UBound(Tb, 1) >= UBound(Tb, 2) Then
                        If Itm <= UBound(Tb, 1) Then VLD = Tb(Itm, 1)
                    Else
                        If Itm <= UBound(Tb, 2) Then VLD = Tb(1, Itm)
                    End If
                Else
                    Tb = Split(Frml, ";")
                    If Itm <= UBound(Tb) + 1 Then VLD = Tb(Itm - 1)
                End If
            End If
        End If
    End If
    End Function

  9. #9
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir gFZT82, marcatog,

    Comme j'ai trois listes de validation et que j'ai à choisir dans chacune un élément déférent (les listes contiennent les mêmes éléments).

    Est-il possible de modifier la procédure et la fonction pour ce cas là ?

    Merci d'avance.

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour la même fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Worksheets("Feuil1")
        .Range("A1") = VLD(.Range("A1"), 3)
        .Range("A2") = VLD(.Range("A2"), 4)
        .Range("A3") = VLD(.Range("A3"), 2)
    End With

  11. #11
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir mercatog,

    Merci pour le code.

    Je vais essayer de l'adapter à mon besoin.

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

Discussions similaires

  1. Sélectionner un item d'une list view
    Par Coussati dans le forum Composants VCL
    Réponses: 4
    Dernier message: 14/02/2006, 22h16
  2. Se positionner sur un item d'une liste déroulante
    Par pyxosledisciple dans le forum IHM
    Réponses: 1
    Dernier message: 08/02/2006, 20h19
  3. Sélectionner le minimum dans une liste
    Par SteelBox dans le forum Prolog
    Réponses: 18
    Dernier message: 01/11/2005, 12h08
  4. Selectionner automatiquement un item dans une liste
    Par nebule dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 09/12/2004, 17h03
  5. Réponses: 2
    Dernier message: 17/08/2003, 20h07

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