Validation par le code

Résolu
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021
- Modifié le 19 oct. 2017 à 21:07
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
- 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.

3 réponses

Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
21
20 oct. 2017 à 10:41
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 ???

0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

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
0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

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...
0
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
21 > cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

Modifié le 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.
0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021
> Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022

22 oct. 2017 à 17:18
Tu as qu'elle version ?
Chez moi ça marche avec 2010 et 2013
0
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
21 > cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

22 oct. 2017 à 17:36
Sur ce PC 2003 et 2007 et sur mes portables 2010 et 2016
Avec 2007 ça fonctionne pas.
0
cs_MPi
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
20
20 oct. 2017 à 17:04
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.
0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

21 oct. 2017 à 20:26
Bonjour,
tu pourrais stp me montrer un exemple de ton code
?
0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

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.
0
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
21
22 oct. 2017 à 11:15
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 !

0
cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

22 oct. 2017 à 17:21
Top !!!
Merci bcps...
0
Patrice33740
Messages postés
8549
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
7 mai 2022
21 > cs_Alien
Messages postés
43
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
4 septembre 2021

22 oct. 2017 à 17:37
Mets le post en résolu
0