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

Macros et VBA Excel Discussion :

génération de QR Code


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut génération de QR Code
    Bonjour à tous,

    J'ai trouvé sur différent forum comment généré un QR Code et ca fonctionne plutot pas mal.
    Voici le code que j'utilise


    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
     
    Sub setQR(Rg1 As String, qr As String)
    'Updated by Extendoffice 2018/8/22
        Dim xSRg As Range
        Dim xRRg As Range
        Dim xObjOLE As OLEObject
        On Error Resume Next
        'Set xSRg = Range(Rg1)
        'Set xSRg = Application.InputBox("Please select the cell you will create QR code based on", "Kutools for Excel", , , , , , 8)
        'If xSRg Is Nothing Then Exit Sub
        'Set xRRg = Application.InputBox("Select a cell to place the QR code", "Kutools for Excel", , , , , , 8)
        'If xRRg Is Nothing Then Exit Sub
        Set xRRg = Range(Rg1)
        Application.ScreenUpdating = False
        Set xObjOLE = ActiveSheet.OLEObjects.Add("BARCODE.BarCodeCtrl.1")
        xObjOLE.Object.Style = 11
        xObjOLE.Object.Value = qr
        ActiveSheet.Shapes.Item(xObjOLE.Name).Copy
        ActiveSheet.Paste xRRg
        xObjOLE.Delete
        Application.ScreenUpdating = True
    End Sub
    Jutilse cette fonction avec comme paramètre le range (variable Rg1) où je souhaite que mon QR code commence ainsi que le texte que contient mon QR Code (variable qr)

    En fait, lorsqu'une cellule de l'excel change, ca appelle la fonction et met à jour mon qr code

    Par contre au niveau de l'affichage ca fait un truc bizarre. Lorsque je me modifie successivement mes cellules le QR code se modifie mais ne remplace pas l'ancien. Et pire, il ne met pas par dessus mais en décallé (voir image ci dessous)
    Nom : Capture d’écran 2023-06-15 171617.jpg
Affichages : 1283
Taille : 39,8 Ko

    En plus de cela, je n'ai pas du tout accès au QR code pour le déplacer ou le supprimer

    Sauriez vous résoudre mon problème ?

    Par avance merci

    Cdlt

    Marsup

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Points : 1 877
    Points
    1 877
    Par défaut
    A tout hasard:
    C'est sûr que Application.ScreenUpdating = True est toujours exécuté ?
    Ça me dérange un peu de voir On Error Resume Next car ça revient à masquer les erreurs. Pour débugger, je conseillerais de faire sauter cette ligne.

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    Hello,
    A noter qu'en utilisant l' API google chart on peut générer son QRCode par cette API ( voir ici)
    Code à mettre dans un module VBA :
    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
    #If VBA7 Then
        Public Declare Function URLDownloadToFile Lib "urlmon" _
                                 Alias "URLDownloadToFileA" ( _
                                 ByVal pCaller As LongPtr, _
                                 ByVal szURL As String, _
                                 ByVal szFileName As String, _
                                 ByVal dwReserved As LongPtr, _
                                 ByVal lpfnCB As LongPtr) _
                                 As Long
    #Else
        Public Declare 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
    #End If
    Code à mettre dans le VBA de la feuille où l'on affiche le QRCode dans un activeX Image ( le code ici fonctionne sur changement de sélection) :
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Target.Value = "" Then
        Dim ret As Long
        Dim strURL As String
        Dim strFile As String
        strURL = "https://chart.googleapis.com/chart?chs=250x250&cht=qr&chof=gif&chl=" & Target.Value
        strFile = "D:\Temp\qrcode.gif"
        ret = URLDownloadToFile(0, strURL, strFile, 0, 0)
        If ret Then
            MsgBox "Failed to download image", vbExclamation
            Exit Sub
        End If
        Image1.Picture = LoadPicture(strFile)
        Kill strFile
    End If
    End Sub
    Nom : QrCodeGoogleApis.gif
Affichages : 1261
Taille : 38,0 Ko

    Les avantages :
    Cela permet de ne pas utiliser d'activex externe
    Les inconvénients:
    Nécessite une liaison internet permanente.
    Il peut y avoir des temps de latence dans l'obtention du QRCode.
    Dépend de l'API google chart qui peut changer de statut ou disparaitre.
    Statut actuel :
    Les outils de création de graphiques Google sont performants, simples à utiliser et offerts.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  4. #4
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Bonjour et merci à tous pour votre aide.

    Au final j'ai créer l'objet QR code dans lequel je viens changer sa valeur lors d'un changement de cellule.
    Comme ca, je n'ai pas a créer systématique un nouvel objet

    Cdlt

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Directeur R&D Pharmaceutique
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur R&D Pharmaceutique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut probleme code VBA
    bonjour j'ai un petit probleme avec le code, message "doit être mis à jour pour compatibilité avec systèmes 64 bits, ... mettez à jour les instructions declare puis marquez les avec l'attribut PtrSafe", mais je ne sais pas comment faire, je n'ai pas pu tester la routine selectionchange du coup

    merci de m'aider


    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
    #If VBA7 Then
        Public Declare Function URLDownloadToFile Lib "urlmon" _
                                 Alias "URLDownloadToFileA" ( _
                                 ByVal pCaller As LongPtr, _
                                 ByVal szURL As String, _
                                 ByVal szFileName As String, _
                                 ByVal dwReserved As LongPtr, _
                                 ByVal lpfnCB As LongPtr) _
                                 As Long
    #Else
        Public Declare 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
    #End If


    Ami calmant, J.P[/QUOTE]

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    Hello,
    A essayer :
    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
    #If VBA7 Then
        Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
          Alias "URLDownloadToFileA" ( _
            ByVal pCaller As LongPtr, _
            ByVal szURL As String, _
            ByVal szFileName As String, _
            ByVal dwReserved As Long, _
            ByVal lpfnCB As LongPtr _
          ) As Long
        Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #Else
        Private Declare 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
        Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #End If
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Directeur R&D Pharmaceutique
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur R&D Pharmaceutique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut encore un souci, désolé
    C'est mieux, merci beaucoup, mais maintenant dans la routine de la feuille j'ai le message "sub ou fonction n'existe pas" pour ret = URLDownloadToFile(0, strURL, strFile, 0, 0)

    j'ai bien copié les déclarations dans un module, pas de signalement d'erreur

    ça risque d'être pareil pour deletecache

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    Hello,
    oops , il faut mettre les routines en Public et pas en Private sinon on ne les voit que dans le module où elles sont :

    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
    #If VBA7 Then
        Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
          Alias "URLDownloadToFileA" ( _
            ByVal pCaller As LongPtr, _
            ByVal szURL As String, _
            ByVal szFileName As String, _
            ByVal dwReserved As Long, _
            ByVal lpfnCB As LongPtr _
          ) As Long
        Public Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #Else
        Public Declare 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
        Public Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #End If
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Directeur R&D Pharmaceutique
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur R&D Pharmaceutique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut objet image1
    super merci, j'aurai dû y penser
    comme je ne suis pas cador VBA j'ai encore un souci avec image1.picture = (...) message objet requis
    j'ai essayé de nommer une cellule "image1", ou de placer une image appelée image1, sans succès
    désolé du dérangement
    gilles

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    Citation Envoyé par jakboregar Voir le message
    comme je ne suis pas cador VBA j'ai encore un souci avec image1.picture = (...) message objet requis
    j'ai essayé de nommer une cellule "image1", ou de placer une image appelée image1, sans succès
    désolé du dérangement
    gilles
    Il faut insérer un contrôle ActiveX Image dans sa feuille :
    Développeur/Mode Création
    Développeur/Insérer/Contrôle Activex/Image
    Si c'est le premier contrôle ActiveX Image inséré dans la feuille il s'appellera image1
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Directeur R&D Pharmaceutique
    Inscrit en
    Décembre 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Directeur R&D Pharmaceutique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 5
    Points : 7
    Points
    7
    Par défaut ça marche
    Citation Envoyé par jurassic pork Voir le message
    Il faut insérer un contrôle ActiveX Image dans sa feuille :
    Développeur/Mode Création
    Développeur/Insérer/Contrôle Activex/Image
    Si c'est le premier contrôle ActiveX Image inséré dans la feuille il s'appellera image1
    super merci
    j'ai paramétré autosize ! comme ça plus d'image tronquée
    j'ai créé une image blanche pour effacer le QRcode si besoin, mais il y apeut être un autre moyen
    en tous cas merci bien du temps consacré à mes questions

  12. #12
    Membre actif Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    575
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 575
    Points : 262
    Points
    262
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    Hello,
    oops , il faut mettre les routines en Public et pas en Private sinon on ne les voit que dans le module où elles sont :

    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
    #If VBA7 Then
        Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
          Alias "URLDownloadToFileA" ( _
            ByVal pCaller As LongPtr, _
            ByVal szURL As String, _
            ByVal szFileName As String, _
            ByVal dwReserved As Long, _
            ByVal lpfnCB As LongPtr _
          ) As Long
        Public Declare PtrSafe Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #Else
        Public Declare 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
        Public Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" _
          Alias "DeleteUrlCacheEntryA" ( _
            ByVal lpszUrlName As String _
          ) As Long
    #End If
    Ami calmant, J.P
    Bonjour à tous,

    Je me permets de revenir sur cette discussion, car j'ai essayé ce générer un qr code avec cette méthode.

    Le souci c'est que quand je veux ouvrir l'image j'ai l'erreur suivant: "il semble que nous ne prenions pas en charge ce type de fichier".

    Quelqu'un saurait pourquoi ?

    Merci d'avance

    Marsup

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

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 007
    Points : 9 401
    Points
    9 401
    Par défaut
    Hello,
    va voir ici . Dans le classeur téléchargeable , il y a une fonction personnalisée (URL_QRCode_SERIES) pour afficher un QRCODE dans une cellule. Moi je n'arrive plus à faire fonctionner le code de mes messages précédents
    Google has deprecated and retired the chart API.

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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/04/2007, 14h06
  2. Génération automatique de code
    Par Ulmo dans le forum C++
    Réponses: 9
    Dernier message: 21/02/2007, 18h07
  3. Génération d'un code couleur Héxa
    Par shadeoner dans le forum Langage
    Réponses: 10
    Dernier message: 11/08/2006, 14h50
  4. [MySQL] Génération d'un code dans une requete d'insertion
    Par caro_tpl dans le forum Langage SQL
    Réponses: 1
    Dernier message: 05/05/2006, 10h14
  5. [Plugin]Gestion de génération automatique de code
    Par Maggic dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 11/05/2004, 11h35

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