je me suis créé ma propre librairie QRCodeGenerator.dll

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dysorthographie

XLDnaute Barbatruc
Bonjour,
je me suis créé ma propre librairie QRCodeGenerator.dll

en pièce jointe QRCodeGenerator.ZIP qui contient:
attachment.php


Voici une documentation complète pour utiliser la DLL QRCodeGenerator.dll dans VBA, incluant l’enregistrement de la DLL, l’activation dans VBA, et un exemple de code adapté à votre contexte.

1. Enregistrement de la DLL

Pour utiliser QRCodeGenerator.dll dans VBA, vous devez d’abord l’enregistrer avec regasm (outil fourni avec le SDK .NET).
Étapes :

  1. Ouvrir l’invite de commandes en tant qu’administrateur
  2. Naviguer vers le répertoire contenant QRCodeGenerator.dll
  3. Exécuter la commande suivante (remplacez le chemin par le vôtre) : cmd



    C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "C:\Chemin\Complet\Vers\QRCodeGenerator.dll" /tlb:QRCodeGenerator.tlb /codebase



    • /tlb génère le fichier .tlb nécessaire pour VBA.
    • /codebase enregistre le chemin absolu de la DLL.


2. Activation de la bibliothèque dans VBA


  1. Ouvrir l’éditeur VBA (Alt + F11 dans Excel, Word, etc.)
  2. Aller dans Outils > Références
    • Si elle n’apparaît pas, cliquez sur Parcourir et sélectionnez le fichier QRCodeGenerator.tlb généré précédemment.

3. Exemple de code VBA pour générer un QR Code

Voici un exemple adapté à votre code source, pour un formulaire VBA (UserForm) contenant :

  • Un bouton btnGenerer
  • Une zone de texte txtQRData (pour le contenu du QR Code)
  • Un contrôle Image nommé QrCode (pour afficher le QR Code)
Code:
[I]Private Sub btnGenerer_Click()
Dim qrGenerator As QRCodeGenerator.QRCodeGenerator
Set qrGenerator = New QRCodeGenerator.QRCodeGenerator

' Redimensionner l'image pour remplir le contrôle
Me.QrCode.PictureSizeMode = fmPictureSizeModeStretch

' Effacer l'image précédente
Set Me.QrCode.Picture = Nothing

' Générer et afficher le QR Code si du texte est saisi
If Trim(Me.txtQRData.Value) <> "" Then
Set Me.QrCode.Picture = qrGenerator.GenerateQRCodeIPic(Me.txtQRData.Value)
Else
MsgBox "Veuillez entrer du texte pour générer le QR Code.", vbExclamation
End If

' Libérer la mémoire
Set qrGenerator = Nothing
End Sub[/I]



Annexe:
'===============================================================================
' MANUEL UTILISATEUR — QRCodeLib
' DLL COM pour la génération de QR codes
' Usage : VBA / Excel
'===============================================================================

'-------------------------------------------------------------------------------
' 1. INSTALLATION
'-------------------------------------------------------------------------------
' 1. Compiler la DLL en mode Release (x86 pour Excel 32-bit, x64 pour 64-bit)
' 2. Exécuter en administrateur :
' RegAsm.exe QRCodeLib.dll /tlb /codebase
' 3. Dans VBA : Outils > Références > cocher "QRCodeLib"

'-------------------------------------------------------------------------------
' 2. DÉCLARATION
'-------------------------------------------------------------------------------
' Liaison tardive (sans référence) :
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

' Liaison anticipée (avec référence cochée) :
Dim gen As New QRCodeLib.QRCodeGenerator

'-------------------------------------------------------------------------------
' 3. MÉTHODES DISPONIBLES
'-------------------------------------------------------------------------------

'--- GenerateQRCodeIPic --------------------------------------------------------
' Retourne un IPictureDisp assignable à .Picture d'un contrôle Image ActiveX
'
' Paramètres :
' content (String) — texte à encoder (URL, texte libre, email, tel...)
' sizePixels (Integer) — taille en pixels, défaut 300
' margin (Integer) — marge en modules, défaut 1
' errorLevel (Integer) — niveau de correction d'erreur :
' 0 = L (7%)
' 1 = M (15%) ← défaut
' 2 = Q (25%)
' 3 = H (30%)

'--- GenerateQRCodeBytes -------------------------------------------------------
' Retourne un tableau d'octets PNG (Byte())
' Utile pour sauvegarder dans un fichier ou traiter manuellement

'-------------------------------------------------------------------------------
' 4. EXEMPLES
'-------------------------------------------------------------------------------

'--- Exemple 1 : insérer un QR code dans un contrôle Image ActiveX ------------
Sub ExempleImage()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

' Le contrôle "Image1" doit être un contrôle ActiveX Forms.Image
' Insertion : Développeur > Insérer > Contrôles ActiveX > Image
set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic("https://www.example.com", 300, 1, 1)

Set gen = Nothing
End Sub

'--- Exemple 2 : QR code avec niveau de correction élevé ----------------------
Sub ExempleNiveauH()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic("https://www.example.com", 400, 4, 3)

Set gen = Nothing
End Sub

'--- Exemple 3 : sauvegarder le QR code en fichier PNG ------------------------
Sub ExempleSauvegarde()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim bytes() As Byte
bytes = gen.GenerateQRCodeBytes("https://www.example.com", 300, 1, 1)

Dim chemin As String
chemin = "C:\Temp\qrcode.png"

Dim fileNum As Integer
fileNum = FreeFile()
Open chemin For Binary As #fileNum
Put #fileNum, , bytes
Close #fileNum

MsgBox "QR code sauvegardé : " & chemin
Set gen = Nothing
End Sub

'--- Exemple 4 : générer depuis la valeur d'une cellule -----------------------
Sub ExempleDepuisCellule()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim contenu As String
contenu = ThisWorkbook.Sheets("Feuil1").Range("A1").Value

set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic(contenu, 300, 1, 1)

Set gen = Nothing
End Sub

'--- Exemple 5 : boucle sur une plage de cellules -----------------------------
Sub ExempleBoucle()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Feuil1")

Dim i As Integer
For i = 1 To 10
Dim contenu As String
contenu = ws.Cells(i, 1).Value

If contenu <> "" Then
' Sauvegarde chaque QR code en fichier PNG numéroté
Dim bytes() As Byte
bytes = gen.GenerateQRCodeBytes(contenu, 200, 1, 1)

Dim chemin As String
chemin = "C:\Temp\qrcode_" & i & ".png"

Dim fileNum As Integer
fileNum = FreeFile()
Open chemin For Binary As #fileNum
Put #fileNum, , bytes
Close #fileNum
End If
Next i

Set gen = Nothing
MsgBox "Génération terminée."
End Sub

'-------------------------------------------------------------------------------
' 5. TABLEAU DES PARAMÈTRES
'-------------------------------------------------------------------------------
'
' Paramètre | Type | Défaut | Valeurs possibles
' -------------|---------|--------|------------------------------------------
' content | String | — | Toute chaîne UTF-8
' sizePixels | Integer | 300 | 100, 200, 300, 400, 500...
' margin | Integer | 1 | 0 (aucune) à 4 (norme recommandée)
' errorLevel | Integer | 1 | 0=L, 1=M, 2=Q, 3=H
'
'-------------------------------------------------------------------------------
' 6. NOTES
'-------------------------------------------------------------------------------
' - Le contrôle Image dans Excel doit être un contrôle ActiveX (Forms.Image.1)
' et non une image insérée via Insertion > Images.
' - Plus sizePixels est grand, meilleure est la lisibilité à l'impression.
' - Privilégier errorLevel=3 (H) si le QR code risque d'être partiellement
' masqué (logo superposé, impression dégradée).
' - La DLL ne crée aucun fichier temporaire — tout est traité en mémoire.
 

