Ayant travaillé en logistique et en production, j’ai eu régulièrement besoin d’imprimer des étiquettes avec code barre. Et ça a toujours été un problème !
Les utilisations sont variées :
- étiquettes pour des ordres de fabrication (OF)
- étiquettes pour des produits standardisées, pour que votre 3PL s’y retrouve dans les produits qu’il traite
- étiquettes pour des boites de stockage (exemple : adresser les cases d’un entrepôt, avec un code barre que vous pouvez scanner)
La solution la plus agile et la plus économique que j’ai trouvée reste encore l’imprimante Dymo. Pour moins de 250 €, vous avez une solution prête à l’emploi (par exemple ici)
Une des limitations à laquelle j’ai été confrontée est l’impression à partir d’une liste excel. En effet, si vous devez imprimer les étiquettes de 10 produits différents, avec 1 étiquette pour chaque produit, il vous faut enregistrer le fichier excel, le charger dans le logiciel Dymo et imprimer. Schématiquement, ce que je veux faire, c’est ça :

Objectif : en 1 clic, imprimer des étiquettes à partir d’une liste Excel
Je cherchais une solution pour imprimer directement à partir d’Excel. Je n’ai rien trouvé qui me convenait, donc je l’ai construite. Sur certaines missions d’amélioration de la performance logistique, ça me permet de répondre avec une solution rapide, pas chère et clé en main, adaptée pour des PME.
Imprimer une étiquette dymo a partir d’Excel : mode d’emploi
Il y a 4 étapes :
- 1. Installer l’imprimante et le logiciel
- 2. Configurer un masque (template) d’étiquette, en nommant les champs
- 3. Ajouter la macro dans Excel et préparer vos données
- 4. Imprimer !
1. Installer l’imprimante et le logiciel
Une fois que vous vous êtes procuré une imprimante Dymo, téléchargez le logiciel. Attention, il faut télécharger l’ancienne version de Dymo Label Software (version 8). Vous la trouverez ici. Allez ensuite chercher The Latest DYMO Label Software for legacy DYMO Labelwriter 4 series and older :

Capture d’écran du portail de téléchargement dymo
Une fois téléchargé, installez le logiciel et ouvrez le.
2. Créer un masque (template) d’étiquette
Ouvrez le logiciel et sélectionner le type d’étiquette :

Ecran de sélection de la taille d’étiquette
Réglez les préférences d’impression à Qualité = Texte. C’est amplement suffisant et l’impression va beaucoup plus vite
Ajoutez les champs que vous voulez faire apparaître dans votre template:

Ajoutez les champs par glisser-déposer
Lorsque vous ajoutez un champ, il faut le nommer, afin que vous puissiez ensuite le relier aux données de votre feuille Excel. Pour ce faire, sélectionnez un champ, et cliquez sur Propriétés… Allez ensuite dans l’onglet Avancé, et adaptez le Nom de référence du champ :

