Validation par le code

Résolu
cs_Alien Messages postés 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024 - Modifié le 19 oct. 2017 à 21:07
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 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 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
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 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21 > cs_Alien Messages postés 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
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 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
22 oct. 2017 à 17:18
Tu as qu'elle version ?
Chez moi ça marche avec 2010 et 2013
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21 > cs_Alien Messages postés 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
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 17 août 2018 23
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 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
21 oct. 2017 à 20:26
Bonjour,
tu pourrais stp me montrer un exemple de ton code
?
0
cs_Alien Messages postés 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
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 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 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 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
22 oct. 2017 à 17:21
Top !!!
Merci bcps...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21 > cs_Alien Messages postés 70 Date d'inscription mardi 4 juin 2002 Statut Membre Dernière intervention 23 mars 2024
22 oct. 2017 à 17:37
Mets le post en résolu
0
Rejoignez-nous