[Résolu] ! Contrôle de saisie - N° SS

David2Coree

XLDnaute Junior
Bonjour à toute la communauté d'XL !!!

Je fais appel à vos âmes charitables s'il-vous-plaît.
je suis en train de finaliser, une petite calculette pour mes collègues de travail et je m'aperçois que je n'arrive pas du tout à atteindre mon objectif.
En effet, dans la zone de saisie du n° S.S, j'aimerai pouvoir contrôler si le champs est correctement saisie.
C'est-à-dire, dans le fichier joint, en B6 :
  1. si la personne saisie du texte, alors un message box apparaît et demande une saisie correcte
  2. si le nombre de chiffre saisi est inférieurà 13 ou suppérieur à 15 chiffres alors message d'alerte de non conformité

Mon blocage est que j'utilise une validation de données personnalisée (je mets cette formule : =SI(ET(ESTNUM(B6);NBCAR(A47));B6;"")) où lors de la saisie d'un caractère alphabétique, j'ai bien le message d'erreur mais lors de la saisie des chiffres, peu importe le nombre, le résultat est accepté alors qu'en A47 j'ai saisie 13 chiffres.
Donc voici mes questions :
  1. Croyez-vous que c'est la bonne solution que je passe par une validation de données ?
  2. Dois-je utiliser un useform ? Je ne suis pas trop fan, car sur les discussions déjà ouvert à ce sujet, les 13 ou 15 caractères sont visibles. Et moi, je n'aime pas ce format d'affichage. https://www.excel-downloads.com/threads/format-textbox-securite-sociale.187852/ ou https://www.excel-downloads.com/threads/format-automatique-textbox.128917/
  3. Serait-il possible qu'un expert VB me fournisse le code de contrôle de saisie sans l'affichage des "0" ?

Je vous remercie d'avance et vous souhaite une bonne soirée et un bon week-end !
Cordialement
David
 

Pièces jointes

  • calc_xldownloads.xls
    70.5 KB · Affichages: 94
Dernière édition:

excfl

XLDnaute Barbatruc
Re : Contrôle de saisie - N° SS

Bonsoir le forum,

Une autre manière de contrôler la saisie d'un numéro de sécurité sociale : la clé de contrôle.

excfl
 

Pièces jointes

  • numéro de sécurité sociale.xlsx
    14.1 KB · Affichages: 185

Modeste geedee

XLDnaute Barbatruc
Re : Contrôle de saisie - N° SS

Bonsour®
En effet, dans la zone de saisie du n° S.S, j'aimerai pouvoir contrôler si le champs est correctement saisie.
si la personne saisie du texte, alors un message box apparaît et demande une saisie correcte

s'il s'agit d'un natif de Corse on saisit 2A ou 2B (pour contrôle A ou B seront remplacé par "0"

Numéro de sécurité sociale en France - Wikipédia

une solution serait de demander systématiquement 15 caractères("chiffres") format cellule=texte
et contrôler la clé
=CNUM(DROITE(A1;2))=97-(GAUCHE(SUBSTITUE(SUBSTITUE(A1;"A";"0");"B";"0");13)-(97*ENT(GAUCHE(SUBSTITUE(SUBSTITUE(A1;"A";"0");"B";"0");13)/97)))
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Contrôle de saisie - N° SS

Bonjour à tous.


Un essai de contrôle de saisie du NIRPP (sur la base de la page suggérée par Modeste geedee).
Il ne sera pas difficile de transformer la formule en fonction personnalisée, dans le cas qu'elle réponde à la demande. Mais j'ai un gros doute car je ne trouve pas toujours le même résultat que Modeste geedee : voir le classeur joint.​


Bonne soirée.


ℝOGER2327
#6963


Samedi 7 As 141 (Saint Cyrano de Bergerac, explorateur - fête Suprême Quarte)
19 Brumaire An CCXXII, 6,3389h - grenade
2013-W45-6T15:12:48Z
 

Pièces jointes

  • XLD_213204_Contrôle du NIRPP.xlsx
    13.8 KB · Affichages: 97

Modeste geedee

XLDnaute Barbatruc
Re : Contrôle de saisie - N° SS

Bonsour®
Mais j'ai un gros doute car je ne trouve pas toujours le même résultat que Modeste geedee : voir le classeur joint
Bonne soirée.

:rolleyes:
je ne suis qu'a moitié étonné...
je n'ai intégré que la moitié de cette règle :
Pour la Corse,
-on remplace le caractère A ou B par un zéro.
-si la lettre est A, on soustrait au nombre de 13 chiffres la valeur 1 000 000 et si la lettre est B on soustrait 2 000 000.

:cool:
voir également ce lien :
Numéro de sécurité sociale, calcul clé et décodage
 

David2Coree

XLDnaute Junior
Re : Contrôle de saisie - N° SS

Bonjour à tous !

Je vous remercie tout d'abord d'avoir pris un peu de votre temps pour m'aider, je vous suis très reconnaissant.
Pour les réponses de excfl, Modeste geedee et Roger2327, malheureusement je ne vais pas prendre vos réponses car j'utilise Excel2003, ce n'est pas encore prévue que je bascule en version xlsx dans mon entreprise :)

