QR-factures pour la Suisse

Bonsoir Yvouille, le Forum,

Les QR Suisse suivent une trame particulière. Même des freewares pourtant spécialisés peuvent sortir un QR approchant qui ne passerait pas le contrôle.

Dans le fichier ci-dessous j'ai testé la possibilité de sortir une Section de Paiement correcte.

Je souhaites que ces informations te soient utiles. Personnellement j'utilise 2 types de freewares: QR code Studio et QR code Reader & Generator.

Tous les deux pouvant gérer entre autres des textes longs.

Bonne continuation.

82qrsuisse.zip (303.90 Ko)

Tous les deux pouvant gérer entre autres des textes longs.

Bonjour,

En effet, cela semble être la cause ... cette solution javascript limiterait la solution à 190 caractères alors que dans le jeu d'essai il y en a 209 ! fichtre ... on revient alors à la solution php ? ou celle proposée par X-Cellus

Je vais mettre mon nez dans le code javascript mais sans grand espoir. Il y a en particulier un paramètre QRCodeLimitLength

    var QRCodeLimitLength=[[17,14,11,7],[32,26,20,14],[53,42,32,24],[78,62,46,34],[106,84,60,44],[134,106,74,58],[154,122,86,64],[192,152,108,84],[230,180,130,98],[271,213,151,119],[321,251,177,137],[367,287,203,155],[425,331,241,177],[458,362,258,194],[520,412,292,220],[586,450,322,250],[644,504,364,280],[718,560,394,310],[792,624,442,338],[858,666,482,382],[929,711,509,403],[1003,779,565,439],[1091,857,611,461],[1171,911,661,511],[1273,997,715,535],[1367,1059,751,593],[1465,1125,805,625],[1528,1190,868,658],[1628,1264,908,698],[1732,1370,982,742],[1840,1452,1030,790],[1952,1538,1112,842],[2068,1628,1168,898],[2188,1722,1228,958],[2303,1809,1283,983],[2431,1911,1351,1051],[2563,1989,1423,1093],[2699,2099,1499,1139],[2809,2213,1579,1219],[2953,2331,1663,1273]];

@Yvouille, essaie avec ceci et vérifie la lisibilité du QRCode avec un smartphone par exemple (en effet, il commence à y avoir une certaine densité de caractères)

44qrcode-js-1.xlsm (88.85 Ko)

J'ai introduit le paramètre de correction d'erreur dans l'onglet HowTo. En le réglant à Q (au lieu de H par défaut) le QRCode est bien généré.

The following table lists the approximate error correction capability at each of the four levels:

Level L (Low) 7% of data bytes can be restored.

Level M (Medium) 15% of data bytes can be restored.

Level Q (Quartile) 25% of data bytes can be restored.

Level H (High) 30% of data bytes can be restored.

34qrcode-js-2.xlsm (88.93 Ko)

Salut X Cellus,

Je te remercie pour ta réponse. Mais il me semble qu’avec ta proposition je devrais pratiquement recommencer à zéro, alors que j’ai déjà mis en place bien des choses avec celle de Steelson.

Eventuellement que je reviendrais à toi si nécessaire.

Salut Steelson

On n’est pas au bout du problème

Sur le conseil de ma banque, je me suis inscrit sur un site officiel qui permet de contrôler des QR-Code. Je te fournis les données d’accès en privé, au cas où ça t’intéresse.

Avec un QR-Code généré à l’aide de Google Api, j’obtiens ce genre de protocole d’erreur (le site n’est qu’en allemand). On voit qu’il n’y a qu’une seule erreur à la ligne 38, erreur facilement corrigeable.

exemple 1

Mais avec ton dernier fichier, si le QR-Code généré peut être lu par mon portable, il est toutefois refusé par ce contrôle officiel SIX. Je reçois le texte d’erreur : ‘’La validation a échoué’’.

Avec cette dernière version, la croix suisse est placée légèrement trop bas à la base et j’ai tenté de la centrer au mieux avant d’effectuer mon contrôle, mais il ne semble pas que le problème puisse venir de là.

Amicalement.

Merci beaucoup pour ta réponse.

Sur l'image ci-dessous, les documents qu'il est possible de transmettre, dont .xml.

