Référence créancier - 98-modulo 97

Bonjour,

J'ai un "logiciel" de facturation maison sur Excel. Pour l'introduction de la facture QR en Suisse, je suis en train de voir comment je peux créer la référence créancier structurée (ou référence du créancier RF). Ce qu'il me manque c'est de pourvoir générer le code de vérification à 2 chiffres qui suit RF.

Voici ce que j'ai trouvé sur le net :

Constructing an RF Creditor Reference and calculating check digits

The check digits consist of two numeric characters. The check digits are calculated for a reference by following the below steps:

Convert upper and lower case letters to digits according to the following conversion table:

A = 10 G = 16 M = 22 S = 28 Y = 34
B = 11 H = 17 N = 23 T = 29 Z = 35
C = 12 I = 18 O = 24 U = 30
D = 13 J = 19 P = 25 V = 31
E = 14 K = 20 Q = 26 W = 32
F = 15 L = 21 R = 27 X = 33

Add the numeric value of the character RF, 2715, and ”00” to the right-hand end of the creditor reference;

Calculate modulo 97, i.e. the remainder of the division of the numeric character string “cccc...271500” by 97;

Subtract the remainder from 98 and, if the result is less than 10, insert a leading zero. The result is the two check digits. In order to correctly represent the complete RF Creditor Reference on an invoice, the code “RF” and the check digits should be inserted at the left-hand end of the creditor reference.

Examples of how to calculate the check digits

Example 1: A creditor reference is 2348236. The method to determine the check digits is the following:

Add to the right-hand end “2715” and “00”- the number becomes

2348236271500;

After dividing by 97, the remainder is 65;

Subtract the remainder from 98 - the result is 33.

The letters “RF” and the check digits “33” are inserted at the left-hand end of the creditor reference and the resulting RF Creditor Reference is

RF332348236 (electronic format) or

RF33 2348 236 (print format).

Je souhaite convertir mes références de factures en référence de créancier structurée :

Mes références de factures sont conçues de la façon suivante : 2009271234 (AA -année-MM-mois-JJ-jour-HH-heure-MM-minute).

Selon un générateur en ligne je devrai arriver au résultat suivant : RF342009271234

Est-ce qu'il y a un moyen de faire cela sur excel soit pas formule soit en vba ?

Je remercie par avance toute personne qui pourra m'apporter son aide.

Sandra

Bonsoir SandraPf,

En retour les formules pour générer le code de vérification et créer la référence créancier structurée.

captsandrapf

Selon exemple 1 et format de facture personnelle (AAMMJJHH)

Bons tests, bonne continuation.

Bonsoir,

Mille mercis de cette explication très détaillée !

Juste un question concernant la formule dans les cellules B5 et B15 : que signifie dans l'exemple 1 97^4 et dans l'exemple 2 97^3. Pour quelle raison est-ce différent ?

Sandra

Bonjour SandraPf,

Le modulo (MOD) d'Excel n'apprécie pas les trop grands nombres. Donc une étape intermédiaire permet de les réduire.

Ainsi dans l'exemple 1 la référence facture n'ayant que 7 chiffres. Il suffit d'appliquer une puissance (^3) pour abaisser le nombre.

Idem pour le 2ième nombre mais celui-ci étant encore plus grand on utilise alors une puissance plus importante (^4).

Ainsi on peut appliquer le modulo par 97 sur des nombres plus petit et il ressort le résultat escompté.

Bonne continuation.

Bonjour X Cellus,

Merci de votre réponse. Pensez-vous que je puisse systématiquement appliquer une puissance (^4) quelle que soit la "longueur" de ma référence ?

Dans la formule que je mets ici si la référence est en A1:

="RF"&
SI(98-(MOD(MOD(A1*1000000+271500;97^4);97))<10;
(98-(MOD(MOD(A1*1000000+271500;97^4);97)))*10;
98-(MOD(MOD(A1*1000000+271500;97^4);97)))&" "
&ENT(A1/1000)&" "&DROITE(A1;3)

Il me semble qu'il y a un problème à la ligne 3. En effet, il me semble que si le check nombre est plus petit que 10, c'est par exemple, 06 qui doit apparaître. Or, avec cette formule c'est 60 qui apparaît.

J'ai donc "bricolé" la chose suivante :

="RF"&
SI(98-(MOD(MOD(A1*1000000+271500;97^4);97))<10;
"0"&(98-(MOD(MOD(A1*1000000+271500;97^4);97)));
98-(MOD(MOD(A1*1000000+271500;97^4);97)))&" "
&ENT(A1/1000)&" "&DROITE(A1;3)

Ainsi, si la référence 2001301830 est en A1, on obtient RF062001301830.

Est-ce que vous pensez que c'est correct sur le plan "mathématique" ?

A nouveau,

Dans le cas de la facturation (AAMMJJHH) ce sera toujours ^4 qu'il faudra appliquer. Car la longueur de la référence est de 10 chiffres, donc ajouté avec 271500 en fin, le nombre passe et reste toujours à 16 chiffres (jusqu'en l'an 9999).