==> Bonjour Jean-Marcel,
Votre réponse s'approche vraiment de mon raisonnement mais le code ne fonctionne pas sur mon fichier. J'essaie de la mettre en application, pourriez-vous me dire si je fais bien car je ne suis pas un expert VBA (je suis en phase d'apprentissage...).

Quand je lis Private Sub, il s'agit bien d'un code qui doit s'activer automatiquement lors de l'utilisation de l'onglet .Donc dans les propriétés de mon onglet "Tableau", je fais un copier /coller de votre code et j'enregistre.
En B6 :
  • je saisie une lettre ==> je n'ai pas de message d'erreur
  • je saisie un seul et unique chiffre ==> la saisie est validée
  • je saisie un chiffre autre que le 1 ou 2 ==> la saisie est validée
Est-ce que cela a une incidence si les cellules B6 et C6 sont fusionnées ?
Pourquoi on déclare la variable target et on utilise target.address dans la condition de départ ?

Je vous remercie d'avance pour votre explication.
Bonne journée à tous.
Cordialement
David
 

David2Coree

XLDnaute Junior
[Résolu !!!] Contrôle de saisie - N° SS

Jean-Marcel,

Je vous remercie infiniment de votre prompt réponse !
Effectivement votre code fonctionne ! il s'agissait d'une erreur de ma part, je n'ai pas enregistré le document après la recopie du code.
Pour l'instant, je mets en pratique votre solution et plus tard, je l'adapterai pour les cas particuliers.
Merci encore.
Je vous souhaite une bonne journée.

Pour info, j'ai modifé l'ordre des conditions pour que si le N° S.S est saisie en texte le bon message d'alerte apparaisse :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$6" Then Exit Sub
    If IsNumeric(Target) = False Then
        MsgBox " Le numéro de sécurité sociale doit être numérique"
        Application.EnableEvents = False
            Target = ""
        Application.EnableEvents = True
        Exit Sub
    End If
    
    If Left(Target, 1) <> 1 And Left(Target, 1) <> 2 Then
         MsgBox " Le numéro de sécurité sociale doit commencer par 1 ou 2"
         Application.EnableEvents = False
            Target = ""
        Application.EnableEvents = True
        Exit Sub
    End If
    If Len(Target) <> 13 And Len(Target) <> 15 Then
         MsgBox " Le numéro de sécurité sociale doit avoir 13 ou 15 caractères sans espaces"
         Application.EnableEvents = False
         Target = ""
         Application.EnableEvents = True
    End If
End Sub

Cordialement
David
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Contrôle de saisie - N° SS

Re...


(...)
Pour les réponses de excfl, Modeste geedee et Roger2327, malheureusement je ne vais pas prendre vos réponses car j'utilise Excel2003, ce n'est pas encore prévue que je bascule en version xlsx dans mon entreprise :)
(...)
Milexcuz ! À vouloir aller trop vite, on ne fait pas attention à tout...

Dans la section Excel2003 on dépose des classeurs .xls !

Je répare l'erreur.​


ℝOGER2327
#6966


Mardi 10 As 141 (Saint Abstrait, bourreau - fête Suprême Quarte)
22 Brumaire An CCXXII, 5,8932h - azerole
2013-W46-2T14:08:37Z
 

Pièces jointes

  • XLD_213204_Contrôle du NIRPP.xls
    52.5 KB · Affichages: 75

ROGER2327

XLDnaute Barbatruc
Re : [Résolu !!!] Contrôle de saisie - N° SS

Re...


(...)

Pour info, j'ai modifé l'ordre des conditions pour que si le N° S.S est saisie en texte le bon message d'alerte apparaisse :

(...)
Là, je pense que vous allez au devant des ennuis car le code NIRPP qui est utilisé comme numéro d'immatriculation à la Sécurité sociale n'est pas numérique. (Voir les liens cités par Modeste geedee et le classeur du message précédent.)​


Bon courage.


ℝOGER2327
#6967


Mardi 10 As 141 (Saint Abstrait, bourreau - fête Suprême Quarte)
22 Brumaire An CCXXII, 5,9471h - azerole
2013-W46-2T14:16:23Z
 

David2Coree

XLDnaute Junior
Re : [Résolu !!!] Contrôle de saisie - N° SS

Là, je pense que vous allez au devant des ennuis car le code NIRPP qui est utilisé comme numéro d'immatriculation à la Sécurité sociale n'est pas numérique. (Voir les liens cités par Modeste geedee et le classeur du message précédent.)​

Bonjour ROGER2327,

Je vous remercie de votre réponse. J'ai fais cet outils de calcul pour faciliter le temps de travail de mes collègues, normalement tous les NIRPP qu'ils saisiront seront valides. C'est pour cela que je n'ai pas mis en place le tableau qui explique le pourquoi du comment pour la saisie d'un NIRPP. Il ne faut pas que je complique trop sinon, mes collègues ne voudront pas utiliser ma calculette d'échéanciers simplifiée.
Sans rentrer trop dans les détails, ce tableau sera imprimé et envoyé à la personne en question en plus de la lettre d'information des paiements.

