Validation par le code [Résolu]

Signaler
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020
-
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
-
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

Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
21
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 ???

Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

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
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

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...
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
21 >
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

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.
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020
>
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021

Tu as qu'elle version ?
Chez moi ça marche avec 2010 et 2013
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
21 >
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

Sur ce PC 2003 et 2007 et sur mes portables 2010 et 2016
Avec 2007 ça fonctionne pas.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
18
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.
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

Bonjour,
tu pourrais stp me montrer un exemple de ton code
?
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

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.
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
21
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 !

Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

Top !!!
Merci bcps...
Messages postés
8536
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
8 mai 2021
21 >
Messages postés
41
Date d'inscription
mardi 4 juin 2002
Statut
Membre
Dernière intervention
23 août 2020

Mets le post en résolu