Microsoft 365 Copier dans Excel et coller dans Word à l'emplacement du curseur

dadoo99

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai cherché sur plusieurs forum, mais rien trouver de concluant.
Voici ce que je souhaite réaliser : Copier la sélection de cellules Excel et la coller sous forme d'image dans Word à l'emplacement actif du curseur.

J'arrive à tout faire sauf à positionner mon "collage" à l'endroit où se trouve le curseur.

Voici mon code :
VB:
Sub Copier_Colle_Image_Cellule_selectionnée()

    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Set wdapp = GetObject(, "Word.Application")
    wdapp.activedocument.Range(0, 0).PasteSpecial Placement:=wdInLine
    wdapp.Activate


End Sub


Merci pour votre aide.
 
Solution
Hé oui Hervé, j'avais omis cette précision importante (sorry)😅

Juste incroyables !!!
Vous êtes juste incroyables 😍🤩
Merci à vous pour vos solutions.

Petit débriefing : sur mon ordi toutes fonctionnent sauf malheureusement celle de Staple1600
Ensuite, lorsque le curseur du document Word est dans un texte, la macro ajoute un retour. Le texte qui suit le curseur va donc à la ligne.

J'ai aussi reçu une réponse d'Eric Kergresse que j'avais contacté en privé et qui a trouvé lui aussi une solution qui fonctionne. Avec la sienne, lorsque le curseur est dans du texte, le texte qui suit ne va pas à la ligne. C'est exactement ce dont j'ai besoin. Je vais donc utiliser son code :