Pièces jointes

Bonjour,
je me suis créé ma propre librairie QRCodeGenerator.dll

en pièce jointe QRCodeGenerator.ZIP qui contient:
attachment.php


Voici une documentation complète pour utiliser la DLL QRCodeGenerator.dll dans VBA, incluant l’enregistrement de la DLL, l’activation dans VBA, et un exemple de code adapté à votre contexte.

1. Enregistrement de la DLL

Pour utiliser QRCodeGenerator.dll dans VBA, vous devez d’abord l’enregistrer avec regasm (outil fourni avec le SDK .NET).
Étapes :

  1. Ouvrir l’invite de commandes en tant qu’administrateur
  2. Naviguer vers le répertoire contenant QRCodeGenerator.dll
  3. Exécuter la commande suivante (remplacez le chemin par le vôtre) : cmd



    C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe "C:\Chemin\Complet\Vers\QRCodeGenerator.dll" /tlb:QRCodeGenerator.tlb /codebase



    • /tlb génère le fichier .tlb nécessaire pour VBA.
    • /codebase enregistre le chemin absolu de la DLL.


2. Activation de la bibliothèque dans VBA


  1. Ouvrir l’éditeur VBA (Alt + F11 dans Excel, Word, etc.)
  2. Aller dans Outils > Références
    • Si elle n’apparaît pas, cliquez sur Parcourir et sélectionnez le fichier QRCodeGenerator.tlb généré précédemment.

3. Exemple de code VBA pour générer un QR Code

Voici un exemple adapté à votre code source, pour un formulaire VBA (UserForm) contenant :

  • Un bouton btnGenerer
  • Une zone de texte txtQRData (pour le contenu du QR Code)
  • Un contrôle Image nommé QrCode (pour afficher le QR Code)
Code:
[I]Private Sub btnGenerer_Click()
Dim qrGenerator As QRCodeGenerator.QRCodeGenerator
Set qrGenerator = New QRCodeGenerator.QRCodeGenerator

' Redimensionner l'image pour remplir le contrôle
Me.QrCode.PictureSizeMode = fmPictureSizeModeStretch

' Effacer l'image précédente
Set Me.QrCode.Picture = Nothing

' Générer et afficher le QR Code si du texte est saisi
If Trim(Me.txtQRData.Value) <> "" Then
Set Me.QrCode.Picture = qrGenerator.GenerateQRCodeIPic(Me.txtQRData.Value)
Else
MsgBox "Veuillez entrer du texte pour générer le QR Code.", vbExclamation
End If

' Libérer la mémoire
Set qrGenerator = Nothing
End Sub[/I]



Annexe:
'===============================================================================
' MANUEL UTILISATEUR — QRCodeLib
' DLL COM pour la génération de QR codes
' Usage : VBA / Excel
'===============================================================================

'-------------------------------------------------------------------------------
' 1. INSTALLATION
'-------------------------------------------------------------------------------
' 1. Compiler la DLL en mode Release (x86 pour Excel 32-bit, x64 pour 64-bit)
' 2. Exécuter en administrateur :
' RegAsm.exe QRCodeLib.dll /tlb /codebase
' 3. Dans VBA : Outils > Références > cocher "QRCodeLib"

'-------------------------------------------------------------------------------
' 2. DÉCLARATION
'-------------------------------------------------------------------------------
' Liaison tardive (sans référence) :
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

' Liaison anticipée (avec référence cochée) :
Dim gen As New QRCodeLib.QRCodeGenerator

'-------------------------------------------------------------------------------
' 3. MÉTHODES DISPONIBLES
'-------------------------------------------------------------------------------

'--- GenerateQRCodeIPic --------------------------------------------------------
' Retourne un IPictureDisp assignable à .Picture d'un contrôle Image ActiveX
'
' Paramètres :
' content (String) — texte à encoder (URL, texte libre, email, tel...)
' sizePixels (Integer) — taille en pixels, défaut 300
' margin (Integer) — marge en modules, défaut 1
' errorLevel (Integer) — niveau de correction d'erreur :
' 0 = L (7%)
' 1 = M (15%) ← défaut
' 2 = Q (25%)
' 3 = H (30%)

'--- GenerateQRCodeBytes -------------------------------------------------------
' Retourne un tableau d'octets PNG (Byte())
' Utile pour sauvegarder dans un fichier ou traiter manuellement

'-------------------------------------------------------------------------------
' 4. EXEMPLES
'-------------------------------------------------------------------------------

'--- Exemple 1 : insérer un QR code dans un contrôle Image ActiveX ------------
Sub ExempleImage()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

' Le contrôle "Image1" doit être un contrôle ActiveX Forms.Image
' Insertion : Développeur > Insérer > Contrôles ActiveX > Image
set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic("https://www.example.com", 300, 1, 1)

Set gen = Nothing
End Sub

'--- Exemple 2 : QR code avec niveau de correction élevé ----------------------
Sub ExempleNiveauH()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic("https://www.example.com", 400, 4, 3)

Set gen = Nothing
End Sub

'--- Exemple 3 : sauvegarder le QR code en fichier PNG ------------------------
Sub ExempleSauvegarde()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim bytes() As Byte
bytes = gen.GenerateQRCodeBytes("https://www.example.com", 300, 1, 1)

Dim chemin As String
chemin = "C:\Temp\qrcode.png"

Dim fileNum As Integer
fileNum = FreeFile()
Open chemin For Binary As #fileNum
Put #fileNum, , bytes
Close #fileNum

MsgBox "QR code sauvegardé : " & chemin
Set gen = Nothing
End Sub

'--- Exemple 4 : générer depuis la valeur d'une cellule -----------------------
Sub ExempleDepuisCellule()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim contenu As String
contenu = ThisWorkbook.Sheets("Feuil1").Range("A1").Value

set ActiveSheet.OLEObjects("Image1").Object.Picture = _
gen.GenerateQRCodeIPic(contenu, 300, 1, 1)

Set gen = Nothing
End Sub

'--- Exemple 5 : boucle sur une plage de cellules -----------------------------
Sub ExempleBoucle()
Dim gen As Object
Set gen = CreateObject("QRCodeLib.QRCodeGenerator")

Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Feuil1")

Dim i As Integer
For i = 1 To 10
Dim contenu As String
contenu = ws.Cells(i, 1).Value

If contenu <> "" Then
' Sauvegarde chaque QR code en fichier PNG numéroté
Dim bytes() As Byte
bytes = gen.GenerateQRCodeBytes(contenu, 200, 1, 1)

Dim chemin As String
chemin = "C:\Temp\qrcode_" & i & ".png"

Dim fileNum As Integer
fileNum = FreeFile()
Open chemin For Binary As #fileNum
Put #fileNum, , bytes
Close #fileNum
End If
Next i

Set gen = Nothing
MsgBox "Génération terminée."
End Sub

'-------------------------------------------------------------------------------
' 5. TABLEAU DES PARAMÈTRES
'-------------------------------------------------------------------------------
'
' Paramètre | Type | Défaut | Valeurs possibles
' -------------|---------|--------|------------------------------------------
' content | String | — | Toute chaîne UTF-8
' sizePixels | Integer | 300 | 100, 200, 300, 400, 500...
' margin | Integer | 1 | 0 (aucune) à 4 (norme recommandée)
' errorLevel | Integer | 1 | 0=L, 1=M, 2=Q, 3=H
'
'-------------------------------------------------------------------------------
' 6. NOTES
'-------------------------------------------------------------------------------
' - Le contrôle Image dans Excel doit être un contrôle ActiveX (Forms.Image.1)
' et non une image insérée via Insertion > Images.
' - Plus sizePixels est grand, meilleure est la lisibilité à l'impression.
' - Privilégier errorLevel=3 (H) si le QR code risque d'être partiellement
' masqué (logo superposé, impression dégradée).
' - La DLL ne crée aucun fichier temporaire — tout est traité en mémoire.
Bjr, Ouaaouuuaouaa.... il y a du Taff là-dessous ! Bravo !
 
