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
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.
JBBonjour,
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.
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.
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
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.