Clé IBAN pour virements
Bonjour,
Le 01/02/2014 nous passons obligatoirement au SEPA pour tous les virements et prélèvements bancaires donc passage du RIB à l'IBAN.
Est-ce quelque expert du forum s'est penché sur le calcul de la clé de contrôle IBAN?
La clé IBAN ce sont les 2 chiffres qui suivent les 2 lettres en début d'Iban. Les banques mettent en ligne une calculette qui convertit les RIB en IBAN mais compte par compte alors que j'ai plus de 1000 RIB à convertir....
Une formule magique me ferait gagner un temps fou.
Merci d'avance pour les bons tuyaux!
YPL
Bonjour,
Peux-tu nous envoyer un fichier avec des exemples de comptes et les résultats escomptés?
Pas cool la question
A te relire
Voici un exemple de ce que je cherche à réaliser.
J'ai découvert que la clé IBAN de toutes les banques et 76 sauf pour celles dont les comptes contiennent une lettre (Bq postale, LCL et Bq de France) ce qui simplifie la somme de mon travail mais il me reste un paquet de comptes avec lettre.
YPL
Bonsoir,
Ci-dessous fonction VBA pour le calcul de la clé IBAN
A tester 8)
Option Explicit
Public Function Clé_IBAN(CodeBanque, Guichet, Compte, CléRIB)
Dim Chaîne As String
Dim Nbcar As Byte, i As Byte
Dim c As String
Dim d, e, f, g
Chaîne = Format(CodeBanque, "00000")
Chaîne = Chaîne + Format(Guichet, "00000")
Chaîne = Chaîne + Format(Compte, "00000000000")
Chaîne = Chaîne + Format(CléRIB, "00")
Chaîne = Chaîne + Format(Asc("F") - 55 & Asc("R") - 55 & "00", "000000")
Nbcar = Len(Chaîne)
For i = 11 To Nbcar
c = Mid(Chaîne, i, 1)
If Not IsNumeric(c) Then Chaîne = Replace(Chaîne, c, Asc(c) - 55)
Next
d = Len(Chaîne): d = Int(Len(Chaîne) / 3)
e = Left(Chaîne, d): e = Modulus(e, 97)
f = Right(Chaîne, 20): f = Left(f, d): f = Modulus(e & f, 97)
g = Right(Chaîne, Len(Chaîne) - 2 * d): g = Modulus(f & g, 97)
Clé_IBAN = 98 - g
End Function
Function Modulus(ByVal num, ByVal div)
Modulus = num - div * Int(num / div)
End FunctionEdit : mise à jour le 1er.Août 2013 (code et fichier)
Bug pour la lettre "E" considérée comme un exposant numérique
Code modifié en conséquence
Option Explicit
Public Function Clé_IBAN(CodeBanque As String, Guichet, Compte As String, CléRIB As String)
Dim Chaîne As String
Dim Nbcar As Byte, i As Byte
Dim c As String
Dim d, e, f, g
Chaîne = Format(CodeBanque, "00000")
Chaîne = Chaîne & Format(Guichet, "00000")
If InStr(Compte, "E") > 0 Then
Compte = Replace(Compte, "E", 14)
Chaîne = Chaîne & Compte
Else
Chaîne = Chaîne & Format(Compte, "00000000000")
End If
Chaîne = Chaîne & Format(CléRIB, "00")
Chaîne = Chaîne & Format(Asc("F") - 55 & Asc("R") - 55 & "00", "000000")
Nbcar = Len(Chaîne)
For i = 11 To Nbcar
c = Mid(Chaîne, i, 1)
If Not IsNumeric(c) Then Chaîne = Replace(Chaîne, c, Asc(c) - 55)
Next
d = Len(Chaîne): d = Int(Len(Chaîne) / 3)
e = Left(Chaîne, d): e = Modulus(e, 97)
f = Right(Chaîne, 20): f = Left(f, d): f = Modulus(e & f, 97)
g = Right(Chaîne, Len(Chaîne) - 2 * d): g = Modulus(f & g, 97)
Clé_IBAN = 98 - g
End Function
Function Modulus(ByVal num, ByVal div)
Modulus = num - div * Int(num / div)
End Function
Bonjour,
Ça fonctionne super bien!
Il faut juste que je trouve comment mettre la fonction disponible sur tous les classeurs.
Merci beaucoup!
Bonnes vacances bien méritées
YPL
Bonjour, Jean-Eric,
dans le cadre de mon travail, sous Excel 10, je cherche à créer les IBAN à partir du code banque, code guichet, numéro de compte et clé RIB. J'ai donc trouvé votre code, que j'ai repris, mais je m'aperçois que pour certains, ça me donne une clé erronée: pour le compte 20041 00001 6417297D020 44, ça me donne une clé de 52, alors que l'IBAN est FR692004...
Pourriez-vous me dire où ça coince ? Ca sert pour aller chercher des données dans un autre tableau.
Je ne sais malheureusement pas programmer.
Merci beaucoup.
Bonjour, et bienvenu(e),
Merci de joindre un fichier avec des exemples et résultats escomptés.
Cdlt.
Jean-Eric a écrit :Bonjour, et bienvenu(e),
Merci de joindre un fichier avec des exemples et résultats escomptés.
Cdlt.
Merci. J'ai isolé en faisant une nouvelle page et en utilisant votre code (je ne peux pas envoyer mon fichier du boulot !), en mettant les coordonnées concernées. Je joins également en pdf du RIB pour constater que ce qu'on obtient est différent.
Re,
Mon retour avec fonction modifiée.
A tester sur un ensemble conséquent.
Cdlt.
Option Explicit
Public Function Clé_IBAN(CodeBanque As String, Guichet As String, Compte As String, CléRIB As String)
Dim Chaîne As String
Dim Nbcar As Byte, i As Byte
Dim c As String
Dim d, e, f, g
Chaîne = Format(CodeBanque, "00000")
Chaîne = Chaîne & Format(Guichet, "00000")
If InStr(Compte, "E") > 0 Then
Compte = Replace(Compte, "E", 14)
Chaîne = Chaîne & Compte
Else
Chaîne = Chaîne & Compte
End If
Chaîne = Chaîne & Format(CléRIB, "00")
Chaîne = Chaîne & Format(Asc("F") - 55 & Asc("R") - 55 & "00", "000000")
Nbcar = Len(Chaîne)
For i = 11 To Nbcar
c = Mid(Chaîne, i, 1)
If Not IsNumeric(c) Then Chaîne = Replace(Chaîne, c, Asc(c) - 55)
Next
d = Len(Chaîne): d = Int(Len(Chaîne) / 3)
e = Left(Chaîne, d): e = Modulus(e, 97)
f = Right(Chaîne, 20): f = Left(f, d): f = Modulus(e & f, 97)
g = Right(Chaîne, Len(Chaîne) - 2 * d): g = Modulus(f & g, 97)
Clé_IBAN = 98 - g
End Function
Function Modulus(ByVal num, ByVal div)
Modulus = num - div * Int(num / div)
End FunctionMerci beaucoup, ça semble fonctionner à la perfection cette fois.
Merci pour votre rapidité.
Bonjour,
Merci pour ce bout de code, après utilisation sur plus de 300 RIB j'ai eu 3 erreurs de clé.
Il est nécessaire de corriger la dernière ligne par : Clé_IBAN = Format(98 - g, "00")
Ainsi la clé fait toujours 2 caractères
Cdt
Fabrice