Créer étiquettes fichier Word depuis tableau Excel

Bonjour à tout le forum,

Je cherche à créer des étiquettes sur un fichier Word composé de 40 signets à partir d'un tableau EXCEL.

J'ai récupéré la macro suivante sur un forum et elle a été adaptée. Seulement il y a un message d'erreur à la deuxième étape (lors de l'ouverture du fichier Word visiblement)

Sub creation_etiquettes()
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
Dim i As Byte
Dim Cheminfic As String, fd As FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .AllowMultiSelect = False
        .Filters.Clear
        .Filters.Add "Document Word", "*.docx;*.doc"
        If .Show = -1 Then
            Cheminfic = .SelectedItems(1)
        End If
    End With
    If Cheminfic = "" Then Exit Sub

     Set WordApp = CreateObject("word.application")    'ouvre une session Word
    Set WordDoc = WordApp.Documents.Open(Cheminfic)    'ouvre le document Word
    WordApp.Visible = False    'Word est masqué pendant l'opération

    For i = 1 To 40
        'les signets du document Word sont nommés Blank_MP1_panel1 , Blank_MP1_panel2 , Blank_MP1_panel3, etc
        WordDoc.Bookmarks("Blank_MP1_panel" & i).Range.Text = Cells(i, 1)
    Next i

    WordApp.Visible = True    'affiche le document Word
    'WordDoc.PrintOut 'Pour imprimer le doc obtenu

    'WordDoc.Close True 'ferme le document word en sauvegardant les données
    'WordApp.Quit 'ferme la session Word
End Sub

Ce que je souhaiterais, c'est que chaque signet prenne la valeur contenue dans chaque cellule de la colonne A (de A1 à A40).

Je joins ici le fichier EXCEL qui contient les valeurs à recopier dans le fichier WORD ainsi que le fichier Word qui devra se compléter automatiquement avec la macro.

Je précise que j'utilise WORD2016 et EXCEL2016

Un grand merci aux gens qui pourront me venir en aide :)

JB

31etiquettes.doc (43.50 Ko)

Bonjour

Le code un peu modifié ainsi, ne pose absolument aucun problème

Option Explicit

Sub Creation_Etiquettes()
  Dim WordApp As Object
  Dim WordDoc As Object
  Dim i As Byte
  Dim Cheminfic As String, fd As FileDialog

  Set fd = Application.FileDialog(msoFileDialogFilePicker)
  With fd
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Document Word", "*.docx;*.doc"
    .InitialFileName = ThisWorkbook.Path & "\"
    If .Show = -1 Then
      Cheminfic = .SelectedItems(1)
    End If
  End With
  If Cheminfic = "" Then Exit Sub

  Set WordApp = CreateObject("word.application")    'ouvre une session Word
  Set WordDoc = WordApp.Documents.Open(Cheminfic)    'ouvre le document Word
  WordApp.Visible = False    'Word est masqué pendant l'opération

  For i = 1 To 40
    'les signets du document Word sont nommés Blank_MP1_panel1 , Blank_MP1_panel2 , Blank_MP1_panel3, etc
    WordDoc.Bookmarks("Blank_MP1_panel" & i).Range.Text = Cells(i, 1)
  Next i

  WordApp.Visible = True    'affiche le document Word
  'WordDoc.PrintOut 'Pour imprimer le doc obtenu

  'WordDoc.Close True 'ferme le document word en sauvegardant les données
  'WordApp.Quit 'ferme la session Word
End Sub

A+

Super BrunoM45 cela fonctionne, je vais étudier tout ça.

JB

Bonjour,

Me revoilà avec un nouveau souci et je ne comprends pas où cela coince

Lors de l'ouverture du fichier "Import-excel ", je viens chercher mon fichier de données EXCEL "Donnees" puis ensuite je viens sélectionner mon calque d'étiquettes "etiquettes" au format WORD. Le code déroule bien mais il ne scrute pas la boucle ci-dessous, savez-vous pourquoi?

For i = 1 To 40
        'les signets du document Word sont nommés Blank_MP1_panel1 , Blank_MP1_panel2 , Blank_MP1_panel3
        With WordDoc.Bookmarks("Blank_MP1_panel" & i).Range
                 .Text = Cells(i + 1, 1) & vbCrLf & Cells(i + 1, 4) & vbCrLf & Cells(i + 1, 5)
                 .Font.Name = "arial"
                 .Font.Size = 10
                 .Font.Bold = True
                 .Font.Italic = False
                .Font.Color = RGB(3, 34, 76)
       End With
    Next i

Pourtant cela fonctionne bien si je réalise cette manipulation en cliquant sur le bouton bleu depuis la feuille EXCEL "test"...

Je poste ici mes différents fichiers.

