XL 2021 Copie cellules Excel vers Word avec mise à jour automatique

alexandre33260

XLDnaute Occasionnel
Bonjour, je voudrai savoir s'il est possible de copier des cellules Excel vers Word (pas un tableau complet, juste le contenu de la cellule).
Sur une feuille feuil1, je voudrai que les cellules A1, A2, A3 soient copiées vers un document Word.
La feuille Excel sera mise à jour régulièrement et il faudrait une liaison avec mise à jour automatique du doc Word dès que la feuille Excel est modifiée.
J'aurai la même demande pour copier des graphiques.
Merci pour votre aide.
 
Solution
Avec cette macro dans ThisWorkbook la cellule modifiée peut être dans n'importe quelle feuille :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Wapp As Object, i
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
On Error GoTo 0
Wapp.Visible = True
With Wapp.Documents.Open(ThisWorkbook.Path & "\Enquête de satisfaction EHPAD.docx").Tables(1)
    For i = 1 To 10
        .Cell(i, 1).Range.Text = Sheets("Analyse").Cells(i, 1)
    Next
End With
End Sub

alexandre33260

XLDnaute Occasionnel
OK, j'ai bien compris, sauf que je ne modifie jamais rien dans la feuille 'Analyse', le changement se fait automatiquement quand on modifie des valeurs dans la feuille 'Accueil' et comme je ne valide rien (dans la feuille 'Analyse'), ça ne met pas à jour...
Je pensais mettre un bouton 'Actualiser' sur la feuille 'Analyse', pensez vous que cela aura un effet ?
 

job75

XLDnaute Barbatruc
Avec cette macro dans ThisWorkbook la cellule modifiée peut être dans n'importe quelle feuille :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Wapp As Object, i
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
On Error GoTo 0
Wapp.Visible = True
With Wapp.Documents.Open(ThisWorkbook.Path & "\Enquête de satisfaction EHPAD.docx").Tables(1)
    For i = 1 To 10
        .Cell(i, 1).Range.Text = Sheets("Analyse").Cells(i, 1)
    Next
End With
End Sub
 

Pièces jointes

  • Enquête de satisfaction EHPAD.xlsm
    23.1 KB · Affichages: 4
  • Enquête de satisfaction EHPAD.docx
    12.4 KB · Affichages: 2

job75

XLDnaute Barbatruc
Une autre solution avec le copier-coller :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Wapp As Object, i
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
On Error GoTo 0
Wapp.Visible = True
Wapp.Documents.Open(ThisWorkbook.Path & "\Enquête de satisfaction EHPAD.docx").Content.Delete 'RAZ
Sheets("Analyse").[A1:A10].Copy 'copier
Wapp.Selection.Paste 'coller
Application.CutCopyMode = 0
End Sub
Avantage : il n'y a plus de tableau Word et les formats sont copiés.
 

Pièces jointes

  • Enquête de satisfaction EHPAD.xlsm
    23.8 KB · Affichages: 2
  • Enquête de satisfaction EHPAD.docx
    12.1 KB · Affichages: 4

alexandre33260

XLDnaute Occasionnel
C'est extra, merci beaucoup, je regarde tout ça demain pour voir comment tout va s'imbriquer car j'ai d'autres feuilles à faire (comme accueil), je vais voir comment faire, si j'ai un souci, je reposte un petit message.
Encore merci pour ce super travail.
Sans les bordures, c'est encore mieux.
 

alexandre33260

XLDnaute Occasionnel
Bonjour job75, deux petites questions (pour le moment ;)
J'ai rajouté une feuille et vais devoir en rajouter encore beaucoup, plus de 11 au total et certaines ont plus de 9 questions, donc j'ai modifié la valeur .[A1:A10] de la macro par [A1:A100], mais est il possible de mettre une variable qui sache quand la dernière lige est atteinte, si je fais 251 lignespar ex, que la macro sache automatique le nb sans être obligé de la lui spécifier.
Autre question, quand je formate le doc Word (sans interligne, police Times, taille 10 etc. lorsque la mise à jour du fichier Excel se fait, la mise en forme revient automatiquement par défaut Normal, Calibri (Corps), 11 etc.
Est-il possible qu'Excel n'interfère pas dans la mise en page du doc ?
Voila pour le moment.
 

Pièces jointes

  • Enquête de satisfaction EHPAD.docx
    17.9 KB · Affichages: 1
  • Enquête de satisfaction EHPAD.xlsm
    29.3 KB · Affichages: 1

job75

XLDnaute Barbatruc
Bonjour alexandre33260; le forum,

Pour aller jusqu'à la dernière cellule en colonne A il suffit d'utiliser End(xlUp).

Pour ne copier que les valeurs il faut utiliser un collage spécial du texte dans Word.

Mais j'ai eu un peu de mal, il faut bien préciser le nom de l'argument DataType :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Wapp As Object, i
On Error Resume Next
Set Wapp = GetObject(, "Word.Application")
If Wapp Is Nothing Then Set Wapp = CreateObject("Word.Application")
On Error GoTo 0
Wapp.Visible = True
Wapp.Documents.Open(ThisWorkbook.Path & "\Enquête de satisfaction EHPAD.docx").Content.Delete 'RAZ
Sheets("Analyse").Range("A1", Sheets("Analyse").Range("A" & Rows.Count).End(xlUp)).Copy 'copier
Wapp.Selection.PasteSpecial DataType:=2 'wdPasteText 'collage spécial du texte
Application.CutCopyMode = 0
End Sub
A+
 

Pièces jointes

  • Enquête de satisfaction EHPAD.xlsm
    30.1 KB · Affichages: 3
  • Enquête de satisfaction EHPAD.docx
    14.7 KB · Affichages: 2
Dernière édition:

alexandre33260

XLDnaute Occasionnel
ça ne garde pas la mise en forme de la feuille Word, dès que je mets une info à jour, ça reformate le Word.
Si ça pouvait garder la mise en forme de Excel (remplissage bleu du titre accueil), soulignement des titres (partie analyse).
Et dans la der. vers. dans la liste des avis, le premier et le dernier sont entre guillemets...
 

alexandre33260

XLDnaute Occasionnel
SI en fait, garder le format donné sur la feuille 'Analyse' les saut de lignes sont identiques dans word, parfait. Sauf que word par défaut est en "Normal" et je souhaite avoir "Sans interligne", si je format le doc word sans interligne que je sauvegarde, si je réouvre le Excel et que je met à jour, la mise en forme de Word change automatiquement et passe en 'Normal'...
 

alexandre33260

XLDnaute Occasionnel
En fait c'est la différence de retour à la ligne.
Soit on valide par ENTER et il y a un saut de ligne qui est considéré comme un saut de paragraphe et donc laisse un espace entre les deux lignes, soit on combine SHIFT & ENTER et ça fait un retour à la ligne.
Voir la photo joint avec les symboles des retours à la ligne (.
r1.png
ou
r2.png
 

Pièces jointes

  • Saut de ligne.png
    Saut de ligne.png
    2 KB · Affichages: 6

Discussions similaires

Statistiques des forums

Discussions
313 283
Messages
2 096 811
Membres
106 751
dernier inscrit
Souleymani