Validation par le code [Résolu]

cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 19 oct. 2017 à 19:29 - Dernière réponse : Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention
- 22 oct. 2017 à 17:37
Bonjour,
J'essai de créer une liste de validation

With Range("C5", Range("C" & Rows.Count)).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, 
    Operator:=xlBetween, _
   Formula1:="=DECALER(Synthése!$F$3;0;0;NBVAL(Synthése!$F:$F)-1;1)" 
       .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With


Le soucis est qu'il n'accepte pas le "=" dans formula1
quand je met =DECALER(Synthése!$F$3;0;0;NBVAL(Synthése!$F:$F)-1;1)
dans la source sans passer par le code VBA ca marche...

quelqu'un aurait une idée ?

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

12 réponses

Répondre au sujet
Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention - 20 oct. 2017 à 10:41
0
Utile
5
Bonjour,

« quand je met =DECALER(Synthése!$F$3;0;0;NBVAL(Synthése!$F:$F)-1;1)
dans la source sans passer par le code VBA ca marche... »


T'es certain ???

cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 21 oct. 2017 à 20:25
Bien sur que je suis certain, je l'utilise depuis un moment,
de plus la validation est souvent utiliser en faisant référence à une autre feuille.Je vois pas ton soucis avec cette formule mais elle est top....

je voudrais juste la convertir en vba
pour la simple raison qu'apres une mise à jour de mon fichier excel que je partage avec d'autre personne,
je fais un copier coller de leurs données de l'ancien fichier vers le nouveau mais excel me crée une connexion Fichier/synthése de l'ancien fichier
cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 21 oct. 2017 à 20:29
Question bête mais je vais la poser quand même,
tu as bien crée une feuille nommé "Synthése" ?

Sinon évidement ça foire...
Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention > cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 22 oct. 2017 à 11:07
A début, j'avais créé une feuille "Synthèse" mais Excel ne trouvant pas le fichier, j'ai effectivement créé une feuille "Synthése" (avec la mauvaise orthographe, i.e. un "é" au lieu du "è").
En fait, c'est ma version Excel qui n'accepte pas de validation faisant référence à une autre feuille.
cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention > Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention - 22 oct. 2017 à 17:18
Tu as qu'elle version ?
Chez moi ça marche avec 2010 et 2013
Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention > cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 22 oct. 2017 à 17:36
Sur ce PC 2003 et 2007 et sur mes portables 2010 et 2016
Avec 2007 ça fonctionne pas.
Commenter la réponse de Patrice33740
cs_MPi 3859 Messages postés mardi 19 mars 2002Date d'inscription 15 décembre 2017 Dernière intervention - 20 oct. 2017 à 17:04
0
Utile
2
Plutôt que des formules Decaler, je préfère utiliser des tableaux (ListObjects).

Ça permet d'avoir des listes qui s'ajustent au contenu de ces tableaux automatiquement si on ajoute ou enlève des données.

Et comme mentionné par Patrice33740, il faut donner un nom à la plage de données source si on veut l'utiliser dans une autre feuille.
cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 21 oct. 2017 à 20:26
Bonjour,
tu pourrais stp me montrer un exemple de ton code
?
cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 21 oct. 2017 à 20:42
Et comme mentionné par Patrice33740, il faut donner un nom à la plage de données source si on veut l'utiliser dans une autre feuille.

Je n'ai pas donné de nom à ma plage de données,
J'ai tapé ce code dans la source de validation tel quel, sans rien faire d'autre et ça fonctionne...

J'aimerais juste trouver une équivalence en vba mais je galère un peut,

J'ai bien une méthode qui fonctionne mais elle est bidon, et m'oblige à relancer mon fichier des que je modifie ma liste

Private Sub Workbook_Open()
On Error GoTo Erreur

Activeonglet = ActiveSheet.Name
Worksheets("Maintenance").Select
With Range("C5", Range("C" & Rows.Count)).Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:='ValidationType("Synthése", 6, 3, 50)
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With

End Sub

Function ValidationType(Feuille As String, Colonne As Integer, Ligne As Integer, longueur As Integer) As String
On Error Resume Next
For Boucle = Ligne To longueur
If Not Sheets(Feuille).Cells(Boucle, Colonne).Value = "" Then ValidationType = ValidationType + Sheets(Feuille).Cells(Boucle, Colonne).Value + ","
Next Boucle
End Function



Je n'ai pas tout copier/coller,
cette méthode fonctionne mais rempli automatique la source en texte1,texte2,texte3.....

du coup comme je l'ai dis plus haut, sur une modification de ma liste je dois relancer mon fichier pour qu'il prenne en compte le changement


Pour info je début en VBA, mais je suis un ancien programmeur vb.
Commenter la réponse de cs_MPi
Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention - 22 oct. 2017 à 11:15
0
Utile
2
Re,

Le problème est que la validation attend une formule mais pas une formule locale, i.e. la version anglaise de la formule.
Remplaces :
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=DECALER(Synthése_F3;0;0;NBVAL(Synthése_FF)-1;1)"

Par :
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=OFFSET(Synthése!$F$3,0,0,COUNTA(Synthése!$F:$F)-1,1)"


Parfois l'enregistreur de macro ne fonctionne pas !

cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 22 oct. 2017 à 17:21
Top !!!
Merci bcps...
Patrice33740 6549 Messages postés dimanche 13 juin 2010Date d'inscription 22 janvier 2018 Dernière intervention > cs_Alien 36 Messages postés mardi 4 juin 2002Date d'inscription 28 octobre 2017 Dernière intervention - 22 oct. 2017 à 17:37
Mets le post en résolu
Commenter la réponse de Patrice33740

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.