Le code de loulou ne fonctionne pas, j'ai décidé de tout reprendre à 0 
Mon but étant de convertir un RIB en IBAN + BIC
Je me suis basé pour comprendre sur cette explication assez claire.
* Le RIB 
code banque =5 BBBBB
code guichet = 5 AAAAA
numéro de compte = 11 CCCCCCCCCCC
clé rib =2 KK
* L'IBAN est composé des données du RIB (sur 27 caractères)
FRXXBBBBBAAAAACCCCCCCCCCCKK
Les premiers deux caractères sont : FR (code iso2 de la France)
Les 3ème et 4 ème caractères sont : XX (clé)
De 5 à 9 : BBBBB (code banque)
De 10 à 14 AAAAA (code guichet)
De 15 à 25 CCCCCCCCCCC (numéro de compte)
Les 26 et 27 KK (clé rib)
Si le pays de règlement est la France, la clé IBAN doit être calculée selon l'algorythme :
1- code IBAN placer 00 dans le champ clé IBAN FR00BBBBBAAAAACCCCCCCCCCCKK
2- placer les 4 premiers caractères en fin du code BBBBBAAAAACCCCCCCCCCCKKFR00
3- remplacer les lettres par leurs correspondants nombre (A=10, B=11, C=12... Z=35) et donc BBBBBAAAAACCCCCCCCCCCKK152700 (F=15 and R=27)
Toutes les lettres doivent être remplacées
C'est ici que la galère commence
4- Jouer la commande modulo 97 au résultat obtenu
Mod97 = BBBBBAAAAACCCCCCCCCCCKK152700 MODULO 97 
5- effectuer la soustraction 98- Mod97 = IBAN key (XX)
6- le code iban répondu est donc : FRXXBBBBBAAAAACCCCCCCCCCCKK
Dis comme ça ça parait chouette mais le modulo d'un compte à plus de 9 chiffres est pas possible en 32bits
Il faut donc fractionner comme ceci.
On prend les 7 premiers chiffres auxquels on applique un %97
BBBBBAA % 97 = 64 par exemple
On place 34 devant les 7 prochains chiffres ce qui donne 34AAACCCC
34AAACCCC % 97 = 44
On continue avec un 
24CCCCCCC % 97 = 31
Puis on termine avec 
31CCCCKK % 97 = 13
La dernière est censée donner la clé FR13, ce qui ne fonctionne pas dans mon cas. 
Le truc c'est que j'ai trouvé plein de méthodes voisines mais qu'aucune n'arrive à me donner satisfaction.
Voilà le code que j'ai pondu.
Code : Tout sélectionner
; Ar-S RIB 2 IBAN 
Declare.s ConvertASC_to_IBAN(banque$, guichet$, NumCompte.s,CleRib.s)
Rib.s = "VOTRE RIB ICI"
Rib.s =    Trim(Rib)
Rib.s = RemoveString(rib," ")
Structure RIB
	Banque.s
	Guichet.s
	NumCompte.s
	CleRIB.s
EndStructure
Global NewList IBAN.RIB() 
; Séparation des éléments dans une liste 
AddElement ( IBAN() )
IBAN()\Banque = Left(Rib, 5)
Debug "IBAN()\Banque " + IBAN()\banque
StartGuichet = 6
IBAN()\Guichet = Mid(Rib, StartGuichet, 5)
Debug "IBAN()\Guichet : " + IBAN()\Guichet
IBAN()\NumCompte = Mid(Rib, 11, 11)
Debug "IBAN()\NumCompte : " + IBAN()\NumCompte
IBAN()\CleRIB = Right(rib,2)
Debug "CleRIB : " + IBAN()\CleRIB
; test ;-
Compte.s = IBAN()\Banque+IBAN()\Guichet+IBAN()\NumCompte+IBAN()\CleRIB
Debug " C O M P T E : " + Compte 
ComptePourCle.s = ConvertASC_to_IBAN (IBAN()\Banque, IBAN()\Guichet, IBAN()\NumCompte,IBAN()\CleRIB)
Procedure.s ConvertASC_to_IBAN(banque$, guichet$, NumCompte.s, Clerib.s)
Protected cle.i, Lpart, NewNum.s
CopyCompte.s = banque$+guichet$+NumCompte.s + clerib.s + "152700" ; "152700 est la conversion de FR00"
 CopyCompte = RemoveString(CopyCompte," ")
 
 Lpart = Len(CopyCompte)
 Debug CopyCompte
 Debug "longueur apres conversion :" + Str(Lpart)
 For i = 1 To Lpart
	Car.s = Mid(CopyCompte,i,1)
	If Asc (car) > 65 And Asc (car) <  91 ; Si c'est une lettre
		Debug "Lettre trouvée  : " + car + " = Valeur ASCII : " + Str (Asc(car) )			
		NewNum = Str( Asc(car)-55 )
		CopyCompte = ReplaceString(CopyCompte, car, NewNum )
	EndIf
 Next
Lcompte = Len(CopyCompte)
Debug "Compte modifié pour calcule clé " 
Debug " == " + CopyCompte + " ==" ; 2004101007170210122038152700
Debug "Taille : " + Len(CopyCompte)
; V1
ZeDIV = Lcompte / 7
ZeRest = Lcompte % 7 
Tot = 0
NewCOUNT.s = "0"
Pos = 0
For i = 0 To ZeDIV
	
	NewCOUNT + Mid (CopyCompte, Pos, 7)
	Debug "Fractionement  : " + NewCOUNT
	B = Val(NewCOUNT) %97
	
	NewCOUNT = Str(B)
	Debug "transformé en : " + Str(B)
	 
	 TEST.s = test+Str(b)
	 
	 Tot = Tot +B
	 
	 pos+7
	 
Next 
	If ZeRest > 0
		B = Val( NewCOUNT + Mid (CopyCompte, Pos, ZeRest) ) %97
		Tot = tot + B
		TEST.s = test+Str(b)
	EndIf
	
Debug "B : " + Str(B)
Debug "Test : " + Test
Cle = 98 - Val(test) %97 
; Cle = 98 - Val(tot) %97 ; autre test
Debug "Clé iban : FR" + Str(Cle)
ProcedureReturn CopyCompte.s
EndProcedure
2 jours que je me pète la tête sur ce truc, ça me rend fou. 
Je suis sûr que c'est une connerie du à la fraction du grand numéro de compte mais moi et les maths on a toujours été en froid, pourtant j'y met du miens... Bref si quelqu'un voit la pine.
sources que j'ai exploité : 
http://fr.wikipedia.org/wiki/Basic_Bank_Account_Number
http://www.cnb.cz/miranda2/export/sites ... EBS204.pdf
y'en a d'autres mais j'ai pas gardé tous les liens
http://fr.wikipedia.org/wiki/ISO_13616