Liste de Validation en VBA

Bonjour à tous !

Je créer ce sujet car je suis coincé avec un petit bout de code :

J'essaie de créer une liste de validation. Ce qu'il faut savoir sur cette liste de validation que j'essaie de créer (dans une feuille "étape") c'est que les termes de cette liste viennent d'une plage dans une autre feuille ("Capacité"). Les termes dans cette plage sont susceptibles de changer et la taille de la plage (sur la colonne A) est paramétrée par une variable appelé MachineLimit. Voilà ce que ça donne pour le moment :

With Worksheets("étapes").Range("D7").Validation

.Delete

.Add Type:=xlValidateList, _

AlertStyle:=xlValidAlertStop, _

Formula1:="=" & Sheets("Capacité").Range("A5:A" & MachineLimit).Address

End With

J'ai une erreur pour la ligne de Formula1 :

1004 : erreur définie par l'application ou par l'objet

Pourriez-vous m'aider s'il vous plait ?

Salut,

Pour utiliser des références d'une autre feuille au travers d'une liste de validation, tu dois normalement obligatoirement passer par l'intermédiaire d'un "Nom". Apparemment c'est la même chose au travers d'un code VBA. Ton "Nom" peut quant à lui faire référence à une liste de longueur variable.

Cordialement.

Bonsoir

Yvouille a raison : il faut passer par un nom défini.

Sub Test()
MachineLimit = 13
With Sheets("Capacité")
.Activate
.Range("A5:A" & MachineLimit).Select
ActiveWorkbook.Names.Add Name:="LaPlage", RefersTo:="=" & "Capacité!" & Selection.Address
End With

With Sheets("étapes").Range("D7").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=LaPlage"
End With
Sheets("étapes").Select
End Sub

Amicalement

Nad

il peut utiliser quelque chose du style par exemple (pas obligé d'utiliser un nom défini ?!! non?!):

Formula1:="=decaler(Feuil1!$A$1;;;nbval(Feuil1!$A:$A))"

cdt


ha non ca n'a pas l'air de fonctionner. dsl

Merci à vous tous, j'ai pu régler mon problème grâce à ce code :

With Sheets("Capacité")

.Activate

.Range("A5:A" & MachineLimit + 4).Select

ActiveWorkbook.Names.Add Name:="LaPlage", RefersTo:="=" & "Capacité!" & Selection.Address

End With

Dim Inter As Variant

For NombreEtape = 0 To 20

Inter = 7 + NombreEtape * 25

With Sheets("étapes").Range("D" & Inter).Validation

.Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _

xlBetween, Formula1:="=LaPlage"

End With

Next NombreEtape

La boucle for et la variable Inter sont là pour me permettre de créer plusieurs listes de validation équidistantes de 25 cellules sachant que la première cellule est D7

Néanmoins j'aurais une question pour vous (et j'en aurais surement d'autre encore ) :

Est-il possible de déclencher une macro à partir du choix fait dans une liste de validation (et donc sans passer par un bouton) ? Si oui, comment procéder (en ce moment je cherche comment faire) ?

Merci d'avance.

Re,

Tu pourrais utiliser une macro événementielle. Dans l'exemple ci-joint, un code est lancé si tu modifies les cellules marquées en jaune.

Cordialement.

Rechercher des sujets similaires à "liste validation vba"