Bonjour,

J'essaie de créer une liste à partir de données que j'ai en colonne sur une même feuille. Cette plage de cellules est variable, elle va augmenter au fur et à mesure qu'on va remplir le fichier.

Quand je fais un apprentissage, VBA me donne ça :
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
 
Sub liste()
' liste Macro
    Range("G5").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$C$4:$C$9"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Ca me fait bien une liste en G5 des données contenues en C4:C9
Sauf que dans mon cas, la cellule C9 n'est pas figée.
Donc j'introduis une variable Ligne (on peut la considérer comme constante vu qu'elle déterminée par une boucle un peu plus haut)
Donc dans ma ligne 7, je veux non plus C9, mais la cellule (Ligne,C)
Les $ ne servent à rien, ça fonctionne toujours quand on les retire.
Je suis finalement arrivé à cette expression :
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
 
Dim Ligne As Integer
Sub lignes()
    Ligne = 4
    Do While Cells(Ligne, 3) <> ""
        Ligne = Ligne + 1
    Loop
    Ligne = Ligne - 1
    MsgBox Ligne
    Range("G5").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=Range(Cells(4, 3), Cells(Ligne, 3))
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = "Date"
        .ErrorTitle = "Erreur"
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End Sub
Quand on considère que Ligne = 4 (en retirant la boucle au dessus), ça fonctionne : j'ai bien le contenu de C4 dans G5, avec un menu déroulant. Quand on prend toute la boucle, le programme fonctionne jusqu'à "Range("G5").Select" et après il passe en mode débogage.

Quelqu'un saurait m'aider?