Aide sur vérification du nombre de lettres et de chiffres dans une donnée

Résolu
Lolyshia Messages postés 5 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 9 novembre 2008 - 9 nov. 2008 à 08:49
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009 - 9 nov. 2008 à 20:21
Bonjour

je dois créer un programme qui doit vérifier un numéro de licence. Il doit vérifier que dans mon numéro de licence est composé de trois lettre entre A et Z suivie de 10 chiffres. ex: MIC2344347879

mais je sais pas comment faire ca. J'ai essayé plusieurs fois mais j'ai toujours des erreurs voici ce que j'avais commencé (je sais que ca n'a pas de sens)

Merci de votre aide!
__________________

Function No_licence_valide(numero_licence as string,affichage as integer)

If Val(numero_licence, 4, 10) = 10 Then
Else
Call MsgBox("Vous devez avoir dix chiffres dans votre licence!")
affichage = 1
Exit Function
End If


If Val(numero_licence, 1, 3) = 0 Then
Else
Call MsgBox("Vous devez avoir trois lettres dans votre licence!")
affichage = 1
Exit Function
End If

End Function

16 réponses

lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
9 nov. 2008 à 09:33
Bonjour,

Alors une solution possible.
Tu parcours ta chaine, et tu regarde le caractere. Si le code ascii est compris entre x et y (désolée j'ai plus les valeurs la en tete) alors c'est un chiffre, si la valeur est comprise entre m et n alors c'est une lettre. Tu incrémente un compteur de chaque et au final tu compare la valeur du compteur.
en algo ca donne :
tant que pas fin de chaine alors
   si valeur ascci caractere est compris entre x et y (inclus) alors
      compteurNum = compteurNum+1
   sinon
      si valeur ascii caractere est compris entre (debpa et finpa) ET compris entre (debga et debga)
        compteurAlpha = compteurAlpha + 1
      fin si
   fin si
   si compteurAlpha 3 et compteurNum 10 alors
      Test ok
   sinon
      TestNOK
   fin si

Bon courage

S.L.B.
<hr />
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 08:54
Bonjour,

Je débute (il faut donc que tu te contentes de la réponse d'un débutant de chez débutant) :

Utilise directement et très facilement et simplement  l'opérateur Like (il est fort bien expliqué, avec exemples, dans ton aide en ligne)
0
Lolyshia Messages postés 5 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 9 novembre 2008
9 nov. 2008 à 08:56
merci de ta réponse
par contre dans mon cours, je n'ai pas appris l'opération LIKE dans mon cours
je vais me fais tapper sur les doigts si j'utilise ca
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 09:04
Ah ?
Faire, mais sans Like ? parce que imposé par ton exercice ?
C'est un exercice scolaire, donc ?
Je ne crois pas que ce forum serve à celà !

Mais bon :

Travaille alors avec une boucle utilisant Isnumeric et Mid ...
S'agissant d'un exercice, je n'irai pas plus loin, personnellement ...(et tu es maintenant guidé).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 09:08
Tu peux même n'utiliser, avec un peu de réflexion, que Left et Len dans une boucle (si tu n'as pas appris Mid non plus ...) ...
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 09:39
Bonjour,

Tu peux t'inspirer de ce qu'a écrit lillith212, mais en modifiant son algo ...

A lillith212 : gaffe ! la chaîne sera reconnue correcte, avec ton algo, même si elle est de type "#####AA##A###"
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
9 nov. 2008 à 09:40
Bonjour,

une boucle avec comparaison de char que tu met dans 2 tableau (les chr$)
1 contenant les chiffres l'autre contenant les lettres

a+
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 09:43
A gillardg: gaffe toi aussi ! la chaîne sera reconnue correcte, avec ta proposition , même si elle est de type "#####AA##A###"
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 09:54
Il pourrait également (mais je doute fort qu'il ait déjà vu la chose dans son "cours", s'il n'a pas appris l'opérateur Like bien plus simple ...) :
utiliser strconv pour transformer sa chaine en un seul tableau de bythes, puis :
vérifier que le Ubound = 9 et si oui :
- une boucle de 0 à 2 pour vérifier que les 3 1ers sont des lettres
- une boucle de 3 à 9 pour vérifier que les autres sont des chiffres

Mais il y a quand même plus simple, non, y compris sans Mid !
Left, Right, Len et Val suffisent conjugués à Asc

Deb de chez deb
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
9 nov. 2008 à 10:09
Bonjour,

jmf0, si tu mets l'alphabet dans un tableau , et que tu vérifies si # est dedans ça dezvrait pas retourner False avec chr()??

a+
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 10:13
Euh...
Avec mon tableau de Bytes  obtenu par StrConv ?
Mais qui t'a parlé d'alphabet ? et pourquoi chr() ??? je n'en aurais nul besoin !!
Mais te dire comment serait déjà faire ce que je ne veux pas !: son exercice imposé ...
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
9 nov. 2008 à 11:07
Bonjour,

je crois que nous pouvons tomber ( pas trop bas ) daccord sur 1 point
c'est un problème simple et il y a plusieurs façon de le résoudre

a+
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 nov. 2008 à 14:40
çà va juste en devenir totalement désagréable de venir même rien que lire, voilà tout ce qu'y sera gagné

sans oublier qu'à faux débutant



, vrai débutant et demi...
0
Lolyshia Messages postés 5 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 9 novembre 2008
9 nov. 2008 à 15:49
wow merci des reponses... oui c'est un cours que je fais afin de pouvoir programmer du VB plutard. Je dois programmer de la meme maniere qu'on me forme afin que mon stagiaire puisse comprendre ce que j'ai fait. (il prend le meme cours) mais l'idee des chaines avec mid et len c'est bien j'avais pensé à ça mais je ne savais pas comment le partir. Alors merci encore!
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
9 nov. 2008 à 15:58
Ouais...
Juste une petite remarque, à ce niveau :
Les opérateurs sont l'une des premières choses que l'on apprend, lorsque l'on apprend un langage de développement !
Et Like est l'un de ces opérateurs !
Et ta chaine est bonne lorsque, tout simplement :
la_chaine Like "[A-Z][A-Z][A-Z]##########"
est vérifié à True !!!
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
9 nov. 2008 à 20:21
Bonsoir,
Pour info en prenant le code ascii tu n'a pas de problème avec une chaine de type #######
Ensuite, pour les caracteres spéciaux, tu fais juste un controle de touche afin de permettre que la saisir des alpha et des numériques.
Bonne soirée

SLB
0
Rejoignez-nous