IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Créer doc Word à partir de doc inséré dans Feuille de calculs (OLEObjects)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut Créer doc Word à partir de doc inséré dans Feuille de calculs (OLEObjects)
    Bonjour,

    Dans une feuille excel, je fais un collage spécial d'un "Objet document microsoft office word". Comment par macro récupérer le contenu de cet objet (en fait, c'est quoi son Thisworkbook.sheets(1).....)?

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par sibama Voir le message
    en fait, c'est quoi son Thisworkbook.sheets(1)...?
    T'inquiète pas, c'est rien !
    Je t'explique : Pas de sheet dans un document word, seulement un document.
    Une question : Ton document est-il lié au classeur ?
    Si oui, pas de pb, par macro tu récupères ce que tu veux dans le document lui-même.
    Sinon, tu peux toujours ouvrir le document mais, par macro, je ne sais pas comment aller récupérer ce qu'il est dedans.
    Précise ta demande

  3. #3
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Je me suis probablement mal expliqué, il s'agit bien d'une feuille Excel sur laquelle j'ai fait un "collage spécial" de mon contenu Word, cela me sert (euh non, est sensé me servir) de mémoire interne à mon document .xls, sans avoir de lien vers un doc Word. Le but étanrt de récupérer le contenu de cette "mémoire" pour la coller dans une fenêtre de visu Word de mon formulaire Excel.
    Sur ma feuille excel, j'ai donc un carré blanc en surcharge (comme quand on insère un graphique) avec le contenu Word dedans.
    Je pense donc qu'il est possible de récupérer le contenu de ce "carré" pour l'utiliser, d'où mon idée de penser que cela doit ressembler à "Thisworkbook.sheets(1).MonJeSaisPasQuoi.value".

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bé non ! Tu as, semble-t-il, collé un objet word dans une feuille de calculs.
    (pour avoir un carré blanc avec le texte du doc d'origine, ça ressemble à ça...)
    Pour le vérifier, clic droit sur l'objet -> Olbjet Document -> Ouvrir
    Si en faisant ça tu ouvres Word avec le text ds un document Word, c'est bien un objet document Word (!!) (Oui, un rien m'amuse !)

    Bref, si c'est bien ça, on en revient à ma proposition précédente -> Lié, je sais aller récupérer les données dans un doc
    Non lié, je ne sais pas
    Mais il aura bien quelqu'un qui sait.
    Déjà on sait que c'est une forme (shape). A partir de cette forme, tu peux ouvrir word et afficher le texte. Si cette forme est le dernier objet inséré, tu peux utiliser le code suivant pour l'afficher dans Word.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveSheet.Shapes(ActiveSheet.Shapes.Count).select
        Selection.Verb Verb:=xlOpen
    En espérant que ça t'avance un peu.

  5. #5
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Déjà, merci ouskel'n'or pour ton aide.

    De mon coté j'ai aussi avancé, mon truc est du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Test").OLEObjects("Objet 1")
    avec Test le nom de ma feuille et Objet 1 le nom de l'objet qui apparait dans la case nom de excel quand je clique sur l'objet.

    Il ne reste plus qu'à trouver la propriété qui correspond au texte contenu dans ce OLEObjects.


    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je sais que SilkyRoad a déjà joué avec les OLEObjects. Il devrait pouvoir t'aider. Je vais ajouter cette précision au sujet de la discussion... Si ça ne te convient pas, tu me dis, je modifierai.
    Bonne chance

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 124
    Par défaut
    Quel objet word est à copier ? Un bookmarks , une table , une selection , un tableau , tout le document Word ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Objet 1 le nom de l'objet qui apparait dans la case nom de excel quand je clique sur l'objet
    .

    Alors là ...."Objet1" ne correspond à aucun objet word de ma connaissance .

    Quelque chose du genre ...(Mais je suis sur de rien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Cop()
     
    Dim WordApp As word.Application
    Dim WordDoc As word.Document
     
    Set WordApp = CreateObject("word.application") 'Il faut instancier word pour
    avoir accés aux objets de word 
    Set WordDoc = WordApp.Documents("Nom de ton document Word").select
     
    WordDoc.Selection.Copy
    WordDoc.Add.Content.Paste
     
    End sub

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello aA189,
    Le code que tu proposes concerne l'ouverture d'un document Word depuis Excel.
    Dans le cas qui nous (pré)occupe, il s'agit du collage d'un document word sans liaison avec le document d'origine. Il s'agit donc bien d'un objet, forme ou OLEObject.
    Le code est donc celui qui s'applique à un OLEObject ou à une forme, pas à un document ouvert par macro
    Bonne soirée

    Edit
    Bêtement trouvé dans la FAQ, proposé par SilkyRoad.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub Verifier_Si_DocumentWord_Vide()
        Dim WordApp As Object
        Dim WordObj As Shape
     
        'Dans cet exemple l'objet Word et le dernier objet placé dans la Feuille 1
        Set WordObj = Worksheets(1).Shapes(Worksheets(1).Shapes.Count)
        WordObj.OLEFormat.Activate
        Set WordApp = WordObj.OLEFormat.Object.Object.Application
        WordApp.Visible = False
     
        If WordApp.Selection.Document.Words.Count = 1 Then
            'Renvoie 1 si vide
            MsgBox "Vide"
            Else
            MsgBox WordApp.Selection.Document.Content
        End If
    End Sub
    Reste plus qu'à savoir comment aller sélectionner un bout du texte dans le doc.
    On avance

    Edit bis
    Bon ! En bricolant on peut sélectionner du texte se trouvant entre balises. Dans l'exemple j'utilise [ et ] pour encadrer le texte que je souhaite récupérer.
    Il suffit alors de remplacer le code de la condition précédente par le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        If WordApp.Selection.Document.Words.Count = 1 Then
            'Renvoie 1 si vide
            MsgBox "Vide"
          Else
            Dim Texte As Variant, deb$, fin$, Phrase$, i%, Ok As Boolean, Okay As Boolean
            Texte = Split(WordApp.Selection.Document.Content, " ")
            deb = "["
            fin = "]"
            For i = 0 To UBound(Texte)
                Ok = Ok Or Texte(i) = deb _
                    Or Texte(i) = (deb & ",") _
                    Or Texte(i) = (deb & ".") _
                    Or Texte(i) = ("," & deb) _
                    Or Texte(i) = ("." & deb)
                If Texte(i) = fin _
                    Or Texte(i) = fin & "," _
                    Or Texte(i) = fin & "." _
                    Or Texte(i) = "," & fin _
                    Or Texte(i) = "." & fin Then Exit For
     
                'On décale de 1 la prise en compte du mot pour éviter la balise "["
                If Okay Then Phrase = Phrase & Texte(i) & " "
                Okay = Ok
            Next
            MsgBox Phrase
        End If
    Pour que ça fonctionne, les crochets doivent avoir été préalablement positionnés (!!!)
    En attendant mieux

  9. #9
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Super, ouskel'n'or, pour la première partie de ton dernier message, ça marche, mon but étant pour l'instant de coller le contenu de cet objet dans un document word temporaire dans lequel je vais pouvoir triturer tranquillou mon texte.
    Une petite question de plus, as-tu une idée de pourquoi quand je copie/colle le contenu de mon OLEObject, je perds le surlignage, la police ithalique et les couleurs de police de mon texte?

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Normal :
    Quand tu copies, tu es dans Word -> Le format est celui du document Word.
    Quand tu colles, tu es dans Excel -> Le format est celui de la cellule ou de l'objet Excel.
    Je sais, j'ai un peu tardé à répondre mais je passais juste par là par hasard

  11. #11
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Ben oui, je veux bien le croire, cependant sous excel, toutes ces mises en forme de caractères sont conservées dans le OLEobject, et en plus si je fais un copier coller à la mano, du contenu de l'objet vers word, je récupère tout. C'est comme si ce copier/coller n'utilisait pas la même propriété du OLEobject...
    Si tu as une idée la dessus, je suis preneur (car du genre perfectionniste ), mais autrement, grace à tes conseils, ma petite macro avance plutot comme je veux.
    Je laisse cette discussion ouverte en attendant ta réponse.

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  12. #12
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quand tu...
    " si je fais un copier coller à la mano, du contenu de l'objet vers word, je récupère tout"
    tu colles de word vers word. Logique que tu conserves le format.
    La solution que je verrais serait de récupérer le style, la police, la taille, la couleur du texte situé dans le bout de document Word et de l'appliquer au texte coller dans Excel.
    Où colles-tu ton texte ? Dans une cellule ? Dans une forme (zone de texte) ? Autre ?

  13. #13
    Membre confirmé Avatar de sibama
    Profil pro
    Inscrit en
    Août 2008
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 150
    Par défaut
    Ben en fait, c'est un truc un peu tordu (j'ai une autre discussion en cours mais personne ne m'a répondu, donc j'avance tout seul mais ça avance bien), donc voila:
    - mon OLEobjet contient un texte type avec des vides et des conseils dans une feuille excel du fichier de ma macro
    - je récupère le contenu de OLEObjet et je le colle dans un fichier word temporaire ou je remplace déjà certains vides par des données issus d'autres champs de mon formulaire
    - ensuite je colle le contenu de ce fichier word dans une fenêtre Webbrowser de mon formulaire, ce qui permet à l'utilisateur de modifier le texte type pré-renseigné
    - Sur click d'un bouton, je récupère le contenu du Webbrowser (mon texte prérenseigné et personnalisé) pour le transférer dans Outlook pour l'envoyer à plusieurs destinataires (les brouillons sont automatiquement générés par la macro avec le texte, les destinataire et copie ainsi que les pièces jointes)

    En fait je passe par un fichier Word temporaire car je ne sais pas comment ouvrir la fenêtre du webbrowser autrement qu'en lui passant un nom de fichier, ça passe pas avec thiswokbook...Wordobj.OLEFormat...).

    Quand j'ouvre le fichier word temporaire avec le Webbrowser, tous les styles sont conservés, mon problème vient donc du fait que quand je colle de mon OLEObjet vers mon Word temporaire, je perds les styles...

    Je reconnais que c'est un peu strange, mais je touve sympa l'idée de pouvoir modifier le texte directement dans le Form sans passer par Word (du point de vue de l'utilisateur puisqu'en fait c'est bien Word qui tourne dans le Webbrowser), et avec mon OLEobjet, mon fichier xls est autonome.

    Ce n'est pas parce que l'on allume la bougie de quelqu'un avec sa lanterne que l'on se prive de lumière.

  14. #14
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je laisse l'explication précédente mais je te propose cette solution qui bien sûr est un bricolage mais à défaut de réponse plus sioux...
    Dans le code suivant, au lieu de créer un tableau des mots séparés par un espace, je lance une recherche sur le premier mot de la phrase cherchée et étends la sélection au dernier mot de la même phrase.
    Ici j'ai mis les balise [ et ] mais tu peux les remplacer par ce que tu veux.
    Pour le reste du code, j'ai simplement remplacé les paramètres des méthodes utilisées dans word par leurs valeurs
    .Selection.HomeKey Unit:=6 au lieu de wdStory
    .Selection.MoveRight Unit:=2 au lieu de wdword
    Sinon c'est du word.
    Le code, donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    Sub BricolerDansLeTexte()
        Dim WordApp As Object
        Dim WordObj As Shape
        Dim Phrase As String, Ok As Boolean
        'Dans cet exemple l'objet Word et le dernier objet placé dans la Feuille 1
        Set WordObj = Worksheets(1).Shapes(Worksheets(1).Shapes.Count)
        WordObj.OLEFormat.Activate
        Set WordApp = WordObj.OLEFormat.Object.Object.Application
        WordApp.Visible = False
        DoEvents
        WordApp.Selection.HomeKey Unit:=6
        Do While Not fin
            With WordApp.Selection
                With .Find
                    .Text = "["
                    .Execute
                    .Forward = True
                    fin = .Found = False
                End With
                .ExtendMode = True
                If Not fin Then  'Première balise trouvée, on continue
                    With .Find
                        .Text = "]"
                        .Forward = True
                        Ok = .Execute
                    End With
                    If Ok Then
                        Dim FontCouleur, FontName, FontSize, FontBold, FontItalic, bold
                        With WordApp.Selection
                            Phrase = Mid(.Text, 2, Len(.Text) - 2)
                            With .Font
                                FontCouleur = .Color
                                FontName = .Name
                                FontSize = .Size
                                FontBold = .bold
                                FontItalic = .Italic
                            End With
                        End With
                    End If
                    .ExtendMode = False
                    .MoveRight Unit:=2, Count:=1
                End If
            End With
        Loop
        If FontBold = True Then
            bold = "Gras"
            Else
        End If
        Set WordApp = Nothing
        Set WordObj = Nothing
        'On quitte le document (pas indispensable mais préférable à mon avis)
        Worksheets("Feuil1").Activate
        Range("A1").Select
        'Insertion du texte et application du style
        Cells(1, 1) = Phrase
        Cells(1, 1).Font.Color = FontCouleur
        Cells(1, 1).Font.FontStyle = bold
        Cells(1, 1).Font.Name = FontName
        Cells(1, 1).Font.Size = FontSize
        'etc
        If Ok Then MsgBox Phrase
    End Sub
    Bonne soirée

    Edit
    Je viens de lire ton message. Je comprends... enfin... je vois à peu près. Si la solution que je viens de te mettre peut suffire, alors tant mieux parce que je n'ai pas mieux. Et c'est transparent pour l'utilisateur...

    J'apprécie ta pugnacité sinon la simplicité de la méthode... Mais là, comme je n'ai rien à t'offrir, je te souhaite bonne chance

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/01/2011, 01h10
  2. [AC-2003] Peut-on créer des reports avec un doc Word
    Par Tinien dans le forum Access
    Réponses: 2
    Dernier message: 29/06/2009, 13h47
  3. Ouvrir un doc word à partir d'excel
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/05/2008, 20h06
  4. Fusion d'un doc word à partir d'une application
    Par Tibaldus dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/09/2007, 11h42
  5. Renseignez un doc Word à partir d'access
    Par kyrine dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/08/2007, 12h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo