calculer clé RIB

eastwick

XLDnaute Impliqué
Bonjour à toutes et tous,

J'aimerais une petite formule qui va bien pour me déterminer la clé RIB d'un compte.
J'en ai déjà une, mais elle ne fonctionne pas avec les comptes qui ont une lettre (style LCL ou CCP).
Je suis preneur pour un code VBA, pas de souci.
On peut considérer que mes codes banque, guichet et numéro de compte sont en A1, B1 et C1.

En vous remerciant vivement !!!!
 

Le_Troll_Du_27

XLDnaute Occasionnel
Bonjour,

essaye cela
VB:
' =================================================================================================
'  RIB  |
' =================================================================================================
Function RIB(no As String)  ' no = numero de compte a 21 chiffres (ou lettre)
  Dim num As String
  num = no
  For n = 1 To Len(num)
  If Mid(num, n, 1) <> " " And Not IsNumeric(Mid(num, n, 1)) Then
  num = Replace(num, Mid(num, n, 1), convRIB(Mid(num, n, 1)))
  End If
  Next n
  X = Split(num, " ")
  b = CDbl(X(0))
  g = CDbl(X(1))
  d = CDbl(Left(X(2), 6))
  C = CDbl(Right(X(2), 5))
  RIB = 97 - ((89 * b + 15 * g + 76 * d + 3 * C) Mod 97)
  If Len(RIB) = 1 Then RIB = "0" & RIB
  RIB = CStr(RIB)
End Function
' =================================================================================================
'  CONTROLE COMPTE  |
' =================================================================================================
Function CtrlNoCompte(Compte) As String
  If IsEmpty(Compte) Then Exit Function
  If IsNumeric(Compte) Then
  i = Int(Compte / 100)  ' ............................................................10 premiers chiffres
  digit = Compte - i * 100  ' .........................................................2 derniers chiffres
  ' reste de la division
  reste = i - Int(i / 97) * 97
  If reste = 0 Then reste = 97
  If reste <> digit Then
  CtrlNoCompte = "compte bancaire incorrect"
  Else
  CtrlNoCompte = "OK"
  End If
  Else
  CtrlNoCompte = "compte bancaire incorrect"
  End If
End Function

Cordialement
 

ODVJ

XLDnaute Impliqué
Bonjour à tous,

Voilà une formule matricielle (à valider par CTRL+MAJ+ENTER) :
VB:
=97-MOD(89*A1+15*B1+3*(SIERREUR(GAUCHE(C1;-1+MIN(SI(STXT(C1;LIGNE($1:$11);1)>="A";LIGNE($1:$11);9^9)))&MOD(CODE(STXT(C1;MIN(SI(STXT(C1;LIGNE($1:$11);1)>="A";LIGNE($1:$11);9^9));1))-65;9)+1+(STXT(C1;MIN(SI(STXT(C1;LIGNE($1:$11);1)>="A";LIGNE($1:$11);9^9));1)>"S")&DROITE(C1;11-MIN(SI(STXT(C1;LIGNE($1:$11);1)>="A";LIGNE($1:$11);9^9)));C1));97)

Elle fonctionne pour des comptes avec une lettre et pour ceux sans lettre.
Elle s'appuie sur le remplacement de lettre et le modulo 97 comme indiqué dans les renvois documentaires précédents.

Cordialement
 

ROGER2327

XLDnaute Barbatruc
Bonjour à tous.

Quelques essais en pièce jointe...​

ℝOGER2327
#8345


Dimanche 22 Absolu 144 (Emmanuel Dieu - fête Suprême Seconde)
8 Vendémiaire An CCXXV, 0,2173h - amarante
2016-W39-4T00:31:18Z
 

Pièces jointes

  • Clef RIB.xlsm
    27.3 KB · Affichages: 253
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Bonjour pierrejean, bonjour à tous.

Wikipédia nous offre une magnifique formule pour le cas où des lettres se trouveraient un peu partout.
Pour un numéro de 21 chiffres ou lettres majuscules en A1 :​
VB:
=97-MOD(CONCATENER(
    MOD(CONCATENER(
    MOD(STXT(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(MAJUSCULE(A1);
"A";"1");"B";"2");"C";"3");"D";"4");"E";"5");"F";"6");"G";"7");"H";"8");"I";"9");
"J";"1");"K";"2");"L";"3");"M";"4");"N";"5");"O";"6");"P";"7");"Q";"8");"R";"9");
"S";"2");"T";"3");"U";"4");"V";"5");"W";"6");"X";"7");"Y";"8");"Z";"9");1;7);97);
        STXT(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(MAJUSCULE(A1);
"A";"1");"B";"2");"C";"3");"D";"4");"E";"5");"F";"6");"G";"7");"H";"8");"I";"9");
"J";"1");"K";"2");"L";"3");"M";"4");"N";"5");"O";"6");"P";"7");"Q";"8");"R";"9");
"S";"2");"T";"3");"U";"4");"V";"5");"W";"6");"X";"7");"Y";"8");"Z";"9");8;8));97);
        STXT(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(
             SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(MAJUSCULE(A1);
"A";"1");"B";"2");"C";"3");"D";"4");"E";"5");"F";"6");"G";"7");"H";"8");"I";"9");
"J";"1");"K";"2");"L";"3");"M";"4");"N";"5");"O";"6");"P";"7");"Q";"8");"R";"9");
"S";"2");"T";"3");"U";"4");"V";"5");"W";"6");"X";"7");"Y";"8");"Z";"9");16;6))&"00";97)
(1 614 caractères)

On pourra préférer :​
VB:
=97-MOD(
5*SOMME(SI(CODE(STXT(GAUCHE(A1;12);LIGNE($1:$12);1))<64;
           CODE(STXT(GAUCHE(A1;12);LIGNE($1:$12);1))-48;
  MOD(ENT((CODE(STXT(GAUCHE(A1;12);LIGNE($1:$12);1))-65)*10/9);10)+
          (CODE(STXT(GAUCHE(A1;12);LIGNE($1:$12);1))>82)+1)*10^(12-LIGNE($1:$12)))+
3*SOMME(SI(CODE(STXT(DROITE(A1;9 );LIGNE($1:$9 );1))<64;
           CODE(STXT(DROITE(A1;9 );LIGNE($1:$9 );1))-48;
  MOD(ENT((CODE(STXT(DROITE(A1;9 );LIGNE($1:$9 );1))-65)*10/9);10)+
          (CODE(STXT(DROITE(A1;9 );LIGNE($1:$9 );1))>82)+1)*10^( 9-LIGNE($1:$9 )));97)

(487 caractères)
À valider par Ctrl Maj Entrée.​

Bonne soirée.

ℝOGER2327
#8346


Dimanche 22 Absolu 144 (Emmanuel Dieu - fête Suprême Seconde)
8 Vendémiaire An CCXXV, 6,0602h - amarante
2016-W39-4T14:32:40Z
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 186
dernier inscrit
Eliyass