Clef de Sécurité Sociale

Comment vérifier ou calculer une clef de sécurité sociale (française) en VBA ?

Solution

Le programme Visual Basic suivant (à taper dans un module standard) effectue le calcul et renvoie une chaîne de caractères de 2 positions. Vous pouvez ensuite comparer la clef fournie par l’utilisateur à celle calculée par la fonction ClefSecu().

Exemple d’utilisation

  1. Imaginez que vous ayez une zone de texte pour la saisie du numéro de sécurité sociale (sur un formulaire, donc). Cette zone s’appellera txtNumero pour l’exemple.
  2. Ajoutez le code suivant dans l’événement Avant MAJ du formulaire concerné :

 

Vous aimerez aussi...

10 réponses

  1. Hervé Inisan dit :

    Papyty > Merci pour le retour, ça pourra aider quelques visiteurs.

  2. Papyty dit :

    Bonjour,

    Exemple d’utilisation avec formatage et en tenant compte des N° Corse.

    Private Sub Nss_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Dim nc As Integer, S As String, S1 As String, S2 As String
    Nss = UCase(Nss)
    S = Replace(Trim(Nss),  » « , «  »)
    S = Replace(S, « | », «  »)
    If InStr(7, S, « a », 1) = 7 Then
    S = Replace(Trim(S), « a », 0)
    S = S – 100000000
    End If
    If InStr(7, S, « b », 1) = 7 Then
    S = Replace(Trim(S), « b », 0)
    S = S – 200000000
    End If
    nc = Len(S)
    If nc = 0 Then Exit Sub
    If nc <> 15 Or Not IsNumeric(S) Then
    MsgBox « Le numéro de sécurité sociale doit comporter 15 chiffres ou être vide », vbExclamation, « Info »
    Cancel = True
    Exit Sub
    Else
    S1 = Left(S, 13)
    S2 = Right(S, 2)
    If S2 <> ClefSecu(S1) Then
    MsgBox « Le numéro de sécurité sociale comporte une erreur. » & Chr(10) _
    & « Veuillez le corriger ou le laisser vide », vbExclamation, « Info »
    Cancel = True
    End If
    End If
    End Sub

    Private Sub Nss_Change()
    Dim nc As Integer, S As String
    Nss = UCase(Nss)
    S = Replace(Trim(Nss),  » « , «  »)
    S = Replace(S, « | », «  »)
    nc = Len(S)
    If nc = 0 Then Exit Sub
    If (nc <> 15 And nc <> 13) Then
    If S <> Nss Then Nss = S
    Exit Sub
    Else
    S = Format(S, IIf(nc = 15, « 0 00 00 00 000 000|00 », _
    « 0 00 00 00 000 000 »))
    If InStr(7, S, « a », 1) = 7 Then
    S = Replace(Trim(S), « a », 0)
    S = Format(S, IIf(nc = 15, « 0 00 00 00 000 000|00 », _
    « 0 00 00 00 000 000 »))
    Mid(S, 10, 1) = « A »
    End If
    If InStr(7, S, « b », 1) = 7 Then
    S = Replace(Trim(S), « b », 0)
    S = Format(S, IIf(nc = 15, « 0 00 00 00 000 000|00 », _
    « 0 00 00 00 000 000 »))
    Mid(S, 10, 1) = « B »
    End If
    Nss = S
    End If
    End Sub

    Si cela peux aider, dommage la mise en forme n’est conservée,

    @+

    Papyty

  3. Hervé Inisan dit :

    @lamu Content que ça fonctionne. 🙂 Bon développement !

  4. lamu dit :

    Bonjour Monsieur,
    Désolé pour le retard, je viens tout juste d’appliquer vos dernières recommandations, et « ÇA FONCTIONNE merveilleusement.
    Mes félicitations pour le site et je vous remercie pour votre aide. Pour info, je gère une petite base de données (avec plusieurs utilisateurs) et je voulais installer un numéro de sécu ds un formulaire afin de ne pas avoir de doublons, et grâce à vous bien sûre, j’ai réussi. (je « ramais » depuis 1 mois sur ce numéro de sécu).
    Avec mes Compliments. Merci.

  5. Hervé Inisan dit :

    @lamu J’ai posté un bout de code amélioré qui devrait corriger le problème. Remplace entière l’ancien bloc donné dans le paragraphe Exemple d’utilisation par le nouveau. Ça devrait mieux fonctionner !

  6. lamu dit :

    D’abord, je vous remercie de m’avoir répondu. En effet, j’ai mis en place les 2 portions de code, après avoir valider l’enregistrement des 13 premiers chiffres, j’ai comme message « Numéro de sécurité sociale incorrect ! », et c’est à ce moment là que je n’arrive plus à comprendre (j’ai un champ [Clef] sur mon formulaire et même si je valider avec la clef à 2 chiffres du [txtNumero], le résultat est le même: « Numéro de sécurité sociale incorrect ! ». Je pense que le travail de comparaison de la [Clef] ne se fait pas dans ma démarche, mais après plusieurs jours d’essaies, je n’arrive toujours pas à solutionner cette gestion du Numéro de Sécu sur mon formulaire.
    Avec mes Compliments. Merci.

  7. Hervé Inisan dit :

    @lamu Si tu as mis en place les 2 portions de code (la fonction et l’exemple du dessous), tu dois avoir un message lorsque tu essaies de valider un formulaire et que la clef est incorrecte.

    En gros, tu fais une saisie complète de l’enregistrement, puis tu valides par Maj+Entrée (ou menu Enregistrement / Sauvegarder l’enregistrement).

  8. lamu dit :

    Bonjour,
    Je n’arrive pas à faire afficher « ClefSecu = « #Erreur » » dans mon formulaire, doit-on ajouter une zone supplémentaire pour la clé.
    (Sinon, je pense que j’ai dû compris à moité le programme).
    Je vous remercie davance.

  9. Hervé Inisan dit :

    aroutcheff > C’est fait 🙂 J’ai ajouté l’exemple dans l’article lui-même.

  10. aroutcheff dit :

    Bonjour,
    est-il possible d’afficher un exemple pour utiliser cette fonction ?
    merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *