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
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()...
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 ??
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
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 !
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
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
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
Oui mais on peut s'amuser le cas échéant
wdPasteBitmap
wdPasteDeviceIndependentBitmap
wdPasteEnhancedMetafile
wdPasteHTML
wdPasteHyperlink
wdPasteMetafilePicture
wdPasteOLEObject
wdPasteRTF
wdPasteShape
wdPasteText
Super !!!! Après 24h à zero réponse , j'ai sonné la charge et ça marche !!! > "vous avez dit Bizarre .. comme c'est Bizarre ?" ( devinez de qui est cette célèbre réflexion culte ??)
je vous laisse vous amuser ( salut Jean Michel )
Bon WE à tous
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
re
Bonjour
si tu ne veux pas le retour a la ligne enleve le .InsertAfter vbNewLine c'est tout dans ma méthode 1
et le {ENTER} dans ma méthode 2 c'est tout c'est pas compliqué
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)
Salut Patrick,
Effectivement cela fonctionne aussi maintenant ! Merci !
Salut Staple,
Merci beaucoup pour cette précision. J'ai déclaré Dim Wdapp As Object et ça fonctionne aussi.