'Le numéro SIREN INSEE comporte 9 chiffres.
'Pour vérifier que ce chiffre est bon l'INSEE utilise la formule de Luhn.
'On parcours les chiffres constituant le numéro de SIREN, on multiplie par 2
'les chiffres de rang pair et on fais la somme de tous les chiffres obtenus.
'Exemple : SIREN 732829320
'Chiffres de rang impair 7,2,2,3,0 non modifiés
'Chiffres de rang pair 3,8,9,2 multipliés par 2 ça donne 6, 16, 18, 4
'On additionne tous les chiffres : 7+2+2+3+0+6+1+6+1+8+4=40
'Si le nombre obtenu est un multiple de 10, le nombre est correct : ici 40 est un multiple de 10...
Source / Exemple :
Dans le module :
Option Explicit
'définition des variables utilisées et du tableau
Public i, j, k, a, b As Integer 'variables des boucles FOR
Public T(1 To 9, 1 To 4) As Integer 'tableau à deux dimension ou matrice
Public S, S1, S2, S3, intReponse, intReponse2 As Integer 'variables contenant des sommes
Public repN As Variant 'réponse de l'utilisateur
Public Sub initialise() 'cette procédure initialise les variables et la matrice (valeur o par défaut)
For a = 1 To 9
For b = 1 To 4
T(a, b) = 0
Next b
Next a
S = S1 = S2 = S3 = 0
End Sub
Public Sub Transform(repN) 'procédure de transformation du nombre INSEE
On Error GoTo NbrEntier 'vérification que l'utilsateur entre bien un nombre entier
Call initialise
If Len(repN) <> 9 Then 'vérification que l'utilisateur entre bien 9 chiffres
intReponse = MsgBox("Veuillez entrer un nombre entier à 9 chiffres svp...", vbCritical, "Erreur")
End
Else 'si tout est OK on fait les transformations
For i = 1 To 9
T(i, 1) = Mid(repN, i, 1)
Next i
For j = 1 To 9 Step 2
T(j, 2) = Mid(repN, j, 1)
S1 = S1 + T(j, 2)
Next j
For k = 2 To 8 Step 2
If 2 * Mid(repN, k, 1) < 10 Then
T(k, 3) = 2 * Mid(repN, k, 1)
S2 = S2 + T(k, 3)
Else
T(k, 4) = 2 * Mid(repN, k, 1)
S3 = S3 + 1 + T(k, 4) Mod 10
End If
Next k
S = S1 + S2 + S3
Call testS
NbrEntier:
If Err.Number = 13 Then
intReponse2 = MsgBox("Veuillez entrez un nombre entier svp !")
End
End If
End If
End Sub
Public Sub testS() 'procédure de contrôle du nombre INSEE
If S Mod 10 = 0 Then
MsgBox ("Le nombre INSEE est correct")
End
Else
MsgBox ("Le nombre INSEE est incorrect, recommencez!")
End
End If
End Sub
Dans la form :
Public Sub Form_Load()
repN = InputBox("Entrez le nombre INSEE à 9 chiffres", "Nombre INSEE")
Call Transform(repN)
End Sub
Conclusion :
Ce code n'est pas vraiment opérationnel, il manque des choses et je n'arrive pas à le perfectionner.
Je remercie tous ceux qui voudront bien m'aider, en particulier pour faire en sorte que si l'utilisateur se trompe et que le numéro
INSEE n'est pas bon, que le programme repropose de faire un calcul sans devoir relancer le programme...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.