Bonjour,
je veux contrôler la valeur d'une cellule et je veux que de l'alphabétique.
je lève une erreur si j'ai un caractère en numérique.
je ne sais pas comment effectuer cette vérification.
merci d'avance
Via
Version imprimable
Bonjour,
je veux contrôler la valeur d'une cellule et je veux que de l'alphabétique.
je lève une erreur si j'ai un caractère en numérique.
je ne sais pas comment effectuer cette vérification.
merci d'avance
Via
Bonjour,
analyse ce que fait ceci :
Code:
1
2
3
4
5
6
7
8
9 Private Sub Command1_Click() MsgBox coucou("abé") MsgBox coucou("yré1 c") End Sub Private Function coucou(machaine As String) As Boolean If Not machaine Like "*#*" Then coucou = True End Function
ok, je comprend ce que tu fais mais je ne comprend pas pourquoi tu as ca comme expression de test "*#*" ???
merci
Via
"*" => "N'importe quoi
"#" => Un chiffre
"*" => "N'importe quoi
Donc, si tu as un chiffre parmi deux n'importe quoi, le chiffre est découvert et la proposition est vrai. Donc, si "Not la condition" il n'y a pas de chiffre :mouarf:
viavba, via VBA, regarde l'aide en ligne à Like, tu auras une meilleure explication :?
Désolé ucfoutu, je n'ai pas voulu me priver de ce plaisir :aie:
ok j'ai compris avec l'aide mais je n'arrive pas a faire exactement ce que je veux.
voila la complication que j'ai, je travail sur des numeros ISIN.
leur formats est de 12 carateres, dont les 2 premiers sont alpha et les 10 autres sont numeriques.
et donc voila ou j'en suis et ca ne fonctionne pas pour la 3 eme expressions qui devrais me donner faux alors que ca me renvoie vrais.
merci d'avanceCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Private Sub Command1_Click() MsgBox coucou("abé") MsgBox coucou("FR1234567890") MsgBox coucou("011234567890") MsgBox coucou("FR12345678") MsgBox coucou("01azertyuiop") End Sub Private Function coucou(machaine As String) As Boolean Zonealpha = Left(machaine, 2) If Len(machaine) <> 12 Then Exit Function End If 'compter le nombre de caracter ZoneNum = Right(machaine, 10) If ZoneNum Like "##########" Then coucou = True Else Exit Function End If If Not Zonealpha Like "#" Then coucou = True Else coucou = False End If End Function
Via
voila ce que j'ai fais mais il n'exist pas plus simple ????
viaCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 Private Sub Command1_Click() MsgBox coucou("abé") MsgBox coucou("FR1234567890") MsgBox coucou("011234567890") MsgBox coucou("FR12345678") MsgBox coucou("01azertyuiop") MsgBox coucou("0F1234567890") End Sub Private Function coucou(machaine As String) As Boolean ZoneAlpha = Left(machaine, 2) ZoneNum = Right(machaine, 10) If Len(machaine) <> 12 Then Exit Function Else If Not ZoneNum Like "##########" Then Exit Function Else rest = Right(ZoneAlpha, 1) If Not Left(ZoneAlpha, 1) Like "#" And Not Right(ZoneAlpha, 1) Like "#" Then coucou = True Else Exit Function End If End If End If End Function
Plutôit que de nous montrer ton code, peux-tu simplement, s'il te plait, nous dire avec précision le but que tu veux atteindre ?
Il n'est déjà plus celui de ta première formulation, qui était :
Alors : expose donc (ce que tu aurais dû faire d'entrée de jeu) ton problème (avec des mots et une logique) et tu auras la réponse adaptée.Citation:
je veux controle un la valeur d'une cellule et je veux que de l'alphabetique.
Peut être...Code:
1
2
3
4
5
6
7 Private Function coucou(machaine As String) As Boolean If Len(machaine) <> 12 Then Exit Function coucou = Not machaine Like "##*" _ And Not machaine Like "#*" _ And Not machaine Like "?#*" _ And machaine Like "??##########" End Function
Bon...
Je vais m'en tenir à ta seule nouvelle explication de ce que tu veux, à savoir :
Vrai (true) si 2 alpha et 10 numériques, puisque tu t'es limité à celà, je n'irai pas plus loin, y compris si, pour toi, devrait être également vrai 2 alpha et un nombre de numériques inférieur ou égal à 10 (qui se traiterait alors différemment et démontrerait l'importance d'être très précis dans ses questions).
Voilà donc, sur la base de tes explications, telles qu'elles sont :
L'affaire est-elle réglée ? si oui ===>> résolu.Code:
1
2
3
4
5
6
7
8
9
10 Private Sub Command2_Click() 'les 2 premiers sont alpha et les 10 autres sont numeriques. MsgBox coucou("aa1234567890") ' touyt est bon donc true MsgBox coucou("aa123456789") ' manquent 2 numériques donc false MsgBox coucou("a1234567890") ' manquent 1 alpha donc false End Sub Private Function coucou(machaine As String) As Boolean If Not Left(machaine, 2) Like "*#*" And Mid(machaine, 3) Like String(10, "#") Then coucou = True End Function
merci pour ta solurtion.
voila a comment j'utilise ce code.
Code:
1
2
3
4
5
6
7
8
9
10
11 Sub test() Dim x As ClsColSicavs Set x = New ClsColSicavs x.Ajouter "aa1234567890" ' touyt est bon donc true x.Ajouter "aa123456789" ' manquent 2 numériques donc false x.Ajouter "a 1234567890" ' manquent 1 alpha donc true x.Ajouter "1a01234567890" ' manquent 1 alpha donc false End Sub
Code:
1
2
3
4
5
6
7
8
9
10
11
12 ' Module de classe ClsColSicavs Option Explicit Dim Sivcavs As New Collection Function Ajouter(Code_ISIN As String) As ClsSicav Dim obj_Sicav As ClsSicav Set obj_Sicav = New ClsSicav obj_Sicav.Code_ISIN = Code_ISIN Sivcavs.Add Code_ISIN Set Ajouter = obj_Sicav End Function
voila ce que je fais et je cherche des info sur les collections justement dans ce poste la pour recupere des info sur plusieurs feuille excel en ordonnant ca donne une collection.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 ' Module de classe ClsColSicav Dim Collection_ISIN As String Public Event Information(Message As String) 'Lecture Property Get Code_ISIN() As String Code_ISIN = Collection_ISIN End Property 'Ecriture Property Let Code_ISIN(ISIN As String) 'si c'est vide on deguage 'si ca ne commence pas par 2 alpha => on deguage 'si ca ne comporte pas 12 caracteres => on deguage 'si les 10 derniers caracteres ne sont pas numerique => on deguage If Len(ISIN) <> 12 Then Err.Raise vbError + 1, "ISIN", "Le numero ISIN est formé de 12 caractere alpha-numerique :" & vbNewLine & ISIN Else If Not Left(ISIN, 2) Like "*#*" Then If Mid(ISIN, 3) Like String(10, "#") Then Collection_ISIN = ISIN Else Err.Raise vbError + 1, "ISIN", "Le numero ISIN comprendre 10 caracteres Numerique et ce n'est pas le cas :" & vbNewLine & ISIN End If Else Err.Raise vbError + 1, "ISIN", "Le numero ISIN doit commencé par deux caractere et ce n'est pas le cas :" & vbNewLine & ISIN End If End If End Property
le but est de recuperer les info au moment voulu pour les afficher en interogeant la collection.
donc dans un premier temps je parametre les proprietes de ma class.
merci beaucoup
Via
si pas de reponse avant la fin de journée, je met resolu bien sur !
Bonjour
Tu peux utiliser ceci
Code:
1
2
3 Function EstNumeroISIN(Valeur As String) As Boolean If Valeur Like "[A-z][A-z]##########" Then EstNumeroISIN = True End Function
Bonjour, Pierre Fauconnier,
C'est à voir (comme toujours), car ta formule écarte d'autres signes, mais également d'autres caractères alphabétiques, tels ceux accentuiés...
C'est donc toujours assez délicat, en la matière.
Le code suivant :
ne serait pas non plus parfait. Il laisserait passer les caractères accentués, mais également d'autres signes ;)Code:If machaine Like "[!0-9][!0-9]##########" Then coucou = True
On pourrait penser, bien sûr, à développer encore plus, c'est certain, pour coller exactement à ce que l'on permet ou non, mais : reste à savoir et exposer ce que l'on accepte ou non avec détails et précision.
Il n'y a pas de règle générale, mais uniquement des règles adaptées à ce que l'on veut et exprime sans laisser la moindre place au moindre détail oublié.
:nono: La question porte précisément sur le code ISIN. Il n'est donc pas question d'une règle générale mais de la règle portant sur le code ISIN...
Le code ISIN est un code international à 12 signes dont les deux premiers sont alphabétiques et codent le pays d'émission. Il n'est pas question ici de caractères accentués ou autres, mais seulement des caractères alphabétiques (normalement majuscules) de l'alphabet international.
Dès lors, on pourrait pratiquement restreindre la vérification à
pour exclure la saisie de minuscules, car les codes ISIN sont toujours exprimés en majuscules.Code:"[A-Z][A-Z]##########"
Il faut noter que si l'on veut vérifier qu'un numéro est correct (et pas uniquement construit avec une suite de signes acceptables), il faut utiliser un algorithme spécifique, car les chiffres utilisés relèvent d'une table de conversion et le dernier signe est un digit de contrôle. Le contrôle via les expressions régulières comme je l'ai montré ici ne vérifie que la séquence de signes.
Les codes ISIN et la codification sur deux lettres des pays
merci Pierre Fauconnier,
ta reponse ma convient parfaitement parce qu'en plus ca me supprime les espaces et les minuscules.
par contre je test en deux parties pour lever une erreur avec des informations plus pertinante sur le refus de validé le code ISNI.Code:"[A-Z][A-Z]##########"
ca donne ca :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Property Let Code_ISIN(ISIN As String) 'si c'est vide on deguage 'si ca ne comporte pas 12 caracteres => Erreur 'si ca ne commence pas par 2 alpha et en MAJ => Erreur 'si les 10 derniers caracteres ne sont pas numerique => Erreur If Len(ISIN) <> 12 Then Err.Raise vbError + 1, "ISIN", "Le numero ISIN est formé de 12 caracteres alpha-numerique :" & vbNewLine & ISIN Else If Left(ISIN, 2) Like "[A-Z][A-Z]" Then If Mid(ISIN, 3) Like "##########" Then Collection_ISIN = ISIN Else Err.Raise vbError + 1, "ISIN", "Le numero ISIN 10 caracteres Numerique et ce n'est pas le cas :" & vbNewLine & ISIN End If Else Err.Raise vbError + 1, "ISIN", "Le numero ISIN doit commencer par deux caracteres en MAJUSCULE et ce n'est pas le cas :" & vbNewLine & ISIN End If End If End Property