Bonsoir Robert
félicitation
je testerais demain
sinon la lecture renvoie la donnée ou non?par exemple si je scanne avec mon phonne un qrcode produit par ton moteur lib me renverra t il la donnée originale ?
 
salut Patrick,
tu as deux fonction, une qui retourne l'image, l'autre qui renvoie byte() pour enregistrer l'image.

le qrcode retour ce que tu as tapé majuscule, minuscule, accent, cédille.

j'avoue que sur un texte que j'ai testé après ma publication d'un copié collé d'une zone provenant du forum la conversion en provenance de utf8 peut poser problème, je n'y avais pas pensé. mais comme tu t'en doutes c'est pas grand chose et je vais faire ce qu'il faut.

ceci dit je peux fournir un lien de téléchargement de la source sur mon GUITLAB pour les adepte de Visual Studio 2022 !
 

Pièces jointes

Dernière édition:

Pièces jointes

bonjour,
pour ceux que ça intéresse voici la source vb.net

j'ai corrigé ce que j'avais dit plus hot sur utf8

pour déregistrer la dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe /unregister "CheminComplet\QRCodeGenerator.dll"
Salut,
le souci que même si on déregistre la dll , il reste des clés de registre dans la base de registre (les clés des interfaces par exemple)
Le plus propre pour installer ce type de dll c'est d'utiliser un installeur ( exemple nsi de mon cousin nullsoft) . Cela permet de tout faire automatiquement : tous les fichiers nécessaires sont dans le exe d'installation, il y a un passage automatiquement en mode administrateur, les fichiers sont installés dans un répertoire de programme file, le regasm se fait pendant l'installation, on installe pour du 32 bits et du 64 bits, il y a un désinstalleur. On voit l'application dans les applications installées de l'O.S : c'est là qu'on peut désinstaller l'application. Et plutot que de faire une dll à chaque nouvelle classe, faire une seule dll qui contient toutes les classes.
Nullosse
 
bonsoir,
bonsoir nullosse, je suis d'accord sur toutes tes remarques, il est vrai que des outils comme NSI permet de générer un installeur.

j'ai plus l'habitude de créer des déploiement pour mes applications dot.net pas de fournir des libraires éligible à la com.

je t'avoue que je ne connaissais pas NSI avant de publier. j'ai demandé à nos 3 IA préféré une solution pour permettre d'utiliser les dll avec VBA. je voulais un installeur mais annonimement il m'ont répondu que c'était pas possible.

quand je leur est communiqué ta réponse il me l'ont expliqué avec moultes détails et m'ont fourni la même réponse que ma première fois as savoir RegAsm.exe.

maintenant que je connais NSI je vais m'y intéresser. en tous les cas merci.
 
Salut,
J'ai recréé un assemblage VbComServer.dll à partir de tes classes QrCodeGenerator et TimerRd
En pièce jointe un .zip qui contient :
le .nsi pour fabriquer l'exe d'installation
l'exe d'installation VbComServerInstaller.exe
les fichiers texte de licence
un classeur qui utilise les deux classes de l'assemblage
normalement après installation par VbComServerInstaller.exe on doit voir VbComServer dans les références VBA.
Pour désinstaller aller dans applications installées et lancer la désinstallation sur VbComServer

VbComServer.gif



Nullosse
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

K
Réponses
5
Affichages
2 K
K
Retour