dysorthographie
XLDnaute Barbatruc
Bonjour,
je me suis créé ma propre librairie QRCodeGenerator.dll
en pièce jointe QRCodeGenerator.ZIP qui contient:
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 :
2. Activation de la bibliothèque dans VBA
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 :
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.
je me suis créé ma propre librairie QRCodeGenerator.dll
en pièce jointe QRCodeGenerator.ZIP qui contient:
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 :
- Ouvrir l’invite de commandes en tant qu’administrateur
- Naviguer vers le répertoire contenant QRCodeGenerator.dll
- 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
- Ouvrir l’éditeur VBA (Alt + F11 dans Excel, Word, etc.)
- 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.