VB:
Sub Copier_Coller_Image_Cellule_selectionnée_Kergresse()...

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Je pense qu'il y a un peu d'irréalisme !! dans tes souhaits car il faudra m'expliquer comment peut on savoir ou est le curseur dans word ??? étant donné que c'est Excel qui ouvre Word et le dirige ( c'est le principe Master/slave) donc il n'y a pas de curseur actif défini
Il faudra passer par les signets , ou définir ta zone Range( )
Sinon avant de chercher compliqué , n'y a t-il pas une solution plus simple à reconcevoir ??
 

dadoo99

XLDnaute Nouveau
Salut Hervé,
Merci pour ta réponse. J'adore quand quelque chose paraît irréaliste et qu'au final, quelqu'un trouve une solution.

J'ai cherché d'autres idées et processus, mais ce que je décris, c'est ce dont j'ai besoin. J'ai bien des modèles dans lesquels je pourrais mettre des signets ou définir la zone Range, mais mes modèles ne sont qu'une base et il y a plein de modifications (que ce soit dans mes modèles Excel ou des dans mes modèles Word) en fonction du mandat que j'ai à réaliser. C'est pour cela que le processus que je décris est très flexible et idéal pour moi.

Important, je précise que l'idée derrière cela est que le fichier Word soit déjà ouvert et le curseur placé au bon endroit. Ainsi Excel doit "simplement" switcher sur Word et coller à l'endroit actif du curseur dans Word.

J'espère que cette précision rendra l'irréaliste réalisable 🤞
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
@dadoo99 : ah bon ? si on ne nous dit pas tout !!!!!
Si c'est réalisable pourquoi n'as tu pas de propositions qui fusent sur ce forum , réputé un des meilleurs et je sais de quoi je parle ! rare sont les sujets sans proposition/solution !!
Regarde un peu et tu verras que je ne suis pas le seul avec ma 1ere réaction !!
Important : Moi je fais ton opération direct avec un copier/coller puisque Tout est déjà prêt !!
citation : " Tout est possible ... tout est réalisable avec .. ? " ( pour des 'anciens' culture Pub ou sketch)
Bonne continuation ...........et réussite !
 

patricktoulon

XLDnaute Barbatruc
Bonsoir @dadoo99 @herve62

pour coller ou il y a le curseur tu a deux solution

methode 1 on capte la selection( même si il n'y a pas de texte sélectionne a partir du moment
ou le carret clignote (curseur)est placé dans le document il y a sélection (même vide)
parti de là c'est simple
VB:
ub Copier_Colle_Image_Cellule_selectionnéeV_1()
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Set wdapp = GetObject(, "Word.Application")
    If Not wdapp Is Nothing Then
        wdapp.Activate
        With wdapp.ActiveDocument.ActiveWindow.Panes(1).Selection
            .Paste
        End With
        CreateObject("wscript.shell").SendKeys "{ENTER}"
    End If

End Sub
après il y a la méthode à l'ancienne
on active la fenêtre et on sendkeys
VB:
Sub Copier_Colle_Image_Cellule_selectionnéeV_2()
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Set wdapp = GetObject(, "Word.Application")
    If Not wdapp Is Nothing Then
        wdapp.Activate
         CreateObject("wscript.shell").SendKeys "^v{ENTER}"
    End If

End Sub

dans le deux j’enserre une copie image d'une plage a l'endroit ou est le curseur et le reste passe en dessous
démo méthode 1
demo2.gif



démo méthode 2


demo3.gif
 

patricktoulon

XLDnaute Barbatruc
re
et vec celle ci tu n'a meme pas besoins d'activer la fenêtre word
VB:
Sub Copier_Colle_Image_Cellule_selectionnéeV_1()
    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Set wdapp = GetObject(, "Word.Application")
    If Not wdapp Is Nothing Then
        wdapp.Activate
        With wdapp.ActiveDocument.ActiveWindow.Panes(1).Selection
            .Paste
            .InsertAfter vbNewLine
        .Range.Move 2, 1
        End With
         End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Une autre syntaxe possible
(test OK sur mon PC)
VB:
Sub XL_vers_Word()
'cocher la référence idoine
Dim wrdApp As Word.Application
'copie du contenu de A33
[A33] = "Staple": [A33].Copy
        
On Error Resume Next
Set wrdApp = GetObject(, "Word.Application")
If Err.Number <> 0 Then
Set wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
End If
' coller dans Word
wrdApp.Application.Selection.PasteSpecial _
            Link:=False, _
            DataType:=wdPasteText, _
            Placement:=wdInLine, _
            DisplayAsIcon:=False
Set wrdApp = Nothing
End Sub
 

dadoo99

XLDnaute Nouveau
Hé oui Hervé, j'avais omis cette précision importante (sorry)😅

Juste incroyables !!!
Vous êtes juste incroyables 😍🤩
Merci à vous pour vos solutions.

Petit débriefing : sur mon ordi toutes fonctionnent sauf malheureusement celle de Staple1600
Ensuite, lorsque le curseur du document Word est dans un texte, la macro ajoute un retour. Le texte qui suit le curseur va donc à la ligne.

J'ai aussi reçu une réponse d'Eric Kergresse que j'avais contacté en privé et qui a trouvé lui aussi une solution qui fonctionne. Avec la sienne, lorsque le curseur est dans du texte, le texte qui suit ne va pas à la ligne. C'est exactement ce dont j'ai besoin. Je vais donc utiliser son code :

VB:
Sub Copier_Coller_Image_Cellule_selectionnée_Kergresse()
'Edité par Eric Kergresse. Merci à lui...
Dim Wdapp As Object

    Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture
    Set Wdapp = GetObject(, "Word.Application")
    With Wdapp.Selection
             .Paragraphs.Add
             .PasteSpecial Placement:=0
    End With
    Wdapp.Activate
    Set Wdapp = Nothing
 
End Sub

MERCI à tous 😘
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

dadoo99
Comme indiqué dans mon code, il faut activer la référence à la librairie Word
Ou alors il faut modifier le code en déclarant
Dim Wdapp As Object

NB: J'avais testé avec Office 2013 sur mon PC
(avec un document Word et un classeur Excel ouverts, mais non enregistrés)
 

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 175
Membres
112 677
dernier inscrit
Justine11