GNT sans publicité, site mobile, fonctionnalitées exclusives...

Validation NAS canadien sans VBA

Le
Denys
Bonjour à tous,

Existe-t-il une formule pour valider un numéro d'assurance sociale
canadien ? Je connais la version VBA, mais cette fois j'aimerais avoir
une formule sans VBA, autrement dit, si j'entre un numéro en B1, je
mettrais la formule en C1 qui dirait si le no est valide ou pas.

Merci pour votre temps.et Joyeuses Fêtes.

Denys
Lire les 27 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 6
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #22953261
Bonjour,

L'idéal est une procédure comme ceci dans le module de la feuille
où l'action se déroule. Tu adaptes Range("C:C") de la procédure
pour l'adresse de ta plage de cellules de ton application.

Ce code permet la saisie du code postal en minuscule et sans
espace après les 3 et 4 nièmes caractères. Si au lieu d'un message et
d'un format de cellule, tu veux utiliser une autre colonne pour
inscrire vrai ou faux, cela peut s'adapter !

'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rg As Range
Set Rg = Intersect(Target, Range("C:C"))
Application.EnableEvents = False
If Not Rg Is Nothing Then
For Each c In Rg
If c <> "" Then
c.Value = UCase(Application.Trim(c))
If c.Value Like "[A-Z][0-9][A-Z] [0-9][A-Z][0-9]" Or _
c.Value Like "[A-Z][0-9][A-Z][0-9][A-Z][0-9]" Then
c.Value = Left(c, 3) & " " & Right(c, 3)
c.Interior.ColorIndex = xlNone
c.Font.ColorIndex = xlAutomatic
Else
MsgBox "le format du code postal n'est pas canadien."
c.Interior.ColorIndex = 3
c.Font.ColorIndex = 2
End If
Else
c.Interior.ColorIndex = xlNone
c.Font.ColorIndex = xlAutomatic
End If
Next
End If
Application.EnableEvents = True
End Sub
'--------------------------------------------

MichD
--------------------------------------------


"Denys" a écrit dans le message de groupe de discussion :


Bonjour à tous,

Existe-t-il une formule pour valider un numéro d'assurance sociale
canadien ? Je connais la version VBA, mais cette fois j'aimerais avoir
une formule sans VBA, autrement dit, si j'entre un numéro en B1, je
mettrais la formule en C1 qui dirait si le no est valide ou pas....

Merci pour votre temps....et Joyeuses Fêtes....

Denys
Denys
Le #22953431
Bonjour Denis,

Merci bien mais c'est pour les numéros d'assurance sociale, pas les
codes postaux !! :-)

En fait, je crois que ce serait une formule Mod 10 ou quelque chose
dans le genre...

Bonne journée

Denys
michdenis
Le #22953471
Ok, désolé ;-)


POUR VALIDER UN NAS, PROCÉDER DE LA FAÇON SUIVANTE :
-- INSCRIRE le NAS sur une feuille de papier, comme suit: 044-096-857;
-- COCHER le deuxième, quatrième, sixième et huitième chiffre;
-- INSCRIRE le NAS de nouveau, mais cette fois en multipliant par deux
les chiffres mentionnés, comme suit : 084-0912-8107.

LORSQUE CETTE MULTIPLICATION DONNE UN NOMBRE À DEUX CHIFFRES, ALORS :
-- ADDITIONNER ces deux chiffres pour n'en faire qu'un seul,
-- ET additionner l'ensemble de ces chiffres, soit : 0+8+4+0+9+1+2+8+1+0+7 = 40.

SI LE TOTAL QUI EN RÉSULTE EST UN MULTIPLE DE DIX, LE NAS EST VALIDE.
Donc, le NAS ci-dessus est valide, puisque le total est 40.

Si tu as besoin d'une fonction personnalisée pour faire cela, je serai de retour
en PM...et j'y regarderai de plus près si j'ai le temps.


MichD
--------------------------------------------
"Denys" a écrit dans le message de groupe de discussion :


Bonjour Denis,

Merci bien mais c'est pour les numéros d'assurance sociale, pas les
codes postaux !! :-)

En fait, je crois que ce serait une formule Mod 10 ou quelque chose
dans le genre...

Bonne journée

