XL 2013 Validation de chaîne

dionys0s

XLDnaute Impliqué
Bonjour le forum,

j'aimerais, sans passer par du VBA, créer une formule de validation de chaîne de caractères (contenue dans une seule cellule) selon les règles suivantes :
  1. Ne peut être composé que des 26 lettres de l'alphabet (majuscule et minuscule), des chiffres et du caractère underscore.
  2. Ne peut pas commencer par un chiffre ou un underscore.
La formule renverrait VRAI ou FAUX selon que la chaîne testée est conforme aux règles ou non.
C'est faisable de faire ce genre de test sur un seul caractère, mais sur une chaîne dont la limite n'est pas fixe, je ne vois pas comment faire par formule. Si c'est possible, merci d'avance pour toute aide :)
 

dionys0s

XLDnaute Impliqué
Bonsoir Cisco,
Bonsoir le forum

Marrant cette astuce avec le gestionnaire de nom qui fait office de résultat intermédiaire. Merci.
Cela dit la fonction n'est pas tout à fait correcte puisque à part en 1er caractère, on a le droit aux chiffres et à l'underscore.
 

dionys0s

XLDnaute Impliqué
Bonsoir Cisco, bonsoir le forum

Je n'ai pas changé de règle...
Bonjour le forum,

  1. Ne peut être composé que des 26 lettres de l'alphabet (majuscule et minuscule), des chiffres et du caractère underscore.
  2. Ne peut pas commencer par un chiffre ou un underscore.
La formule renverrait VRAI ou FAUX selon que la chaîne testée est conforme aux règles ou non.
C'est faisable de faire ce genre de test sur un seul caractère, mais sur une chaîne dont la limite n'est pas fixe, je ne vois pas comment faire par formule. Si c'est possible, merci d'avance pour toute aide :)

Quelques exemples donc :
UnNom => VRAI
1Nom => FAUX
Un_Nom => VRAI
_Nom => FAUX
Nom_1 => VRAI

D'avance, merci
 

CISCO

XLDnaute Barbatruc
Bonjour

STXT(Feuil1!$A1;1;1) renvoie un caractère, par exemple a, _, 1 au format texte. Donc ESTNUM(STXT(Feuil1!$A1;1;1)) renverra toujours FAUX, et cela ne nous convient pas.

Cette partie de la formule, ESTNUM(--STXT(Feuil1!$A1;1;1)), sert à savoir si le premier caractère est un nombre, et pas une lettre ou un underscore. Par exemple, on a ESTNUM(--a) qui renvoie FAUX car a n'est pas un chiffre. Si le premier caractère est un chiffre au format texte, le fait de mettre -- devant le transforme en chiffre au format nombre. Par ex ESTNUM(--5)=ESTNUM(5)=VRAI. Donc, on a l'information désirée, FAUX avec les lettres, et VRAI seulement avec les chiffres.

Ici, on pourrait faire avec un seul moins, avec ESTNUM(-STXT(Feuil1!$A1;1;1)), car, pour nous, dans ce cas, peu importe que ce nombre soit positif ou négatif. J'ai mis deux moins, un peu, par "réflexe".

@ plus

P.S : La formule que je t'ai proposée fonctionne comme cela :
Le premier caractère est-il un underscore ? --> si oui, VRAI, si non FAUX
+ Le premier caractère est-il un chiffre ? --> si oui, VRAI, si non, FAUX
+ Les caractères sont-ils autre chose que des lettres en majuscules ou des minuscules ? --> Somme de VRAI et de FAUX
- Les caractères sont-ils un underscore --> soustraction de VRAI et FAUX
- Les caractères sont-ils des chiffres --> soustraction de VRAI et de FAUX

Si l'ensemble donne 0, c'est que la règle proposée est respecté. Si il donne autre chose, c'est qu'elle n'est pas respectée.

Pour voir comment cela fonctionne , Menu "Formules", puis "Évaluation de formule".

@ plus
 
Dernière édition:

dionys0s

XLDnaute Impliqué
Bonjour Cisco,
bonjour le forum,

je m'arrache les cheveux sur le problème suivant : pourquoi lorsque j'utilise la formule de votre fichier en validation de données (personnalisée), la saisie de noms erronés n'est jamais bloquée.

D'avance merci pour votre temps et votre aide :)
 

Discussions similaires

Statistiques des forums

Discussions
312 097
Messages
2 085 261
Membres
102 844
dernier inscrit
atori2