11donnees.xls (10.14 Ko)
11import-excel.xlsm (20.64 Ko)
9test.xlsm (10.16 Ko)
16etiquettes.doc (43.50 Ko)

Merci à vous tous

JB

Bonjour JB,

Voici le code modifié, qui fonctionne chez moi

Sub Import()
  Dim sFicXls As String, sFicDoc As String
  Dim Source As Workbook
  Dim WordApp As Object, WordDoc As Object
  Dim Fd As FileDialog
  Dim Lig As Long
  ' Définir le type de fichier à ouvrir (Excel) et demander son choix
  Set Fd = Application.FileDialog(msoFileDialogFilePicker)
  With Fd
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Document Excel (*.xls)", "*.xls"
    .InitialFileName = ThisWorkbook.Path & "\"
    .Title = "Sélection de vos fichiers excel"
    If .Show = -1 Then
      sFicXls = .SelectedItems(1)
    End If
  End With
  ' vérification si selection fichier ou annulation
  If sFicXls = "" Then
    MsgBox "Désolé, le fichier n'a pas été importé.", vbOKOnly + vbExclamation, "EXCEL"
    Exit Sub
  End If
  '
  Sheets.Add after:=Worksheets(1)
  ActiveSheet.Name = "Feuil2"
  Worksheets("Feuil1").Select
  ' Désactiver le rafraichissement écran
  Application.ScreenUpdating = False
  'ouvrir le classeur source
  Set Source = Application.Workbooks.Open(sFicXls, , True)
  'copier les données de la "Feuil1" du classeur source vers la "Feuil2" du classeur destination
  Source.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets("Feuil2").Range("A1")
  'fermer le classeur source
  Source.Close False
  ' Libérer la mémoire
  Set Source = Nothing
  ' Définir le type de fichier à ouvrir (Word) et demander son choix
  Set Fd = Application.FileDialog(msoFileDialogFilePicker)
  With Fd
    .Title = "Sélectionnez le fichier WORD contenant les étiquettes."
    .AllowMultiSelect = False
    .Filters.Clear
    .Filters.Add "Document Word", "*.docx;*.doc"
    .InitialFileName = ThisWorkbook.Path & "\"
    If .Show = -1 Then
      sFicDoc = .SelectedItems(1)
    End If
  End With
  ' vérification si selection fichier ou annulation
  If sFicDoc = "" Then
    Application.DisplayAlerts = False
    Worksheets("Feuil2").Delete
    Exit Sub
  End If
  Set WordApp = CreateObject("word.application")    'ouvre une session Word
  Set WordDoc = WordApp.Documents.Open(sFicDoc)    'ouvre le document Word
  WordApp.Visible = False    'Word est masqué pendant l'opération

  For Lig = 2 To 40
    'les signets du document Word sont nommés Signet1 , Signet2 , Signet3
    With WordDoc.Bookmarks("Blank_MP1_panel" & Lig - 1).Range
      .Text = Worksheets(2).Cells(Lig, 1) & vbCrLf & Cells(Lig, 4) & vbCrLf & Cells(Lig, 5)
      .Font.Name = "arial"
      .Font.Size = 10
      .Font.Bold = True
      .Font.Italic = False
      .Font.Color = RGB(3, 34, 76)
    End With
  Next Lig
  WordApp.Visible = True
  Application.DisplayAlerts = False
  Worksheets(2).Delete
  Application.DisplayAlerts = True  
  Application.ScreenUpdating = True
End Sub

A tester

A+

Re BrunoM45,

Merci pour votre contribution, en fait mon problème n'était pas à cet endroit. Je n'arrivais pas à copier les infos des 2 autres colonnes pour une même ligne mais j'ai compris mon erreur car je n'indiquais pas la feuille à scruter pour les colonnes D et E. Du coup j'ai corrigé avec:

.Text = Worksheets(2).Cells(i, 1) & vbCrLf & Worksheets(2).Cells(i, 4) & vbCrLf & Worksheets(2).Cells(i, 5)

Par contre ma dernière problématique est la suivante:

Mon fichier WORD comporte uniquement 40 étiquettes pouvant être renseignées. Seulement mon tableau de données EXCEL peut contenir plus de 200 lignes que je vais devoir affecter aux étiquettes.

Pour info, je ne souhaite pas limiter le nombre de lignes à 40 sur mon tableau de données EXCEL car celui-ci provient d'une exportation d'un logiciel.

Comment procéder ?

Je prends les 40 premières lignes de mon tableau EXCEL et je créé mes étiquettes, j'efface les signets dans Word et je recommence pour les 40 autres lignes EXCEL et ainsi de suite ?

Ou alors, je duplique la feuille WORD autant de fois que cela sera nécessaire afin de pouvoir transformer en étiquettes toutes les lignes (colonne A) issues de mon tableau de données EXCEL ?

