Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Définir la validation d'une cellule via une liste qui se trouve sur la colonne de la cellule en question

3 réponses
Avatar
HD
Bonjour,

Je n'arrive pas à définir une liste de validation en VBA.

Je voudrais que pour chaque cellule sélectionnée avoir une liste composée
des données de la même colonne et des lignes allant de 4 à 15. Ce que j'ai
tenté de faire ici... mais sans succès :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Cells(.Row, .Column).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:=xlBetween, Formula1:= "=" & Range(Cells(4, .Column), Cells(15,
.Column)).Address
.IgnoreBlank = True
End With
End Sub

Le problème se situe au niveau de l'interprétation de l'adresse. Dans mon
essai sur une cellule en 1ère colonne j'avais Formula1:= "=$A$4:$A$15"

Merci d'avance pour votre aide

Cordialement,
HD

3 réponses

Avatar
DanielCo
Bonjour,
Je ne comprends pas ton code...
Dans la ligne suivante, à quoie le "." fait-il référence ?
With Cells(.Row, .Column).Validation
De même, dans ".Column" de :
Range(Cells(4, .Column)
Le point fait référence au dernierr "With"
c'est à dire à l'objet "Validatiion".
Cordialement.
Daniel

Bonjour,

Je n'arrive pas à définir une liste de validation en VBA.

Je voudrais que pour chaque cellule sélectionnée avoir une liste composée des
données de la même colonne et des lignes allant de 4 à 15. Ce que j'ai tenté
de faire ici... mais sans succès :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Cells(.Row, .Column).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:=xlBetween, Formula1:= "=" & Range(Cells(4, .Column), Cells(15,
.Column)).Address
.IgnoreBlank = True
End With
End Sub

Le problème se situe au niveau de l'interprétation de l'adresse. Dans mon
essai sur une cellule en 1ère colonne j'avais Formula1:= "=$A$4:$A$15"

Merci d'avance pour votre aide

Cordialement,
HD
Avatar
h2so4
Bonjour,

Essaie ceci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Cells(Target.Row, Target.Column).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="=" & Range(Cells(4, Target.Column), _
Cells(15, Target.Column)).Address
.IgnoreBlank = True
End With
End Sub

h2so4


On Tuesday, July 24, 2012 5:28:04 PM UTC+2, HD wrote:
Bonjour,

Je n'arrive pas à définir une liste de validation en VBA.

Je voudrais que pour chaque cellule sélectionnée avoir une liste comp osée
des données de la même colonne et des lignes allant de 4 à 15. Ce q ue j'ai
tenté de faire ici... mais sans succès :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Cells(.Row, .Column).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop,
Operator:=xlBetween, Formula1:= "=" & Range(Cells(4, .Column), Cells(15,
.Column)).Address
.IgnoreBlank = True
End With
End Sub

Le problème se situe au niveau de l'interprétation de l'adres se. Dans mon
essai sur une cellule en 1ère colonne j'avais Formula1:= " =$A$4:$A$15"

Merci d'avance pour votre aide

Cordialement,
HD
Avatar
HD
Hum... pour vous expliquer un peu le problème j'ai copier/coller des bouts
de code à droite à gauche en oubliant effectivement la partie With Target de
mon code...

En fait j'ai trouvé d'où provenait le problème... il semblerait que si les
cellules source de la liste sont protégées au moment de la création de la
liste ça génére une erreur. Je déprotège la feuille, je crée ma liste, puis
je reprotège ma feuille (sauf la cellule où se trouve ma liste) et cela
fonctionne.

Merci de votre aide

@+
HD