Bonjour, je suis actuellement en stage et un de mes projets consiste à faciliter l'utilisation d'un fichier excel pour des personnes en automatisant le plus de tâches possibles. L'une de ces automatisations consiste à proposer sur plusieurs lignes une liste déroulante pour l'une des colonnes montrant les valeurs contenues dans une autre feuille. Pour cela tout va bien mais mon problème est qu'une saisie semi-automatique est souhaité et pour cela, je passe à travers une validation en liste où j'utilise une formule. pour pouvoir créer cette cellule spéciale sur chaque nouvelle ligne, je passe par VBA.
Mon code pour cela me semble correct mais j'ai cette erreur Runtime 1004 à chaque fois que j'essaie de créer une validation en liste pour une cellule. J'ai regardé de nombreuses pages où des personnes semblaient avoir des problèmes équivalents mais rien ne marche dans mon cas. Créer une validation d'un autre type fonctionne très bien et le problème ne vient pas de ma formule car même en laissant celle-ci vide, le problème apparaît. J'ai aussi fait apparaître la formule qui s'adapte à la ligne courante dans la fenêtre de debug et essayer de la copier manuellement, tout fonctionne bien. je supprime bien une supposé validation précédente avant d'ajouter la nouvelle, la cellule existe bien dans tous les cas puisque je viens d'ajouter la ligne. Je suis donc dépassé par cette erreur. Voici le code en question :
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
adresse = Mid(Selection.Address, 2, 1) & Mid(Selection.Address, 4)
    
    With Selection.Validation        
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=SI(" & adresse & "<>"""";DECALER(PremGrade;EQUIV(" & adresse & "&""*"";TriGrade;0)-1;;SOMME((STXT(TriGrade;1;NBCAR(" & adresse & "))=TEXTE(" & adresse & ";""0""))*1));TriGrade)"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Le code qui génère l'erreur est en gras.