Sur ce sujet, j'aurais bien besoin de votre avis et d'un début de code VBA si cela est possible s'il vous plait :)

Merci beaucoup

JB

Re,

Je pensais faire ceci:

Calculer le nombre de lignes dans la colonne A de mon fichier EXCEL puis diviser ce résultat par le nombre d'étiquettes(à savoir 40)

Le résultat obtenu est arrondi à l'entier supérieur puis stocké dans une variable "x". On met en place une boucle que l'on répète "x" fois.

Est ce la meilleure solution ou existe-t-il une méthode plus adaptée ?

Merci

Jb

Bonjour JB

Malheureusement je n'irais pas plus loin dans ce fil...
l'utilisation du VBA pour faire un "pseudo" publipostage d'étiquette est déjà pour moi une aberration

Créez un nouveau fil en faisant référence à celui-ci, pour votre nouveau problème

Bon courage.

Merci malgré tout pour votre aide BrunoM45.

A nouveau,

Excel peut tout aussi bien imprimer des étiquettes. D'ailleurs il existait une extension Avery pour Excel pour le réaliser facilement.

Si Avery a changé cela pour un logiciel en ligne (plus favorable à Word). On peut créer un modèle Excel en fonction du format de l'étiquette utilisée.

Il suffit de préciser les tailles Hauteur & Largeur du format ainsi que les espacements entre les étiquettes.

Voire d'imprimer un premier exemple en ligne avec Avery Design Print puis ensuite d'en faire un modèle Excel.

Merci Xcellus, seulement si un jour je souhaite changer de modèle d'étiquettes, je devrais re-calquer le modèle au format EXCEL :/

Suite,

Ce n'est pas au pied à s'adapter à la chaussure mais la chaussure a être adaptée au pied.

En bref on choisit un modèle d'étiquette selon les données que l'on veut y voir afficher.

Et on n'en change pas aussi souvent que cela. Sauf ajout de nouveaux besoins de données.

Un modèle c'est généralement une étiquette qui se trouve en plusieurs exemplaires sur une page.

Personnellement j'en ai créé que j'ai utilisé une quinzaine d'années sans modifs.

Bonsoir,

Je peux essayer mais comment connaître l'emplacement d'un shape dans Excel ?

Merci

Jb

Bonsoir JeanBaptisteP,

Voir ci-dessous un exemple de planches d'étiquettes réalisées sur une feuille Excel.

Le format Avery est de 3 étiquettes à l' horizontal sur 8 en vertical.

a0etik

Certaines informations sur chaque étiquette est obtenue à partir d'un tableau Excel.

D'autres sont des textes fixes, comme les mentions Type Référence Couleur sur bandeau grisé.

Le reste s'alimente par boucle de 24 étiquettes (3 x 8). La feuille modèle reçoit les données jusqu' à la fin du tableau.

Pas besoin de Word.

D'accord je n'avais pas pensé à cela mais c'est envisageable ! Cela correspond à l'identique à la plaquette d'étiquettes ?

J'aurais besoin de reproduire le modèle ci-joint avec 1 case pour 1 étiquette. Comment définir les marges, les espacements ?

Merci à vous pour votre aide en tout cas

JB

20avery-25x10-r.docx (19.85 Ko)

Suite,

La planche que tu présentes est de 7 étiquettes horizontal pour 27 en vertical.

En fait c'est plutôt des vignettes. Combien de données place tu sur chaque vignette.

Je suppose peu, compte tenu du format.

re XCellus,

Sur chaque vignette, il y aura 2 lignes: la première avec un texte et sur la deuxième, la valeur de la cellule EXCEL

Merci beaucoup

JB

A nouveau,

Il faudra que tu laisses un exemple sous forme d'image. Ce sera plus visuel.

Le texte change à chaque vignette ou il est fixe (façon label). La valeur de la cellule Excel, elle, je comprends va varier.

Présente par exemple les 7 premières vignettes de la 1iére ligne. Même avec des données anonymes.

L'important est de savoir comment sera placé le texte ou la valeur. Centré ou formaté à gauche ou droite de chaque vignette. Couleur et type de police.

Longueur maximale du texte et de la donnée (hauteur de police). Car il ne faut pas que cela déborde sur l'autre vignette.

Les marges hautes (haut de page) et basses (pied de page) sont réglées par le menu impression d'Excel.

Il n'y a pas d'écart entre les vignettes sur le plan vertical mais il existe sur le plan horizontal (cela représentera 6 colonnes fines).

il y aura 7 colonnes pour les vignettes. Puis fixer aussi les marges gauche et droite de la feuille.

Re XCellus,

Voici un exemple en image:

image
Rechercher des sujets similaires à "creer etiquettes fichier word tableau"