Je vous souhaite une bonne fin de journée.

Cordialement
David
 

Si...

XLDnaute Barbatruc
Re : [Résolu] ! Contrôle de saisie - N° SS

salut

Si... tu veux te dispenser de cas particuliers et Si... tu veux éviter tous ces messages d'erreur peut-être qu'un contôle "TextBox" pourrait faire l'affaire.
Dans le fichier joint, j'utilise les cellules B6 et C6, non fusionnées bien sûr !
 

Pièces jointes

  • N° SS (TextBox).xls
    85 KB · Affichages: 88

ROGER2327

XLDnaute Barbatruc
Re : [Résolu] ! Contrôle de saisie - N° SS

Bonjour à tous.


À David2Coree : j'ai pris note du message #12, mais, puisque j'ai bossé un peu sur la question, je propose, pour le plaisir, une fonction personnalisée pour vérifier la correction d'un NIRPP en utilisant la bibliothèque Microsoft VBScript Regular Expressions 5.5 (vbscript.dll\3).​
VB:
Function NIRvalide(NIR$) As Boolean

'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'
'¤                                                                                               ¤'
'¤ Ajouter la référence à la bibliothèque Microsoft VBScript Regular Expressions 5.5 au projet ! ¤'
'¤                                                                                               ¤'
'¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤'

Dim i&, k#, t$, RgEx As RegExp
    If Len(NIR) = 13 Or Len(NIR) = 15 Then
        For i = 1 To 13
            t = Mid$(NIR, i, 1)
            Select Case t
            Case "0" To "9": k = k * 10 + CInt(t)
            Case "A", "B": k = k * 10 + 64 - Asc(t)
            End Select
        Next
        t = Right$(197 + Round(Int(k / 97) * 97, 0) - k, 2)
        Set RgEx = New RegExp
        With RgEx
            .IgnoreCase = False
            .Pattern = "^[1-9]{1}[0-9]{4}([0-9]{2}|(2[A-B]{1}))[0-9]{3}((00[1-9]|[0-9][1-9][0-9]|[1-9][0-9]{2})|(00[1-9]|[0-9][1-9][0-9]|[1-9][0-9]{2})" & t & ")$"
            NIRvalide = .Test(NIR)
        End With
        Set RgEx = Nothing
    End If
End Function
Deux remarques :
  • Je n'ai testé cette fonction qu'avec Excel2010 : j'ignore si elle est compatible avec Excel2003.
  • La fonction vérifie que le numéro de Sécurité sociale passé en argument est plausible.
    Par exemple, elle valide 152052A52815583, mais rejette 152052A52815556 (parce que la clef 56 est fausse).
    Cependant, rien n'assure que 152052A52815583 a réellement été attribué. (Je pense qu'il n'a pas été attribué, car je ne crois pas à l'existence du code géographique 2A528.)


Bonne journée.


ℝOGER2327
#6968


Mercredi 11 As 141 (Saint Ossian, barde postiche - fête Suprême Quarte)
23 Brumaire An CCXXII, 1,4283h - garence
2013-W46-3T03:25:41Z
 

Pièces jointes

  • XLD_213204_Contrôle du NIRPP_2.xlsm
    22.4 KB · Affichages: 82

David2Coree

XLDnaute Junior
Re : [Résolu] ! Contrôle de saisie - N° SS

Oulalala ! Bonjour Roger2327 ! J'ai le cerveau qui monte en température...

Je m'aperçois que le chemin de la programmation sera très long et sinueux pour moi ...;)

Bonjour à tous.


À David2Coree : j'ai pris note du message #12, mais, puisque j'ai bossé un peu sur la question, je propose, pour le plaisir, une fonction personnalisée pour vérifier la correction d'un NIRPP en utilisant la bibliothèque Microsoft VBScript Regular Expressions 5.5 (vbscript.dll\3).==> 1ère question d'un noob : Cette bibliothèque est déjà intégré ou doit-on faire en manuel ?
Function NIRvalide(NIR$) As Boolean ==> 2nd question : je n'arrive pas à retrouver votre code dans le fichier joint afin de l'exécuter en mode pas à pas pour le comprendre, y aurait-il une manip particulière à faire ?

Il vrai est que dans l'absolue, votre tableau permet de vérifier la véracité des NIRPP saisis, je demanderai à mes collègues de me trouver des personnes qui sont nés en Corse et je ferai la vérification par ce fichier.
En tout cas, je réitère ma gratitude et mes remerciements à toutes les personnes qui ont contribué à la résolution de mon problème.
Ce forum est une mine d'information extraordinaire pour améliorer mes compétences sous Excel.
Bonne soirée à tous.

Cordialement
David
 

Discussions similaires

Réponses
18
Affichages
622

Statistiques des forums

Discussions
312 204
Messages
2 086 198
Membres
103 154
dernier inscrit
jefferson6488