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 :

Coller l'image de cellules Excel dans un mail Outlook (2016) [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Coller l'image de cellules Excel dans un mail Outlook (2016)
    Bonjour le Forum,

    (mes excuses pour cette absence, débordé)

    Je crée un objet Outlook dans lequel je veux insérer une image de quelques cellules de mon classeur.

    Pour ce faire,
    Exportation des cellules en ".png"
    Utiliser le presse-papier pour coller l'image ainsi créée dans mon mail
    Sur Excel 2010, j'arrivais à simuler CTRL+V par la méthode Sur Excel 2016, échec : la ligne de code est inactive
    Manuellement, si j'effectue CTRL+V, le presse-papier est bien actif et la copie sur le mail se réalise très bien.

    Y aurait-il un élément de changé sur Excel 2016?

    PS : la méthode HTMLBODY fonctionne mais je cherche à savoir.

    Création Outlook

    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
    Option Explicit
     
    Sub Envoi_Documents()
    'Utilise la liaison anticipée
    'Requiert une référence à la bibliothèque d'objets Outlook
    Dim Applic_Outlook As Outlook.Application
    Dim MonItem As Outlook.MailItem
     
    With Worksheets("Mail")
            .Visible = True
            .Select
    End With
     
    Application.ScreenUpdating = True
     
    'Crée l'objet Outlook
    Set Applic_Outlook = New Outlook.Application
    Set MonItem = Applic_Outlook.CreateItem(olMailItem)
     
    With MonItem
     
            .To = "marcel@citron.fr"
            .Subject = "Coucou"
            .Display
     
            'copie du corps de texte dans le corps de message
            Call Exporte_img
     
            AppActivate "Coucou - Message", 0   ' Active Outlook
            SendKeys "^V", True  ' coller
            .Send
     
    End With
     
    Application.CutCopyMode = False
    Set MonItem = Nothing
     
    Set Applic_Outlook = Nothing
     
    End Sub
    Exportation des cellules en image

    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
    Sub Exporte_img()
     
    Dim cells_img As Range
    Dim export_img As Variant
     
    Dim S As Shape
     
    export_img = "lechemin\image.png"
     
     
    With Worksheets("Mail")
     
            .Visible = True
            .Select
     
            On Error Resume Next
            For Each S In .Shapes
                    S.Delete
            Next S
            On Error GoTo 0
     
            Set cells_img = .Range("corps_3")
     
            Application.Goto reference:="R1C105"
     
            ' Création d'une zone de graphique (de type histogramme, mais vide de toute façon...) et sélection de celle-ci
            .Shapes.AddChart2(201, xlColumnClustered).Select
            ' Redimentionnement à la taille de la zone de cellules
            .Shapes(1).Height = cells_img.Rows.Height * 2
            .Shapes(1).Width = cells_img.Columns.Width * 2
     
     
            .Shapes(1).ScaleWidth 0.5, msoFalse
            .Shapes(1).ScaleHeight 0.5, msoFalse
     
            ' Copier la zone de cellules sous forme d'image
            cells_img.CopyPicture xlScreen, xlPicture
            ' Collage dans la zone de graphique
            ActiveChart.Paste
     
            ' Export sous forme d'image
            ActiveChart.Export FileName:=export_img, FilterName:="PNG"
     
            ' Retour à la normale
            .Shapes(1).Delete
     
    End With
     
    End Sub
    Par avance, merci pour vos retours

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonjour marcelG effectivement ca faisait un moment

    pour ton sendkeys il te faut pas utiliser application.sendkeys mais d'abords créer un wscript.shell et de lui lancer les sendkeys

    car application les sendkey sont vallable que dans l'application excel

    pour les soucis d'activation de fenêtre application/Outlook je ne pourrais pas t'aider je n'utilise absolument pas l'application Outlook de Microsoft je préfère l'application web

    il faut savoir que quand tu copie une plage et que tu la colle dans ton body ce qui est coller est une table html pas besoins de passer par une image a moins que pour des raisons de sécurité afin que les données ne puissent pas être modifiées par le destinataire tu prefaite une image

    dans ce cas la c'est plage .copy
    tu fait un premier paste
    tu copy le dernier shape qui est en fait la copie en image puis delete et tu la paste dans le body du message

    pas besoins de passer par un fichier image intermédiaire
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour marcelG,
    je t'invite à rédiger ton message en HTML (BodyHtml) et d'ajoute ton image en pièce jointe "c:\monRem\TOTO.PNG"

    "<td valign='middle'><b><img src='TOTO.PNG'>"

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    oui robert mais ca représente un upload

    tandis qu'un paste te mettra l'image en base 64 dans le body (pas d'upload) et SVP le code 64 de chez Microsoft hein robert

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    plagecopy_in_picture Sheets(1).Range("A1:C4")
    End Sub
     
    Function plagecopy_in_picture(rng)
    rng.CopyPicture xlScreen, xlBitmap
    activesheet.Paste
    With ActiveSheet
    .Shapes(.Shapes.Count).Copy
    .Shapes(.Shapes.Count).Delete' on a pas besoins de grader l'image sur le sheets
    End With
    End Function
    reste plus qu'a paster sur le bodyhtml
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Paste dans objet Outlook
    Salut Patrick,

    C'est toujours un plaisir.

    Source:copier image dans Outlook


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim édit_ol
     
    Set édit_ol = .GetInspector.WordEditor
    édit_ol.Range.PasteAndFormat wdFormatOriginalFormatting
    Questions/remarques

    1 - Si je code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim édit_ol As Inspector
    (J'évite tant que possible les déclarations en Variant)
    Alors le code tombe en anomalie (13 - incompatibilité de type)

    2 - L'image est bien collée mais en taille réduite.
    Comment modifier alors ses propriétés Width et Height

    3 - L'image écrase ma signature par défaut

    Merci beaucoup.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    a ben oui il y a la fonction paste déjà pour le document de Outlook en edition ,je l'ignorais, comme je te l'ai dis je n'utilise pas du tout Outlook mais CDO

    donc dans cette partie la je ne pourrais pas t'aider robert semble plus familiariser avec Outlook que moi peut être aura il une idée sur la question
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Pas grave.
    Merci Robert et Merci Patrick.
    J'essaie de creuser.

    Bonne soirée à tous.

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

Discussions similaires

  1. Sinon passer 6 lignes en VBA sur excel 2016
    Par scuti dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/07/2017, 10h06
  2. Aide sur formule excel 2016
    Par kodiako dans le forum Excel
    Réponses: 7
    Dernier message: 27/03/2017, 19h03
  3. [XL-2016] ScreenUpdating=False ne fonctionne pas sur Excel 2016
    Par choumahm dans le forum Excel
    Réponses: 7
    Dernier message: 31/01/2017, 13h54
  4. [OL-2013] EXPORTER UN FICHER CONTACTS SOUS EXCEL ET IMPORTER SUR OUTLOOK 2016
    Par CLEMOT-49450 dans le forum Outlook
    Réponses: 0
    Dernier message: 05/11/2015, 19h51

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