capture

Est-ce que le problème pourrait venir de la copie d'écran .png que j'ai faite à partir d'Excel pour la télécharger sur ce programme de contrôle ? Toutefois, c'est bien de la même manière que j'ai téléchargé les images qui ont pu être contrôlées officiellement.

Edit

Quelques réglages selon la spec ...

  • correction d'erreur réglée à M (plutôt très faible)
  • figeage en taille du logo CH
  • pas de CAR(9) après dernière valeur
  • remplacement CAR(9) par CAR(10)
  • zone blanche autour du QRCode (pour la capture d'écran)
  • taille QRCode à 130x130
48qrcode-js-3.xlsm (92.39 Ko)

je te laisse tester mais chez moi la validation est ok sauf

GEFEG.FX Prüfung
********************
Prüf-Datum            : 25.08.2020
Prüf-Zeit             : 13:53:36
Datei                 : executingMessageFile
Datei-Datum           : 25.08.2020
Datei-Zeit            : 13:53:36
Datei-Größe           : 1.287 Bytes
Referenz-Standard     : QR; ; CH

(Zeilennummer) - Fehler
******************************************************
(0038) - Das Datenfeld darf bei AdrTp = "K" nicht befüllt werden
(0038) - Die Länge des Wertes 'PstCd' muss kleiner oder gleich 16 sein.
test2 js

Après cette mise au point que Yvouille devrait confirmer, j'ai poursuivi une 3ème voie (1=php via google, 2=javascript) : python.

  1. J'ai donc installé python3.8 pour windows,
  2. puis PyQRCode-1.2.1
  3. écrit un programme .py à partir d'excel car ce n'est qu'un fichier texte !
  4. lancé python depuis excel en pythonw ... voir ici https://forum.excel-pratique.com/excel/executer-un-script-python-sur-vba-145131#p892153
  5. et j'obtiens un magnifique QRCode stocké sur mon ordi en image vectorielle !
  6. là cela se corse juste un peu puisque seul XL2016 put importer une image vectorielle (test fait ok avec un excel 2016 sur un autre micro)

Une fois python installé, c'est donc beaucoup plus simple, pas de souris qui se balade et pas de données envoyées outre-atlantique ! Je peux aussi régler la correction d'erreur à M comme demandé à la spec par CH. Resterait à faire un test grandeur nature.

@ Yvouille ... et cela fonctionne aussi !! Reste une erreur de "syntaxe" que tu saurais corriger !

GEFEG.FX Prüfung
********************
Prüf-Datum            : 27.08.2020
Prüf-Zeit             : 16:43:08
Datei                 : executingMessageFile
Datei-Datum           : 27.08.2020
Datei-Zeit            : 16:43:08
Datei-Größe           : 1.273 Bytes
Referenz-Standard     : QR; ; CH

(Zeilennummer) - Fehler
******************************************************
(0038) - Das Datenfeld darf bei AdrTp = "K" nicht befüllt werden
test

Pour résumer toutes les possibilités quasi-automatiques :

API Google
mise en œuvrepas de besoin d'application tiers
utilisationsimple
avisà éviter (données transmises outre-altlantique)
risque de voir ce service payant comme google map
A EVITER
php
mise en œuvrenécessite serveur et logiciel phpqrcode installé sur serveur
utilisationsimple
avisintéressant si on dispose d'un serveur (serveur entreprise par exemple)
PRO
javascript
mise en œuvrenécessite 2 fichiers open-source : jquery.min.js et qrcode.js = généralement aucune restriction en entreprise
utilisationversion manuelle : quelques manipulations copier/coller simples
version auto (chrome seulement) : nécessite un calibrage de la souris et bloque le micro pendant le processus
avisversion manuelle simple et peu exigeante en terme de moyens pour des applications peu fréquentes, pas d'accès web nécessaire
RECOMMANDÉ EN MANUEL SI PEU FRÉQUENT
python
mise en œuvrenécessite d'installer python (facile) et dé-zipper PyQRCode = selon code interne à l'entreprise ou l'organisation peut ne pas être possible
utilisationtrès simple et rapide, excel 2016 (image vectorielle)
avisversion automatique, simple, rapide, sans accès web pour des applications fréquentes
RECOMMANDÉ SI FRÉQUENT

ps : je prépare un topo pour la dernière version.

Salut Steelson,

J’avais un peu (beaucoup) avancé avec ta version 3, mais surtout au niveau de la transformation de mon fichier de données de base (liste des membres) afin qu’il soit compatible avec ton fichier Excel.

J’ai eu donc assez peur lorsque tu as annoncé préparer une énième version. Cependant, avec tes derniers compléments d’informations, il semble que la version ‘’python’’ serait intéressante pour moi. J’attends donc ton topo pour avancer.

Un grand merci pour ton investissement au niveau de cette demande de ma part mais probablement utile à d’autres helvètes.

Chaleureusement.

Python mijotait depuis un moment dans ma tête, et eurêka ce matin j'ai pu aboutir à une version assez fantastique. Mais elle n'apporte rien de mieux fonctionnellement que la version javascript, je la trouve plus simple de mise en oeuvre et d'utilisation.

A toi de voir si tu essaies cette version, dans tous les cas je la poste quand même car si quelqu'un débute et a la possibilité d'installer python (plus inoffensif qu'un lampropeltis getulus) c'est bluffant.

Voici la procédure

  1. installer python https://www.python.org/downloads/ et noter le dossier dans lequel se trouve pythonw.exe (voir exemple ci-dessous)
  2. télécharger pyqrcode à cette adresse https://pypi.org/project/PyQRCode/#files (Downloads files) et noter le dossier dans lequel se trouve PyQRCode 1.2.1 (voir exemple ci-dessous)
  3. c'est prêt ou presque
    1. en injectant les dossiers relevés dans cette macro,
    2. et en définissant 2 zones
      1. iciQRCode (ce n'est plus un shape mais une cellule ici)
      2. TextePourQRCode
Sub process()

    ' LIGNE A CUSTOMISER
    dossier = "C:\Users\cathe\Documents\PyQRCode-1.2.1\"
    ChDir dossier ' se metter au niveau du dossier = impératif

    ' création du fichier .py
    ff = FreeFile
    Open "myQRCode.py" For Output As #ff
    With Sheets("py")
        For i = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
            Print #1, .Cells(i, 1).Value
        Next
    End With
    Close #ff

    ' lancement de python
    ' LIGNE A CUSTOMISER
    Shell "C:\Users\cathe\AppData\Local\Programs\Python\Python38-32\pythonw.exe myQRCode.py"

    ' lieu de mise en place du QRCode
    With Range("iciQRCode")
        yq = .Top: xq = .Left
    End With

    ' effacement de l'image le cas échéant
    On Error Resume Next
        ActiveSheet.Shapes.Range(Array("myQRCode")).Delete
    On Error GoTo 0

    ' importation de la nouvelle image QRCode
    ActiveSheet.Pictures.Insert("myQRCode.svg").Select
    With Selection.ShapeRange
        wq = .Width: hq = .Height
        .Left = xq: .Top = yq
        .Name = "myQRCode"
    End With

    ' mise en place du logo
    With ActiveSheet.Shapes.Range("logo")
        .Left = xq: .Top = yq
        .IncrementLeft (wq - .Width) / 2
        .IncrementTop (hq - .Height) / 2
        .ZOrder msoBringToFront
    End With

End Sub

Voici le programme Python, 3 lignes !

import pyqrcode
="myQRCode = pyqrcode.create('''" & TextePourQRCode & "''', error='M')"
myQRCode.svg('myQRCode.svg', scale=3)

Le tout sur EXCEL2016

66qrcode-python.xlsm (61.48 Ko)
supprimé

Juste pour le délire final -car cela ne servira pas puisque le QRCode est dans une autre feuille que les données-, j'ai repris le code dont je parlais ici : https://forum.excel-pratique.com/excel/qr-factures-pour-la-suisse-105696/3#p892300 adapté ce code pur VBA pour tracer le QRCode avec des 0 et des 1 dans les cellules d'un feuille (la croix est ici composée de 2)

capture d ecran 39

Salut Steelson,

Ce n’est pas facile de te suivre dans tes envolées électroniques

Pendant que tu préparais ton dernier message, je préparais ma réponse à ton avant-dernier message. C'est donc bien par rapport à celui-ci que je te réponds.

Je pense avoir réussi à installer les deux programmes indiqués sous points 1 et 2 et à modifier (customiser ?) les lignes de codes VBA nécessaires.

Je n’ai cependant pas compris si je devais placer les 3 lignes ci-dessous quelque part ?!?.

import pyqrcode 

="myQRCode = pyqrcode.create('''" & TextePourQRCode & "''', error='M')" 

myQRCode.svg('myQRCode.svg', scale=3)

En l’état actuel, après avoir lancé la macro avec tes données en place, un QR-Code est créé et selon le contrôle officiel, il y a une erreur.

J’ai donc corrigé les données telles que dans le fichier ci-joint, mais le QR-Code créé/importé/affiché est toujours l’ancien. Ai-je donc réellement créé un QR-Code sur ma machine ou a-t-il été importé avec le fichier reçu de ta part que j’ai téléchargé ? Bon, ça m’étonnerait un peu !

Tu as une nouvelle piste ?

Je n’ai cependant pas compris si je devais placer les 3 lignes ci-dessous quelque part ?!?.

import pyqrcode 

="myQRCode = pyqrcode.create('''" & TextePourQRCode & "''', error='M')" 

myQRCode.svg('myQRCode.svg', scale=3)

Bonjour,

ah oui, j'ai du mal à m'arrêter quand la machine est lancée !

en fait ces 3 lignes de code python sont dans l'onglet qui s'appelle py et donc tu n'as rien à faire !

J’ai donc corrigé les données telles que dans le fichier ci-joint, mais le QR-Code créé/importé/affiché est toujours l’ancien. Ai-je donc réellement créé un QR-Code sur ma machine ou a-t-il été importé avec le fichier reçu de ta part que j’ai téléchargé ? Bon, ça m’étonnerait un peu !

Pour t'en assurer, supprime le QRCode et relance la macro.

Tu eux aussi aller voir dans le dossier où a été dézippé PyQRCode-1.2.1. J'ai un doute sur ta définition de dossier ... c'est celui qui contient PyQRCode-1.2.1 et non celui qui contient les factures. Exemple :

capture d ecran 41

Ce n'est pas là où je range ms délires d'excel !

Salut Steelson,

Je n’ai pas l’habitude des codes placés sur une feuille Excel, raison pour laquelle je n’ai cherché celui-là que dans l’explorateur VBA.

J’ai bien entendu essayé d’effacer l’ancien code avant de relancer la macro, mais ça n’y change rien.

Lorsque j’effectue une recherche avec le terme PyQRCode-1.2.1, je ne trouve que des dossiers en téléchargement. Dans chaque dossier il y a plusieurs sous-dossiers et documents et je ne sais trop qu’en faire.

capture 1

Dans le dossier où j’ai placé ton fichier Excel, je trouve certains documents qui ressemblent à ceux sur ton image, mais je ne sais pas lequel me serait utile.

capture 3

Selon l’image ci-dessous, il semble que le programme Python est bien installé sur ma machine, non ?

capture 2

Concernant ton ‘’délire’’ proposé ici https://forum.excel-pratique.com/s/goto/897117, le contrôle officiel m’indique que ce QR-Code n’a pas une structure correcte. Mais en creusant de ce côté-là, n’y aurait-il pas la possibilité d’une solution entièrement Excel ??

Très bon dimanche.

D'après ta copie d'écran, cela semble ok !

On peut voir que tu as généré une image vectorielle myQRCode.svg le 29 à 18:38. Le code myQRCode.py (code pyhton) est bien localisé dans le même répertoire où se trouve le dossier pyqrcode

test

Lorsque j’effectue une recherche avec le terme PyQRCode-1.2.1, je ne trouve que des dossiers en téléchargement. Dans chaque dossier il y a plusieurs sous-dossiers et documents et je ne sais trop qu’en faire.

Tu peux supprimer tous ces fichiers zip et gz car a priori ils ont bien été décompressés et installés dans un répertoire.

Pour revenir au test sur le fichier excel, supprime le QRCode (pas le logo Suisse) et relance la génération du QRCode qui est quasi-instantanée.

Rechercher des sujets similaires à "factures suisse"