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.
Version imprimable
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.
Salut, via une recherche
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.
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.
Une petite fonction qui donne l'item n° Itm de la liste de validation appliquée à la cellule Rng (gymnastique oblige)
Code:
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
Bonsoir gFZT82 , mercatog
J'ai essayé d'appliquer la fonction VLD, mais je n'ai rien obtenu :aie:
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.
Cordialement.Code:
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
Pour ton cas, remplace la ligne 11 du code de la fonction (générique) VLD par:Le jonglage de VLD prends en compte les 3 cas de figures:Code:If Left(Frml, 1) = "=" Then
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:
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
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.
Pour la même fonction
Code:
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
Bonsoir mercatog,
Merci pour le code.
Je vais essayer de l'adapter à mon besoin.