Ensuite c'est en effet un "0" de tête qu'il faut placer et non un "0" final comme inscrit avec la multiplication par 10. Il faut changer la condition IF par

IF(C14-C15<10;"0" & C15-C14;C14-C15)

La formule intermédiaire introduite pour montrer le détail peut être incluse avec l'autre modulo finale. Ce qui donne

=MOD(MOD(A15;97^4);97)

Cela donnera directement 64 dans l'exemple personnelle de facturation.


Suite,

Voilà la formule combinée:

=SI(98-MOD(MOD((A1*1000000+271500);97^4);97)<10;"RF0" & 98- MOD(MOD((A1*1000000+271500);97^4);97) & A1;"RF" & 98-MOD(MOD((A1*1000000+271500);97^4);97) & A1)

Pour la référence en A1.


Avec la formule combinée j'obtiens ceci...

RF0-62001301830 pour la référence 2001301830

je pense que l'on peut mettre ainsi :

=SI(98-MOD(MOD((A1*1000000+271500);97^4);97)<10;
"RF0" & 98-(MOD(MOD((A1*1000000+271500);97^4);97)) &A1;
"RF" & 98-MOD(MOD((A1*1000000+271500);97^4);97)&A1)

Est-ce bien correct ?

A nouveau,

Oui, car dans le 2ième bloc juste après "RF0" car la soustraction de 98 et du résultat des MOD sera toujours positive.

Le 3ième bloc n'aura besoin que du RF car le check sera supérieur à 9

Avec la formule de 11h58 j'obtiens ceci

RF0-62001301830 pour la référence 2001301830 (donc j'obtiens un nombre négatif)...

Suite,

J'ai modifié ma formule de11h58 au vu que le modulo par 97 serait supérieur au chiffre 98.

Après tests ce ne sera jamais le cas. Donc le digit check ne sera jamais négatif. Il faut laisser les deux blocs identiques, à part "RF0" dans le 2ième.

Je remets la dernière formule dans sa 1ière mouture.

Bonjour,

Merci beaucoup de votre aide. J'ai donc repris la formule suivante :

=SI(98-MOD(MOD((A1*1000000+271500);97^4);97)<10;
"RF0" & 98-(MOD(MOD((A1*1000000+271500);97^4);97)) &A1;
"RF" & 98-MOD(MOD((A1*1000000+271500);97^4);97)&A1)

Juste encore une dernière question concernant la version de la formule version imprimable, avec la formule suivante...

="RF"&
SI(98-(MOD(MOD(A1*1000000+271500;97^4);97))<10;
"0"&(98-(MOD(MOD(A1*1000000+271500;97^4);97)));
98-(MOD(MOD(A1*1000000+271500;97^4);97)))&" "
&ENT(A1/1000)&" "&DROITE(A1;3)

... on obtiens ceci : RF35 2009261 322

Or, je pense qu'il doit se présenter par groupe de 4 chiffres selon les infos ci-dessous , mais je ne sais pas si c'est très important. Mais on ne sait jamais avec les suisses ;) :

printing rf

Je propose donc de passer par la formule suivante si la référence RF est placée en A2 :

=STXT(A2;1;4)&" "&STXT(A2;5;4)&" "&STXT(A2;9;4)&" "&STXT(A2;13;4)&" "&A1(A2;18;4)&" "&STXT(A2;22;4)

A moins qu'il y ait une solution plus élégante ?

Suite,

J'ai fait selon l'exemple 1. Je supposais par analogie au carte bancaire que ce serait 4 chiffres de séparation et si moins en final on laisserait ainsi.

Donc cela donnerait RF35 2009 2613 22 pour la facturation (AAMMJJHH). Soit 3 blocs de 4 et un bloc de 2.

En fait 2 possibilités, passer la formule STXT comme présentée ou créer un format personnalisé pour la cellule A2 ou une colonne particulière.

Pour cela passer par le Menu Acceuil puis Format d'Excel puis format personnalisé. En le créant de toute pièce 2 caractères texte puis 2 caractères numériques et 2 blocs de 4 chiffres puis un bloc de 2 chiffres séparés par des espaces.

Je vais le tester en fin de journée. Ou reposte si trouvé.

A nouveau,

A partir du format électronique FR342009271234 calculé en B18 (voir l'image fourni en 1ier message). Ou tout autre emplacement

Et du code ci-dessous intégré dans l'éditeur VBA. Faire ALT F11 puis insertion d'un module et y copier le code.

Function Chk(Nb as String)
For C= 1 to 12 step 4
Mot=Mid(Nb, C,4) & " "
Chk= Chk & Mot
Next C
Chk = Chk & Right(Nb,2)
End Function

Il suffit de taper en cellule B19, ici pour l'exemple

=Chk(B18) pour obtenir la version imprimable FR34 2009 2712 34

Bons tests, bonne continuation.

La fonction est impec. Merci beaucoup de votre aide.

Rechercher des sujets similaires à "reference creancier modulo"