Denys
isabelle
Le #22953531
bonjour Denys,

en attendant que Denis revienne,

Sub Test_NAS()
x = Application.Substitute(Range("A1"), "-", "")
For i = 1 To Len(x)
Select Case i
Case 2, 4, 6, 8
y = Mid(x, i, 1) * 2
If y >= 10 Then y = CDbl(Mid(y, 1, 1)) + CDbl(Mid(y, 2, 1))
r = r + y
Case Else
r = r + CDbl(Mid(x, i, 1))
End Select
Next
MsgBox r
End Sub

passe de bonne fête,
isabelle

Le 2010-12-23 11:10, michdenis a écrit :
POUR VALIDER UN NAS, PROCÉDER DE LA FAÇON SUIVANTE :
-- INSCRIRE le NAS sur une feuille de papier, comme suit: 044-096-857;
-- COCHER le deuxième, quatrième, sixième et huitième chiffre;
-- INSCRIRE le NAS de nouveau, mais cette fois en multipliant par deux
les chiffres mentionnés, comme suit : 084-0912-8107.

LORSQUE CETTE MULTIPLICATION DONNE UN NOMBRE À DEUX CHIFFRES, ALORS :
-- ADDITIONNER ces deux chiffres pour n'en faire qu'un seul,
-- ET additionner l'ensemble de ces chiffres, soit : 0+8+4+0+9+1+2+8+1+0+7 = 40.

SI LE TOTAL QUI EN RÉSULTE EST UN MULTIPLE DE DIX, LE NAS EST VALIDE.
Donc, le NAS ci-dessus est valide, puisque le total est 40.

Si tu as besoin d'une fonction personnalisée pour faire cela, je serai de retour
en PM...et j'y regarderai de plus près si j'ai le temps.
isabelle
Le #22953801
pour une formulle perso,

Function nas(cellule As Range) As String
x = Application.Substitute(cellule, "-", "")
For i = 1 To Len(x)
Select Case i
Case 2, 4, 6, 8
y = Mid(x, i, 1) * 2
If y >= 10 Then y = CDbl(Mid(y, 1, 1)) + CDbl(Mid(y, 2, 1))
r = r + y
Case Else
r = r + CDbl(Mid(x, i, 1))
End Select
Next
If r Mod 10 = 0 Then
nas = "VRAI"
Else
nas = "FAUX"
End If
End Function


isabelle

Le 2010-12-23 11:48, isabelle a écrit :
bonjour Denys,

en attendant que Denis revienne,

Sub Test_NAS()
x = Application.Substitute(Range("A1"), "-", "")
For i = 1 To Len(x)
Select Case i
Case 2, 4, 6, 8
y = Mid(x, i, 1) * 2
If y >= 10 Then y = CDbl(Mid(y, 1, 1)) + CDbl(Mid(y, 2, 1))
r = r + y
Case Else
r = r + CDbl(Mid(x, i, 1))
End Select
Next
MsgBox r
End Sub

passe de bonne fête,
isabelle

Le 2010-12-23 11:10, michdenis a écrit :
POUR VALIDER UN NAS, PROCÉDER DE LA FAÇON SUIVANTE :
-- INSCRIRE le NAS sur une feuille de papier, comme suit: 044-096-857;
-- COCHER le deuxième, quatrième, sixième et huitième chiffre;
-- INSCRIRE le NAS de nouveau, mais cette fois en multipliant par deux
les chiffres mentionnés, comme suit : 084-0912-8107.

LORSQUE CETTE MULTIPLICATION DONNE UN NOMBRE À DEUX CHIFFRES, ALORS :
-- ADDITIONNER ces deux chiffres pour n'en faire qu'un seul,
-- ET additionner l'ensemble de ces chiffres, soit :
0+8+4+0+9+1+2+8+1+0+7 = 40.

SI LE TOTAL QUI EN RÉSULTE EST UN MULTIPLE DE DIX, LE NAS EST VALIDE.
Donc, le NAS ci-dessus est valide, puisque le total est 40.

Si tu as besoin d'une fonction personnalisée pour faire cela, je serai
de retour
en PM...et j'y regarderai de plus près si j'ai le temps.
Publicité
Suivre les réponses
Poster une réponse
Anonyme