Il y a deux problèmes; la première est qu'il vous manque un argument requis pour la fonction End, qui est une constante Excel nommée pour indiquer la direction.
Au lieu de Worksheets("Misc").Cells(2, i).End
sur cette ligne essayer Worksheets("Misc").Cells(2, i).End(xlDown)
Vous pouvez utiliser xlLeft, droite ou haut aussi bien, mais je devine en bas est ce que vous recherchez.
Le deuxième problème est la valeur de Formule1 doit être une adresse de chaîne (je pense) et vous passez un objet de gamme réelle.
Essayez ceci pour cette ligne
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Range(Worksheets("Misc").Cells(2, i), Worksheets("Misc").Cells(2, i).End(xlDown)).Address
Cela a fonctionné sur ma machine, sans erreurs. Bien sûr, j'écrasai des données factices, donc je ne sais pas si elle est correcte pour votre feuille de calcul
EDIT (en réponse au commentaire de Stan)
Il peut y avoir une façon plus sexy, mais cela est une bonne et simple (qui est sexy aussi, dans son propre droit); l'instruction if vérifie simplement la cellule dans la ligne suivante. Si c'est non-vide, alors il continue avec la même solution que vous aviez auparavant. Si elle est vide, elle utilise uniquement cette cellule comme plage de validation.
For i = 1 To 10
If Worksheets("Misc").Cells(3, i).Value <> "" Then
Set validationRange = Range(Worksheets("Misc").Cells(2, i), Worksheets("Misc").Cells(2, i).End(xlDown))
Else
Set validationRange = Worksheets("Misc").Cells(2, i)
End If
With Worksheets("Drop-down").Cells(i, 2).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:=validationRange.Address.......
Je mettiez
Worksheet.Selection
Selection.DoStuff
paires, en
Worksheet.DoStuff
Je pense qu'il a l'air un peu plus agréable.
Faites-moi savoir si cela fonctionne pour vous!
Quelle est l'erreur? –
Erreur d'exécution 450. – stanigator