IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Discussion :

Gnérateur de QR code sur serveur local


Sujet :

VBA

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    mars 2021
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2021
    Messages : 109
    Points : 179
    Points
    179
    Par défaut Gnérateur de QR code sur serveur local
    Bonjour a tous, j'ai réussi a me débrouiller pour récupérer un générateur de QR codes en local, maintenant j'ai du coder pour lui envoyer les instructions via VBA et ca fonctionne bien.

    Saut quand j'utilisa URLDownloadtoFile, ca me recupere le fichier png mais impossible de l'ouvrir, pourtant quand je le fais a la main ca fonctionne correctement.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
    Sub test()
    Dim QRcode As String
    Dim URL As String
    QRcode = "blabla"
    URL = "C:\Users\bboschi\AppData\Local\Temp\qrcode.htm"
    Close #1
    Open URL For Output As #1
    Print #1, "<!DOCTYPE html PUBLIC " & Chr(34) & "-//W3C//DTD XHTML 1.0 Transitional//EN" & Chr(34) & " " & Chr(34) & "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" & Chr(34) & ">"
    Print #1, "<html xmlns=" & Chr(34) & "http://www.w3.org/1999/xhtml" & Chr(34) & " xml:lang=" & Chr(34) & "fr" & Chr(34) & " lang=" & Chr(34) & "fr" & Chr(34) & ">"
    Print #1, "<head>"
    Print #1, "<script type=" & Chr(34) & "text/javascript" & Chr(34) & " src=" & Chr(34) & "C:\Users\bboschi\Desktop\qrcode-js\jquery.min.js" & Chr(34) & "></script>"
    Print #1, "<script type=" & Chr(34) & "text/javascript" & Chr(34) & " src=" & Chr(34) & "C:\Users\bboschi\Desktop\qrcode-js\qrcode.js" & Chr(34) & "></script>"
    Print #1, "</head>"
    Print #1, "<body><center>"
    Print #1, Chr(34) & "<input id=""text"" type=""hidden"" value=" & Chr(34) & QRcode & Chr(34) & " style=""width:80%"" />" & Chr(34)
    Print #1, "<div id=" & Chr(34) & "qrcode" & Chr(34) & " style=" & Chr(34) & "width:120px; height:120px; margin-top:15px;" & Chr(34) & "></div>"
    Print #1, Chr(34) & "<p>" & QRcode & "</p>" & Chr(34)
    Print #1, "<script type=" & Chr(34) & "text/javascript" & Chr(34) & ">"
    Print #1, "var qrcode = new QRCode(document.getElementById(" & Chr(34) & "qrcode" & Chr(34) & "), {"
    Print #1, "width : 120,"
    Print #1, "height : 120"
    Print #1, "});"
    Print #1, "function makeCode () {"
    Print #1, "var elText = document.getElementById(" & Chr(34) & "text" & Chr(34) & ");"
    Print #1, "qrcode.makeCode(elText.value);"
    Print #1, "}"
    Print #1, "makeCode();"
    Print #1, "</script>"
    Print #1, "</center></body></html>"
    Close #1
    URLDownloadToFile 0, URL, "C:\Users\bboschi\Pictures\" & QRcode & ".png", 0, 0
    End Sub
    Voila si quelqu'un a des pistes pour m'aider ça serait cool.

    Nb : quand j'utilise Google API cela fonctionne, mais pour des questions de sécurité je préfère générer le QRcode en local, d’où le développement de cette solution. Et je précise que c'est dans un but d'automatisation.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    est-ce que le fichier png fait la même taille que le fichier récupéré manuellement ?
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    mars 2021
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2021
    Messages : 109
    Points : 179
    Points
    179
    Par défaut
    Alors le png récupéré a la main fait 1.69ko alors que celui avec le URLDownloadToFile fait 862 octets. Donc non il ne font pas la meme taille, c'est étrange...

    Et je viens de m’apercevoir que l'affichage sur chrome et edge fonctionne mais pas sur firefox, je sais pas si ça a un rapport...

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    1 983
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 983
    Points : 5 016
    Points
    5 016
    Par défaut
    hello,
    normal que cela ne fonctionne pas car tu télécharges le fichier htm généré et pas un png.
    ton code html utilise du javascript et donc si il n'est pas exécuté (par un navigateur par exemple) le fichier png ne sera pas généré.
    Je te propose une solution plus simple :
    utiliser ZXing.Net (assemblage dotnet) qui est accessible par VBA par objet COM Interop. Il permet non seulement de générer des images QRCODE mais aussi de les décoder.
    1 - Télécharger la dernière version ZXing.Net.0.16.6.0.zip
    2 - Extraire les fichiers qui se trouvent dans le répertoire interop du zip dans un répertoire avec droits de lecture pour tous les utilisateurs potentiels (et qui ne sera pas effacé).
    3 - Exécuter l'enregistrement de l'assemblage par la commande register.cmd (exécuter en tant qu'administrateur).
    4 - Si l'enregistrement est réussi on devrait voir apparaître dans Outils/Références de l'éditeur vba :


    port of the java based barcode scanning library for .net (java zxing 29.07.2019 21:30:35)


    cocher alors la case correspondante dans les références :

    Nom : ZxingInteropVBA.PNG
Affichages : 26
Taille : 28,1 Ko


    et avec un code VBA comme celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Function Encode_To_QR_Code_To_File()
       Dim writer As IBarcodeWriter
       Dim qrCodeOptions As QrCodeEncodingOptions
       Dim pixelDataResult As PixelData
     
     
       Set qrCodeOptions = New QrCodeEncodingOptions
       Set writer = New BarcodeWriter
       writer.Format = BarcodeFormat_QR_CODE
       Set writer.Options = qrCodeOptions
       qrCodeOptions.Height = 100
       qrCodeOptions.Width = 100
       qrCodeOptions.CharacterSet = "UTF-8"
       qrCodeOptions.Margin = 10
       qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H
     
     
       writer.WriteToFile "blabla", "D:\temp\interop_qrcode.png", ImageFileFormat_Png
       'Or:
       'Set pixelDataResult = writer.Write("Test")
     
       qrCodeOptions.Height = 300
       qrCodeOptions.Width = 300
       qrCodeOptions.CharacterSet = "UTF-8"
       qrCodeOptions.Margin = 10
       qrCodeOptions.ErrorCorrection = ErrorCorrectionLevel_H
       writer.WriteToFile "big QRCODE avec des accents : éàî", "D:\temp\interop_bigqrcode.png", ImageFileFormat_Png
    End Function
    on obtient ceci :
    Nom : interop_qrcode.png
Affichages : 25
Taille : 849 octets Nom : interop_bigqrcode.png
Affichages : 24
Taille : 7,3 Ko


    Il y a d'autres exemples ici


    La licence de ce module est de type Apache-2.0 License donc d'utilisation libre.


    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    mars 2021
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2021
    Messages : 109
    Points : 179
    Points
    179
    Par défaut
    Super merci J.P pour ton aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. affichage ok sur serveur local mais pas sur iis
    Par foufoulol dans le forum IIS
    Réponses: 0
    Dernier message: 28/04/2009, 12h18
  2. Réponses: 14
    Dernier message: 08/01/2009, 10h29
  3. [Wamp] Installer wamp sur serveur local
    Par Dakuan dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 17/06/2008, 11h43
  4. Redirection de 3sites hébergés sur serveur locale
    Par newdurdur dans le forum Apache
    Réponses: 2
    Dernier message: 16/09/2006, 20h58
  5. [Déploiement] local sur serveur -> local sur ma machine
    Par annalady dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/09/2006, 13h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo