Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 formule de validation de données

cyrikou

XLDnaute Occasionnel
Bonjour,

j'ai créé une macro qui s'active selon un choix dans une combobox placée sur la feuille.
Cette macro permet de créer une liste de choix dans chacune des cellules de la sélection (validation de données).
Voici le code :
VB:
Range(Cells(10, 5), Cells(37, 44)).Select
        With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$D$60:$D$71"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputMessage = "Veuillez saisir les notes de 1 à 10 !"
        .ErrorMessage = "Mauvaise saisie ! Veuillez recommencer !"
        .ShowInput = True
        .ShowError = True
    End With

Il fonctionne très bien sauf si je me mets dans le menu option "style de référence L1C1".
J'ai un message d'erreur qui apparait : "erreur d'execution 1004, erreur définie par l'application ou par l'objet"

L'erreur est là :

Code:
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$D$60:$D$71"

J'aimerai que quelque soit l'utilisateur, le code fonctionne et là je bloque car je n'arrive pas à écrire
Formula1:="=$D$60:$D$71" en référence L1C1.

Si vous avez une idée, un conseil, je vous remercie !
 

cathodique

XLDnaute Barbatruc
Bonjour,

As-tu essayé avec l'enregistreur de macro en référence L1C1?
L1C1 ----> L comme Ligne et C comme Colonne.
Creuse du côté de Cells. Présentement, je n'ai pas excel sous la main.

edit: Pierrejean bonjour
 

cyrikou

XLDnaute Occasionnel
Merci Pierre Jean et cathodique, maintenant le problème est inverse, ça fonctionne plus quand je décoche la référence L1C1. Il est vrai que la majorité des excel ne sont pas activés en L1C1. Mon problème est d'avoir un code qui fonctionne dans tous les cas.

Compliqué....
 

pierrejean

XLDnaute Barbatruc
Re

A tester:
Range(Cells(10, 5), Cells(37, 44)).Select
With Selection.Validation
.Delete
On Error Resume Next
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=R60C4:R71C4"
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=$D$60:$D$71"
On Error GoTo 0
.IgnoreBlank = True
.InCellDropdown = True
.InputMessage = "Veuillez saisir les notes de 1 à 10 !"
.ErrorMessage = "Mauvaise saisie ! Veuillez recommencer !"
.ShowInput = True
.ShowError = True
End With
 

eriiic

XLDnaute Barbatruc
Bonjour,

ou bien en testant et en se servant de .address pour convertir :
VB:
f = "$D$60:$D$71"
f = "=" & IIf(Application.ReferenceStyle = xlA1, f, Range(f).Address(, , xlR1C1))
puis ... .Formula1:=f
eric
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…