Bonjour à tous les sauveurs du forum !


J'essaye de faire un fonction qui à chaque chargement d'une feuille remplie les 2000 première cellules de la première colonne avec un liste de validation qui se trouve sur une autre feuille.

Et à force d'essayer j'ai réussi ! Et ça 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
19
20
21
22
23
Private Sub Worksheet_Activate()
Application.Calculate
 
plage = "=" & "'" & "Base de données" & "'" & "!" & Range("A6:A" & Sheets("Base de données").Range("A65536").End(xlUp).Row).Address
 
With Sheets("Etude de prix")
 
 
    With Range("A6:A2000").Validation
    .Delete 'suppression de l'ancienne plage de validation puis création d'une nouvelle avec les dernieres valeurs
    .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:= plage
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = False
    End With
End With
 
End Sub
Mais.... car il y a toujours un problème ! Je voudrai ajouter à ma liste de validation une saisie semi automatique des données.
J'ai donc remplacé par
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Formula1:="=DECALER(plage;EQUIV(A1&""*"";plage;0)-1;0;NB.SI(plage;A1&""*""))"
Sauf que ce code trouvé sur le net marche très bien pour la cellule A1, mais moi je dois l'adapter pour que ça s'applique à A6 j'usqu'à A2000. Et je n'y arrive pas....

J'ai essayé de remplacer le With Range("A6:A2000") par une boucle avec un variable i qui s'incrémente et une formule comme ca:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Formula1:="=DECALER(plage;EQUIV("A"&"i"&""*"";plage;0)-1;0;NB.SI(plage;"A"&"i"&""*""))"
Mais impossible d'arriver à un truc qui fonctionne après de nombreuses heures d'essais... grrr

Merci de votre aide