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

VB.NET Discussion :

Soucis Export Image vers Excel en VB.net


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut Soucis Export Image vers Excel en VB.net
    Bonjour

    Je n'arrive pas à exporter une image vers Excel en VB.net malgré mes nombreuses recherches et essais trouvés sur le net !!!

    Voici mon code de base et soucis ligne 47:
    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
     
    Dim ExcelApp As Object, ExcelBook As Object
                Dim ExcelSheet As Object
                Dim i As Integer
                Dim j As Integer
     
                ' Minimum à 1 
                ProgressBar1.Minimum = 0
                ' Maximum= nombre total de fichier à copier.
                'ProgressBar1 = filenames.Length
                ' On initialise la ProgressBar.
                ProgressBar1.Value = 1
                ' On indique le pas.
                ProgressBar1.Step = 6
                ProgressBar1.Style = ProgressBarStyle.Continuous
                ProgressBar1.Visible = True
     
                'Export Excel
                ExcelApp = CreateObject("Excel.Application")
                ExcelBook = ExcelApp.WorkBooks.Add
                ExcelSheet = ExcelBook.WorkSheets(1)
     
                Dim c As Color
                Dim titre As String
                With ExcelSheet
                    titre = nom & " " & prenom
                    If numero <> "" Then titre = titre + " - N° Référant Pôle Emploi: " & numero
                    ExcelSheet.Cells(1, 1).value = titre
                    For Each col As DataGridViewColumn In Me.DataGridView1.Columns
                        ExcelSheet.Cells(3, col.Index + 1).Font.Color = System.Drawing.ColorTranslator.ToOle(Color.White)
                        ExcelSheet.Cells(3, col.Index + 1).Interior.Color = System.Drawing.ColorTranslator.ToOle(Color.Black)
                        ExcelSheet.Cells(3, col.Index + 1) = col.HeaderText.ToString
                        For i = 1 To Me.DataGridView1.RowCount - 1
                            ExcelSheet.cells(i + 3, 1) = Me.DataGridView1.Rows(i - 1).Cells("numero_offre").Value
                            For j = 0 To DataGridView1.Columns.Count - 1
                                ExcelSheet.cells(i + 3, j + 1) = DataGridView1.Rows(i - 1).Cells(j).Value
                                c = DataGridView1.Rows(i - 1).Cells(j).Style.BackColor
                                Dim value As Integer = c.ToArgb()
                                Dim hex As String = value.ToString("X6")
                                If hex <> "000000" Then 'MessageBox.Show(MyColor.Name)
                                    ExcelSheet.Cells(i + 3, j + 1).Interior.Color = System.Drawing.ColorTranslator.ToOle(c)
                                End If
                            Next
                        Next
                    ExcelSheet.Cells.font.size = 8
    	'--------------------- Export image vers Excel -----------------------------------------------
                    ExcelSheet.Pictures.Add(i + 1 + 3, 1, "images\code_couleur_legende.jpg") ' <------------------
    	'---------------------------------------------------------------------------------------------
                    ExcelSheet.Cells(i + 1 + 12, 1).value = "© Copyright 2017 - DP - EMPLOI Suivi®"
                        ExcelSheet.Cells(i + 1 + 13, 1).value = "Site EMPLOI Suivi : http://contact72.free.fr//sites/EMPLOI_Suivi/"
                        ProgressBar1.PerformStep()
                    Next
                End With
    Pouvez-vous m'aider à résoudre ce problème ?

    Merci à tous

    Cordialement.


  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Bonjour,

    une rapide recherche me donne ce lien et donc ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With xlApp.ActiveSheet.Pictures.Insert(PicPath)
        With .ShapeRange
            .LockAspectRatio = msoTrue
            .Width = 75
            .Height = 100
        End With
        .Left = xlApp.ActiveSheet.Cells(i, 20).Left
        .Top = xlApp.ActiveSheet.Cells(i, 20).Top
        .Placement = 1
        .PrintObject = True
    End With
    A adapter au votre bien entendu.

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut merci
    Bonjour

    Ok Merci, je vais essayer le code...

    Cordialement.


  4. #4
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    re

    j'ai une erreur au niveau de la ligne d'insertion : Informations supplémentaires : Le membre public 'ActiveSheet' du type 'Worksheet' est introuvable !!!

    Je suppose que je dois mettre un élément dans Import mais lequel ?

    Merci.

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Avec votre code ce sera plus facile ;-)

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    Mon code complet est dans le premier post !!!

    J'ai réussi à importer mon image avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ExcelSheet.Shapes.AddPicture(My.Application.Info.DirectoryPath + "\images\code_couleur_legende.jpg", True, True, 1, (i + 1 + 3) * 10, 150, 80)
    Mais la position est en pixel et non dans la case spécifique (i+1+3,3)

    Si je veux utiliser un range, il me faut mettre un Imports Microsoft.Office.Interop.Excel
    mais je rentre en conflit avec Imports System.Drawing que j'utilise avec Drawing.Rectangle utilisé pour d'autres circonstances dans mon code !!!!

    Bon, c'est de la bidouille et l'image s'affiche bien dans Excel à une position aléatoire (1, (i + 1 + 3) * 10)...

    J'aimerai vraiment que l'image s'affiche dans la cellule précise, alors je cherche pour trouver une solution...

    Merci.

  7. #7
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Citation Envoyé par didpoy Voir le message
    Mon code complet est dans le premier post !!!i.
    Le code que je demandais n'était pas celui de votre premier message mais celui que vous avez essayé d'adapter et qui a levé une erreur.

    Citation Envoyé par didpoy Voir le message
    Si je veux utiliser un range, il me faut mettre un Imports Microsoft.Office.Interop.Excel
    mais je rentre en conflit avec Imports System.Drawing que j'utilise avec Drawing.Rectangle utilisé pour d'autres circonstances dans mon code !!!!
    Les imports ne sont pas obligatoir, vous pouvez ne rien importer et mettre le namespace complet ou alors vous pouvez n'en importer qu'une partie et mettre l'autre partie dans le code.

    Citation Envoyé par didpoy Voir le message
    J'aimerai vraiment que l'image s'affiche dans la cellule précise, alors je cherche pour trouver une solution....
    La solution se trouve dans le code que je vous ai donné.

  8. #8
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    Re

    Ok j'ai re-manipulé les choses en me basant sur votre code et j'ai trouvé cette solution qui positionne l'image selon le nombre de ligne de la Datagrid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim T As Single
    T = ExcelSheet.Cells(i + 1 + 3, 5).Top
    ExcelSheet.Shapes.AddPicture(My.Application.Info.DirectoryPath + "\images\code_couleur_legende.jpg", True, True, 1, T, 150, 80)
    Sinon, votre code que j'avais adapté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    With ExcelSheet.ActiveSheet.Pictures.Insert(My.Application.Info.DirectoryPath + "\images\code_couleur_legende.jpg")
    With .ShapeRange
    .LockAspectRatio = True
    .Width = 150
    .Height = 80
    End With
    .Left = ExcelSheet.ActiveSheet.Cells(i + 1 + 3, 5).Left
    .Top = ExcelSheet.ActiveSheet.Cells(i + 1 + 3, 5).Top
    .Placement = 1
    .PrintObject = True
    End With
    qui me renvoie l'erreur : Le membre public 'ActiveSheet' du type 'Worksheet' est introuvable sur la première ligne.

    si je vire ActiveSheet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With ExcelSheet.Pictures.Insert(My.Application.Info.DirectoryPath + "\images\code_couleur_legende.jpg")
                        With .ShapeRange
                            .LockAspectRatio = True
                            .Width = 150
                            .Height = 80
                        End With
                        .Top = ExcelSheet.Cells(i + 1 + 3, 5).Top
                        .Placement = 1
                        .PrintObject = True
                    End With
    Votre code Fonctionne parfaitement aussi.

    Merci.

  9. #9
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Effectivement, dans le code que je vous ai donné c'est sur l'application qu'il cherche l'activesheet (logique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With xlApp.ActiveSheet.Pictures.Insert(PicPath)
    Alors que vous avez essayé sur directement sur une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With ExcelSheet.ActiveSheet.Pictures.Insert(My.Application.Info.DirectoryPath + "\images\code_couleur_legende.jpg")
    Donc c'est logique qu'en enlevant "ActiveSheet" ça fonctionne, vu que vous êtes sur la feuille où vous travaillez ^^

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    OK

    Tout fonctionne...

    Merci pour votre aide très utile.

    Bon Courage.

    Cordialement.

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

Discussions similaires

  1. Comment je peux exporter vers excel dans vb.net?
    Par chahinaz21 dans le forum VB.NET
    Réponses: 4
    Dernier message: 03/09/2010, 16h40
  2. Exportation d'images vers excel
    Par scheme dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 03/09/2009, 15h17
  3. Export requete vers excel et mise en forme
    Par ston dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 16h55
  4. Export ASP vers excel
    Par steph04 dans le forum ASP
    Réponses: 4
    Dernier message: 04/05/2005, 01h22

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