Convertir plage cellule en image pour courriel

Jen -  
 Jen -

Bonjour,

Mon code ici copie une plage de cellule pour l'intégrer à un courriel. Tout fonctionne bien, mais j'aimerais convertir cette plage de cellule en image avec des dimensions que je pourrais ajuster. Quelqu'un peut m'aider ?

Merci à l'avance!

Sub EnvoyerEmail()
    
       
    Dim réponse As Integer
    
    réponse = MsgBox("Est-ce que votre application Outlook est ouvert?", vbYesNo, "Attention!")
    If réponse = vbNo Then
    MsgBox ("Vous devez ouvrir votre application pour continuer")
        Exit Sub
    End If
            
    Dim oOutlook As Object
    Set oOutlook = CreateObject("Outlook.Application")
    
    Dim oMail As Object
    Set oMail = oOutlook.CreateItem(0)
    
       
    With oMail
    
        Dim oObjetword As Object
        Set oObjetword = .GetInspector.WordEditor
        .To = ""
        .Subject = "Voici votre HORAIRE 2024-2025 : " & Range("B6").Value & " - " & Range("C6")
'       .Body = ""
        ActiveSheet.Range("A1:O12").Copy
        oObjetword.Range(0).Paste
        .Display
    End With
        Application.CutCopyMode = False
        Range("D6").Select
        

End Sub

1 réponse

  1. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170
     

    Bonjour,

    Pour convertir une plage de cellules en image dans Excel VBA, vous pouvez utiliser la méthode ExportAsFixedFormat pour exporter la plage sélectionnée en tant que fichier image. Voici comment vous pouvez le faire dans votre code :

    Sub EnvoyerEmail()

        Dim réponse As Integer
        réponse = MsgBox("Est-ce que votre application Outlook est ouverte?", vbYesNo, "Attention!")
        
        If réponse = vbNo Then
            MsgBox ("Vous devez ouvrir votre application pour continuer")
            Exit Sub
        End If
                
        Dim oOutlook As Object
        Set oOutlook = CreateObject("Outlook.Application")
        
        Dim oMail As Object
        Set oMail = oOutlook.CreateItem(0)
        
        With oMail
            Dim oObjetword As Object
            Set oObjetword = .GetInspector.WordEditor
            .To = ""
            .Subject = "Voici votre HORAIRE 2024-2025 : " & Range("B6").Value & " - " & Range("C6")
            .Body = ""
            ' Exporter la plage de cellules en tant qu'image
            ActiveSheet.Range("A1:O12").ExportAsFixedFormat Type:=xlTypePicture, Filename:="C:\Temp\Plage_Cellules.png", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
            ' Insérer l'image dans le courriel
            oObjetword.InlineShapes.AddPicture "C:\Temp\Plage_Cellules.png", LinkToFile:=False, SaveWithDocument:=True
            ' Afficher le courriel
            .Display
        End With
        
        Application.CutCopyMode = False
        Range("D6").Select

    End Sub
     

    Dans ce code, la plage de cellules sélectionnée est exportée en tant qu'image au format PNG dans le répertoire C:\Temp\ avec le nom de fichier Plage_Cellules.png. Ensuite, l'image est insérée dans le corps du courriel à l'aide de la méthode InlineShapes.AddPicture. Assurez-vous de spécifier le chemin d'accès correct pour l'exportation de l'image. Une fois le courriel affiché, l'image sera visible dans le corps du courriel.

    En espérant vous apporter la solution. Ca devrait fonctionner.

    1
    1. Jen
       

      Merci beaucoup pour toute ces infos!

      J'imagine que c'est impossible de seulement coller l'image dans le courriel sans l'enregistrer ?

      0
    2. Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention   170 > Jen
       

      Si vous souhaitez insérer l'image directement dans le corps du courriel sans enregistrer de fichier image, vous pouvez le faire en copiant la plage de cellules sous forme d'image dans le Presse-papiers, puis en collant cette image dans le corps du courriel. Voici comment vous pouvez le faire :

      Sub EnvoyerEmail()

          Dim réponse As Integer
          réponse = MsgBox("Est-ce que votre application Outlook est ouverte?", vbYesNo, "Attention!")
          
          If réponse = vbNo Then
              MsgBox ("Vous devez ouvrir votre application pour continuer")
              Exit Sub
          End If
                  
          Dim oOutlook As Object
          Set oOutlook = CreateObject("Outlook.Application")
          
          Dim oMail As Object
          Set oMail = oOutlook.CreateItem(0)
          
          With oMail
              Dim oObjetword As Object
              Set oObjetword = .GetInspector.WordEditor
              .To = ""
              .Subject = "Voici votre HORAIRE 2024-2025 : " & Range("B6").Value & " - " & Range("C6")
              .Body = ""
              ' Copier la plage de cellules comme une image dans le Presse-papiers
              ActiveSheet.Range("A1:O12").CopyPicture Appearance:=xlScreen, Format:=xlPicture
              ' Coller l'image dans le corps du courriel
              oObjetword.Range.Paste
              ' Afficher le courriel
              .Display
          End With
          
          Application.CutCopyMode = False
          Range("D6").Select

      End Sub
       

      Voilà. Pas de souci.

      0
    3. Jen > Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention  
       

      Je vous remercie infiniment ! Je peux enfin clore mon projet ! Tout fonctionne à merveille. Je vais garder en note vos explications précieusement.

      Bonne journée à vous!

      1
    4. Jen > Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention  
       

      Dernière petite question, est-ce qu'il est possible donner à l'image une dimension spécifique ? :)

      0
    5. Jen > Bruno83200_6929 Messages postés 725 Date d'inscription   Statut Membre Dernière intervention  
       

      C'est génial!! Je vous remercie beaucoup pour votre précieux temps ainsi que les explications. :)

      Bonne fin de journée!

      1