IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Webi Discussion :

Contrôler format alpha-numérique d'une chaine de caractères


Sujet :

Webi

  1. #1
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut Contrôler format alpha-numérique d'une chaine de caractères
    Bonjour
    Je cherche la formule pour contrôler un champs qui doit être du format : 4 Chiffres + 1 Lettre.
    En + : le chaine à analyser ne doit pas avoir 0000 ou 9999 pour les 4 chiffres.
    Pour l'instant, j'arrive à faire les contrôles :
    - chaine Null ou Pas
    - longueur chaine = 5
    - présence ou non des chiffres 0000 ou 9999

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si( (EstNul([Test])) Ou (Longueur([Test])<>5) Ou (Comparer([Test];"9999?")) Ou (Comparer([Test];"0000?")) ;1;0)
    Mais je ne vois pas comment contrôler que la chaine fait bien 4 chiffres + 1 lettre ?
    J'ai bien vu les caractères génériques "*" et "?" mais est-ce qu'ils en existent aussi pour représenter les caractères alpha et numérique ?
    merci beaucoup

  2. #2
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Comme je n'ai pas trouvé de caractères génériques, je suis parti sur la fonction Gauche() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si(EstNombre(Gauche([Test];4));0;1)
    j'ai testé à la base juste avec la fonction Gauche(), et il me retourne bien les 4 chiffres présents au début.
    Donc c'est OK pour la fonction Gauche().
    Par contre, je ne sais pas pourquoi, mais la fonction EstNombre() me retourne FALSE à chaque fois ?!
    Alors que j'ai récupère bien 4 chiffres à chaque fois dans les exemples que j'ai pris...
    Est-ce que quelqu'un voit pourquoi cette fonction EstNombre() plante dans mon cas ?
    Merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 364
    Points : 551
    Points
    551
    Par défaut
    Bonjour,

    Peut être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    =Si(Longueur([Test]) = 5 AND Non(EstErreur(EnNombre(Gauche([Test];4)))) AND Droite([Test];1) Entre( "A"; "Z"))
    Alors (
       Si( Non(EnNombre(Gauche([Test];4)) DansListe(0;9999))) Alors (1) Sinon (0))
    Sinon (0)
    Si j'ai tout compris (XI3 - Webi).

    Cordialement,

    [Edit] : EstNombre() attend un objet de type nombre. Gauche() te renvoie un objet de type chaîne. Ca limite sérieusement l'utilité de EstNombre().

  4. #4
    Membre habitué Avatar de lolymeupy
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2006
    Messages : 402
    Points : 180
    Points
    180
    Par défaut
    Salut dlra_
    Merci (encore) de ton aide.
    Oui, c'est ça !
    Pour ma part, j'ai ajouté la fonction EnNombre() à mon test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si(EstNombre(EnNombre(Gauche([Chaine];4)));0;1)
    Par contre, je me suis dit que s'il y avait un caractère alpha, alors j'obtiendrai une erreur et cela planterai mon calcul final (je dois - tjrs - compter mes champs manquants ou erronés).
    Mais en testant avec Gauche([Chaine];5), donc avec des caractères alphas, il ne plante pas et me retourne bien la valeur (1 ou 0) que je veux...
    Ce qui donne pour ma formule globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Si( (EstNul([Test])) Ou (Longueur([Test])<>5) Ou (Comparer([Test];"9999?")) Ou (Non(EstNombre(EnNombre(Gauche([Test];4))))) Ou (Comparer([Test];"0000?")) ;1;0)
    Cela revient au même que toi dlra_, sauf que comme je précise que je dois compter les valeurs incorrectes, je pars du principe que dès qu'une erreur est rencontrée, il "sort" de la liste des conditions donc il n'a pas à vérifier toutes les conditions - donc peut-être plus économique en "performance", non ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 364
    Points : 551
    Points
    551
    Par défaut
    Je n'ai pas testé mais d'après moi, le EstNul() est inutile car dans ce cas la longueur sera égale à 0.

    A - Dans ta formule des valeurs de type 1002§ ou encore 2500( seront certainement considérées valides.

    B - De la même manière, 25,3A devrait aussi fonctionner. On n'est pas à l'abri des nombres à virgule.

    Pour A, la réponse est dans la formule de mon post précédent.

    Pour B, je ferai un test du genre suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =EstErreur(EnNombre(SousChaîne([Test];1;1))+EnNombre(SousChaîne([Test];2;1))+EnNombre(SousChaîne([Test];3;1))+EnNombre(SousChaîne([Test];4;1)))
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/06/2011, 10h40
  2. Réponses: 4
    Dernier message: 08/06/2010, 16h02
  3. sortir deux valeurs numériques d'une chaine de caractères
    Par Ness2000 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/07/2008, 08h52
  4. vérification du format numérique d'une chaine
    Par Kiroukool dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/12/2007, 11h38
  5. Réponses: 3
    Dernier message: 01/02/2006, 18h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo