Question rapide sur les liste en VBA

  • Initiateur de la discussion Initiateur de la discussion nicolase78
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

nicolase78

Guest
Bonjour à tous,

Je voudrai créer une liste de validation en vba mais mon problème se porte sur les données de cette liste. En effet cette liste est variable et je me demande comment l'intégrer dans le code ci-dessous qui accepte seulement une plage (ici $A$24:$A$29). Y'a t-il un moyen pour qu'elle accepte un tableau ???

Code:
Sub Macro3()
'


    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$A$24:$A$29"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
 
End Sub

Merci par avance!
 
Re : Question rapide sur les liste en VBA

Salut nicolase78, le Forum

essaye cela

Sub Macro3()
'
Dim DerLig As Long
DerLig = Feuil1.Range("A" & Rows.Count).End(xlUp).Row
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$A$24:$A$" & DerLig
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub

DerLig te permet de trouver la dernière ligne de la Col A renseignée

Bonne Journée
 
Re : Question rapide sur les liste en VBA

Bonjour nicolase78, salut Dull 🙂

Pour définir une liste de validation, il n'y a que 2 possibilités :

- soit une plage de cellules comme la vôtre ou celle proposée par Dull

- soit une liste de type String avec la virgule comme séparateur :

Code:
Sub ListeValidation()
Dim liste As String
liste = "a,b,c,d,e,f"
With Selection.Validation
  .Delete
  .Add xlValidateList, Formula1:=liste
End With
End Sub
A+
 
Re : Question rapide sur les liste en VBA

Merci Dull. En fait moi je voudrai prendre les données d'une plage mais sans les doublons c'est là la difficulté. Donc je me suis dis je vais passer par un tableau qui va virer les doublons et transmettre ce tableau mais ça ne marche pas...

Job, tu me confirmes qu'il n'y a pas moyen de faire ce que je veux alors. Puisque si je prends un string qui comprend "a,b,c,d", la liste n'aura qu'une seule entrée qui sera "a,b,c,d" ?
 
Re : Question rapide sur les liste en VBA

Bonjour à tous


À défaut de support, un essai sans plage auxiliaire...
  • ... sans classement :
    VB:
    Sub Liste1()
    Dim i%, v$, oCel As Range, oPlg As Range, Coll As New Collection
        Set oPlg = Range("B5:B19") 'plage de données à définir à sa convenance.
        On Error Resume Next
        For Each oCel In oPlg.Cells
            Coll.Add oCel.Value, CStr(oCel.Value)
        Next
        Set oPlg = Nothing
        On Error GoTo 0
        For i = 1 To Coll.Count
            v = v & Coll.Item(i) & ","
        Next
        With [B1].Validation 'ou autre adresse...
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Left$(v, Len(v) - 1)
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End Sub
  • ... avec classement :
    VB:
    Sub Liste2()
    Dim i%, v$, dPlg, oCel As Range, oPlg As Range, Coll As New Collection
        Set oPlg = Range("B5:B19") 'plage de données à définir à sa convenance.
        dPlg = oPlg.Value
        With oPlg.Parent.Sort
            .SortFields.Clear
            .SortFields.Add Key:=oPlg.Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange oPlg
            .Header = xlNo 'à adapter
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
        On Error Resume Next
        For Each oCel In oPlg.Cells
            Coll.Add oCel.Value, CStr(oCel.Value)
        Next
        oPlg.Value = dPlg
        Set oPlg = Nothing
        Erase dPlg
        On Error GoTo 0
        For i = 1 To Coll.Count
            v = v & Coll.Item(i) & ","
        Next
        With [B1].Validation 'ou autre adresse...
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Left$(v, Len(v) - 1)
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End Sub


ROGER2327
#5534


Dimanche 1er Pédale 139 (Erection du Surmâle - fête Suprême Tierce)
5 Ventôse An CCXX, 1,5863h - bouc
2012-W08-5T03:48:26Z
 
Re : Question rapide sur les liste en VBA

Bonjour,


>soit une liste de type String avec la virgule comme séparateur :


Il faut préciser que ce genre de liste ne peut pas dépasser 200 caractères, ce qui en limite l'utilisation.

Avec un formulaire

Code:
Private Sub UserForm_Initialize()
  Set mondico = CreateObject("Scripting.Dictionary")
  a = [Noms].Value  ' tableau a(,)
  For Each c In a
    mondico(c) = ""
  Next c
  Me.ComboBox1.List = mondico.keys
  SendKeys "{F4}"
End Sub

Private Sub ComboBox1_Change()
  ActiveCell = Me.ComboBox1
  Unload Me
End Sub

Avec tri des noms

Code:
Private Sub UserForm_Initialize()
  Set mondico = CreateObject("Scripting.Dictionary")
  a = [Noms].Value  ' tableau a(,)
  For Each c In a
    If c <> "" Then mondico(c) = ""
  Next c
  temp = mondico.keys
  Call tri(temp, LBound(temp), UBound(temp))
  Me.ComboBox1.List = temp
  SendKeys "{F4}"
End Sub

JB
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
Réponses
27
Affichages
2 K
adet ruireux
A
Réponses
11
Affichages
3 K
F
N
Réponses
12
Affichages
1 K
NadJP
N
Réponses
12
Affichages
1 K
M
Réponses
2
Affichages
1 K
moialbert2
M
T
  • Résolu(e)
XL pour MAC lenteur du vba
Réponses
16
Affichages
3 K
T
  • Question Question
Réponses
3
Affichages
1 K
W
  • Question Question
Réponses
1
Affichages
1 K
D
  • Question Question
Réponses
4
Affichages
1 K
Disiz4K
D
P
Réponses
7
Affichages
2 K
Retour