Boîte de dialogue pour modifier le nom du champ. Attention à garder un nom de champ attaché
Vous pouvez ensuite enregistrer votre template d’étiquette sur votre ordinateur.
3. Ajouter la macro dans Excel et préparer vos données
Pour vous évitez des heures de recherche, j’ai écrit ici la macro directement utilisable. Vous n’avez qu’à l’ajouter dans l’éditeur de code VB, ajouter un bouton, et c’est bon !
J’ai fait une première macro pour imprimer une seule étiquette :
Sub ImprimerEtiquetteSimple()
Dim myDymo As Object
Dim dymoAddIn As Object
Dim dymoLabels As Object
' Chemin de ton fichier .label
Dim cheminLabel As String
cheminLabel = "C:\Users\nicol\OneDrive\Documents\02 - Altarum\Plaquette and chartre graphique V2\Articles\Excel to dymo\label-produit.label"
' Nom exact de ton imprimante
Dim imprimante As String
imprimante = "DYMO LabelWriter 450 Turbo"
On Error GoTo Erreur
' Création des objets DYMO
Set myDymo = New DYMO_DLS_SDK.DymoHighLevelSDK
Set dymoAddIn = myDymo.dymoAddIn
Set dymoLabels = myDymo.dymoLabels
' Ouvre l'étiquette
If dymoAddIn.Open(cheminLabel) = False Then
MsgBox "Impossible d'ouvrir le fichier .label", vbCritical
Exit Sub
End If
' Remplace un champ (doit exister dans ton label)
dymoLabels.SetField "produit", "Hello DYMO"
' Sélection de l’imprimante
If dymoAddIn.SelectPrinter(imprimante) = False Then
MsgBox "Imprimante introuvable", vbCritical
Exit Sub
End If
' Impression
dymoAddIn.StartPrintJob
dymoAddIn.EndPrintJob
MsgBox "Étiquette imprimée !"
Exit Sub
Erreur:
MsgBox "Erreur : " & Err.Description, vbCritical
End Sub
Puis une version plus élaborée avec :
- ChoisirFichierLabel() pour choisir le modèle d’étiquette
- ChoisirImprimante() pour choisir l’imprimante
- Deux macros : une pour imprimer une seule ligne et une pour imprimer tout le tableau
- Une macro pour pouvoir choisir l’imprimante
Pour choisir le fichier .label :
Sub ChoisirFichierLabel()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Sélectionner un fichier DYMO (.label)"
.Filters.Clear
.Filters.Add "Fichiers DYMO", "*.label"
.AllowMultiSelect = False
If .Show = -1 Then
g_CheminLabel = .SelectedItems(1)
MsgBox "Fichier sélectionné :" & vbCrLf & g_CheminLabel, vbInformation
Else
MsgBox "Aucun fichier sélectionné.", vbExclamation
End If
End With
End Sub
Choix de l’imprimante :
Sub ChoisirImprimante()
Dim nouvelleImprimante As String
nouvelleImprimante = InputBox( _
"Nom de l'imprimante DYMO :", _
"Choisir imprimante", _
g_NomImprimante)
If Trim(nouvelleImprimante) = "" Then
MsgBox "Aucune imprimante définie.", vbExclamation
Exit Sub
End If
g_NomImprimante = nouvelleImprimante
' Sauvegarde
SaveSetting "DYMO", "Config", "PrinterName", g_NomImprimante
MsgBox "Imprimante définie :" & vbCrLf & g_NomImprimante, vbInformation
End Sub
Et finalement les macros pour imprimer :
Option Explicit
Public g_CheminLabel As String
Public g_NomImprimante As String
Sub ImprimerLigneSelectionnee()
ImprimerEtiquetteDYMO False
End Sub
Sub ImprimerToutLeTableau()
ImprimerEtiquetteDYMO True
End Sub
Sub ImprimerEtiquetteDYMO(Optional ByVal ToutLeTableau As Boolean = False)
Dim myDymo As DYMO_DLS_SDK.DymoHighLevelSDK
Dim dymoAddIn As Object
Dim dymoLabels As Object
Dim cheminLabel As String
Dim imprimante As String
Dim cell As Range
Dim lo As ListObject
Dim ligneTableau As Range
Dim col As ListColumn
Dim indexLigne As Long
Dim nbImprimees As Long
Dim nomChamp As String
Dim valeurChamp As String
On Error GoTo Erreur
If g_CheminLabel = "" Then
MsgBox "Aucun fichier label sélectionné. Lance d'abord 'ChoisirFichierLabel'.", vbExclamation
Exit Sub
End If
cheminLabel = g_CheminLabel
If g_NomImprimante = "" Then
g_NomImprimante = "DYMO LabelWriter 450 Turbo"
End If
imprimante = g_NomImprimante
Set cell = ActiveCell
If cell Is Nothing Then
MsgBox "Aucune cellule sélectionnée.", vbExclamation
Exit Sub
End If
On Error Resume Next
Set lo = cell.ListObject
On Error GoTo Erreur
If lo Is Nothing Then
MsgBox "La cellule sélectionnée n'est pas dans un tableau Excel.", vbExclamation
Exit Sub
End If
If lo.DataBodyRange Is Nothing Then
MsgBox "Le tableau ne contient aucune ligne.", vbExclamation
Exit Sub
End If
If Intersect(cell, lo.DataBodyRange) Is Nothing Then
MsgBox "Sélectionne une cellule dans une ligne de données du tableau.", vbExclamation
Exit Sub
End If
Set myDymo = New DYMO_DLS_SDK.DymoHighLevelSDK
Set dymoAddIn = myDymo.dymoAddIn
Set dymoLabels = myDymo.dymoLabels
If Not dymoAddIn.Open(cheminLabel) Then
MsgBox "Impossible d'ouvrir le fichier .label", vbCritical
Exit Sub
End If
If Not dymoAddIn.SelectPrinter(imprimante) Then
MsgBox "Imprimante introuvable", vbCritical
Exit Sub
End If
dymoAddIn.StartPrintJob
If ToutLeTableau Then
For Each ligneTableau In lo.DataBodyRange.Rows
For Each col In lo.ListColumns
nomChamp = Trim(CStr(col.Name))
valeurChamp = GetCellText(ligneTableau.Cells(1, col.Index))
On Error Resume Next
dymoLabels.SetField nomChamp, valeurChamp
On Error GoTo Erreur
Next col
dymoAddIn.Print2 1, False, 1
nbImprimees = nbImprimees + 1
Next ligneTableau
Else
indexLigne = cell.Row - lo.DataBodyRange.Row + 1
Set ligneTableau = lo.DataBodyRange.Rows(indexLigne)
For Each col In lo.ListColumns
nomChamp = Trim(CStr(col.Name))
valeurChamp = GetCellText(ligneTableau.Cells(1, col.Index))
On Error Resume Next
dymoLabels.SetField nomChamp, valeurChamp
On Error GoTo Erreur
Next col
dymoAddIn.Print2 1, False, 1
nbImprimees = 1
End If
dymoAddIn.EndPrintJob
Exit Sub
Erreur:
On Error Resume Next
dymoAddIn.EndPrintJob
MsgBox "Erreur : " & Err.Number & " - " & Err.Description, vbCritical
End Sub
Private Function GetCellText(ByVal c As Range) As String
If IsError(c.Value) Then
GetCellText = ""
ElseIf IsEmpty(c.Value) Then
GetCellText = ""
Else
GetCellText = CStr(c.Value)
End If
End Function
Et voilà le résultat :
Enjoy !