Aller au contenu
Accueil » Publications » Imprimer facilement des étiquettes avec code barre à partir d’Excel

Imprimer facilement des étiquettes avec code barre à partir d’Excel

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. 1. Installer l’imprimante et le logiciel
  2. 2. Configurer un masque (template) d’étiquette, en nommant les champs
  3. 3. Ajouter la macro dans Excel et préparer vos données
  4. 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 DYMO Labell Software

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

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é

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 !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *