Copie de données Excel dans Word et mise en forme
Bonjour à toutes et à tous !
J'ai besoin de créer une macro VBA pour le boulot et je ne m'en sors pas ...
Nous avons un tableau Excel, de quelques centaines de lignes contenant diverses informations.
Après avoir filtré le tableau, par exemple pour avoir toutes les publications éditées en 2018, il faut que je prenne les informations suivantes :
Les noms d'auteurs en colonne C, certains en italique ou soulignés (ex : Golf Arthur, Polo Martine, Foot Robert)
Le titre de la publication en colonne D (ex : Intérêts de la sous traitance de molécules de cuivre)
Le nom de la revue en colonne E, en gras (ex : Cells)
L'année de publication en colonne A
Un identifiant unique, contenant un lien hyper texte, en colonne B
Pour les mettre dans cette mise en forme (il est important de garder la mise en forme source du Excel), dans un nouveau fichier Word :
Golf Arthur, Polo Martine, Foot Robert. Intérêts de la sous traitance de molécules de cuivre. Cells (2018)
IDUnique
Puis nous passons à la ligne suivante du tableau, qui reprendra cette mise en forme, jusqu'à ce que le tableau se finisse.
Une fenêtre devra aussi s'ouvrir pour demander où l'on souhaite enregistrer le fichier Word (sur lequel sera copié les valeurs).
Rien que ça !!
Je n'y connais vraiment pas grand chose, et ai commencé le VBA suivant avec les commentaires, mais je sens que je m'embourbe ... :
Private Sub ExportVersWord_Click()
With Worksheets("Publications-2018")
'prendre les éléments du tableau qui a été filtré préalablement, et les concaténer dans une phrase
ligne = Rows("1").Select
Dim Auteurs As String
Dim Titre As String
Dim NomDeRevue As String
Dim Annee As String
Dim idhal As String
'On commence à partir de la ligne 4
For i = 4 To ligne
'Si la ligne est visible, = résultat du filtre
If Not .Rows(i).Hidden Then
'On définit les variables, avec colonne$ on récupère la valeur en descendant de ligne en ligne tout en restant sur la colonne
'On sélectionne colonne$
Auteurs = .Range("C$" & i).Select
'Après sélection, on copie avec la mise en forme
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
Titre = .Range("D$" & i).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
NomDeRevue = .Range("E$" & i).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
Annee = .Range("A$" & i).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _False, Transpose:=False
idhal = .Range("B$" & i).Hyperlinks(1).Address
'On concatène les valeurs dans une phrase
'& Chr(10) & & Chr(13) & servent pour un retour à la ligne
Phrase = " - " & Auteurs & ". " & Titre & ". " & NomDeRevue & " (" & Annee & ")" & Chr(10) & & Chr(13) & & idhal & "."
'Coller cette phrase dans un Word :
'Ouvrir Word :
'Nécessite d'activer la référence Microsoft Word xx.x object library
'(dans la fenêtre VBE, cliquez sur Outils, Référénces et cocher la référence)
Dim wdApp As New Word.Application
Dim wdDoc As Word.Document
'Ouvrir le word
Set wdDoc = wdApp.Documents.Open
wdApp.Visible = True
wdDoc.Activate
'on copie de la phrase, et on passe à la suivante
texte = texte & IIf(texte <> "", vbNewLine, "") & Phrase.Copy
'Collage
wdDoc.ActiveWindow.ActivePane.Selection.PasteAndFormat (wdPasteDefault)
'Saut de ligne dans le word
Selection.InsertAfter vbCrLf
End If
Next i
'ouvrir une boite de dialogue pour demander le chemin d'enregistrement du word
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = -1 Then
chemin = .SelectedItems(1) & "\"
End If
End With
'On vide la mémoire des objets
Set wdDoc = Nothing
Set wdApp = Nothing
End With
End Sub
Auriez vous des idées pour m'aider svp ?
Merci