begin process at 2012 02 15 04:37:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

import d'une image de excel vers access


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

import d'une image de excel vers access

mercredi 1 août 2007 à 12:08:15 | import d'une image de excel vers access

jimgini

Bonjour!

Tout d'abord je ne suis pas sûr d'avoir poster au bon endroit. J'ai hésité entre access et vba...

Voici mon problème. Je suis entrain de faire une base de données qui doit remplacer tout un ensemble de fichiers excel. Chaque fichier excel devient une entrée de la base de données. Comme les fichiers excel sont en peu foutus n'importe comment, j'ai un module access qui recopie une à une la bonne cellule excel dans le bon champ access. Jusque là ça va je m'en sors tout seul.

Mais j'ai aussi une image à recopier. Cette image se trouve sur la feuille excel, son nom varie d'une feuille à une autre, et elle n'est pas attachée à une cellule. j'ai trouvé des bouts de code pour récupérer les images d'une feuille excel, mais je n'arrive pas à les faire marcher. ce sont des trucs du style :

Dim Obj As Shape

'Boucle sur les formes type Image contenues dans la feuille
For Each Obj In Worksheets("Feuil1").Shapes
    If Obj.Type = msoPicture Then MsgBox Obj.Name
Next Obj


ou encore :

Dim P As Object
   For Each P In ActiveSheet.Pictures
       If TypeOf P Is Picture Then Call P.Delete 'là aussi ce n'est pas la bonne instruction, mais je peux gérer ça tout seul!
   Next


Je n'arrive pas à faire marcher ces fragments de code. Tel que je comprends le problème il me manque des références, puisque je dois utiliser du vba excel dans access. Pourtant j'en utilise pour le reste, par exemple pour avoir accès à une cell particulière ou pour faire getopenfilename. Mais il doit encore me manquer des références. J'ai mis microsoft excel 11.0, ms access 11.0, activeX data objects 2.1, DAO 3.6, OLE automation, et visual basics for applications.

Le problème est donc : récupérer avec access une image sur excel dont je ne connais rien.

Quelqu'un a une idée?  Merci pour toute aide!

ps : j'ai office 2003

mercredi 1 août 2007 à 14:06:23 | Re : import d'une image de excel vers access

M51

Si cela t"interesse je peux déjà te passer le code pour stocker une image (les données dans access). Perso je conseille pas, car le fichier access s'envole rapidement en dimension, il vaut sauver l'image ailleur et stocker le lien de cette image dans access.
jeudi 2 août 2007 à 04:51:11 | Re : import d'une image de excel vers access

jimgini

Je te remercie.

Je veux bien que tu me passes ça, même si je pense pouvoir faire seul cette partie. Effectivement stocker l'image en dehors est sans doute mieux, mais ça n'empêche pas que j'aimerais toujours récupérer automatiquement l'image sur le fichier excel, quel que soit l'endroit où je la stocke après. Je ne fais pas confiance aux futurs utilisateurs pour sauver l'image au bon endroit avec le bon nom  et en plus ça serait plus rapide.

Merci à toi en tout cas.
jeudi 2 août 2007 à 08:59:22 | Re : import d'une image de excel vers access

M51

Ce code permet de stocker une image dans Access (j'insiste en disant qu'il vaut mieux sauver cette image automatiquement dans un répertoire et la lier dans access):

Il faut d'abord récupérer l'image, je la passe ensuite dans un MemoryStream, qui me permet de récupérer une table bynaire (il y a peut être plus simple mais je ne connais pas). Pour cela tu as besoin de connaitre l'encodeur Jpeg dans mon cas.

 'traitement d'image
    Dim MyImageCodecInfo As ImageCodecInfo = GetEncoderInfo("jpeg")
    Dim MyEncoder As Encoder = Encoder.Quality
    Dim Quality As Long = 70 'facteur de compression
    Dim MyEncoderParameter As New EncoderParameter(MyEncoder, Quality)
    Dim MyEncoderParameters As New EncoderParameters(1)

'retourne les caractéristiques du codec dispo dans Framework (dans mon cas un JPEG)
    Function GetEncoderInfo(ByVal Format As String) As ImageCodecInfo
        Dim i As Integer
        Dim encoders As ImageCodecInfo()
        encoders = ImageCodecInfo.GetImageEncoders
        For i = 0 To encoders.Length
            If encoders(i).FormatDescription = Format.ToUpper Then
                Return encoders(i)
                Exit For
            End If
        Next
        GetEncoderInfo = Nothing 'sinon on retourne rien
    End Function

Mettre ce code dans le Form.Load par exemple:
           MyEncoderParameters.Param(0) = MyEncoderParameter 'récupère les paramètres encodeur Jpg disponible

  Puis celui-ci pour stocker chaque image dans access:
Dim NameTable As String = "IMAGES"
    'Connection pour Access
    Dim MyConnexion As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=C:\... fichier Access.mdb")
Dim Mycommand As OleDbCommand = MyConnexion.CreateCommand()
 Mycommand.CommandText = "INSERT INTO " & NameTable & "([Image]) VALUES (?)"

Dim Miniature As Image
Dim bytImage As Byte()

Miniature = Bitmap.FromFile(ListFile(I)) 'Là, tu devras avoir le code qui te récupérera l'image depuis un fichier Excel (désolé je ne connais pas celui-ci)
 Miniature = Miniature.GetThumbnailImage(90, 120, Nothing, Nothing) 'redimensionne
 mais pas obligatoire dans ton cas
                  
 Dim mstImage As New MemoryStream() 'Attention Il faut recréer un mstImage à chaque fois, sinon on ajoute l'image à la suite
                   
Miniature.Save(mstImage, MyImageCodecInfo, MyEncoderParameters)
bytImage = mstImage.GetBuffer()
                  
 Mycommand.Parameters.Add(New OleDbParameter("Image", OleDbType.VarBinary, bytImage.Length, ParameterDirection.Input, False, CByte(0), CByte(0), "", DataRowVersion.Current, bytImage))

Mycommand.ExecuteNonQuery()

Mycommand.Dispose() 'supprime l'ancienne donnée


Enfin, dans access il faudra mettre un champ Image avec un type "Objet OLE"

Voilà bon courage ;)
jeudi 2 août 2007 à 11:44:58 | Re : import d'une image de excel vers access

jimgini

Wah merci beaucoup!

En fait je vais suivre ton conseil, je vais les enregistrer à coté de la bd. Donc je ne sais pas si j'aurais besoin de ce code, en tout cas merci.

J'ai trouvé comment accéder aux images, là j'essaye de les enregistrer. Si tu as ce code dispo aussi je suis prenuer, sinon c'est pas grave.

Merci beaucoup en tout cas.
vendredi 3 août 2007 à 11:11:05 | Re : import d'une image de excel vers access

jimgini

Réponse acceptée !
Voilà j'ai finalement réussi à le faire marcher. Je le mets si d'autres personnes en ont besoin un jour.

    Dim Photo As Object
    Dim ch As ChartObject

    For Each Photo In ws.Shapes 'ws est la worksheet où il faut récupérer les images
    Photo.CopyPicture
    Set ch = ws.ChartObjects.Add(0, 0, Photo.Width, Photo.Height)
    ch.Chart.Paste
    ch.Chart.Export Application.CurrentProject.Path & "\photos\" & po_ref & ".jpeg", "JPEG" 'ici je l'enregistre dans un rep "photos" qui se trouve au même endroit que le .mdb. po_ref est un string que je récupère plus haut, propre au fichier excel.
    Next Photo

Perso je m'en sers pour enregistrer une seule photo, pour en enregistrer plus il faudrait à chaque fois changer le nom.

Cette méthode modifie la feuille excel originale, j'ai contourné le problème avec des sendkeys pour que les modifications ne soient pas enregistrées à la fermeture.


Cette discussion est classée dans : problème, access, excel, image, obj


Répondre à ce message

Sujets en rapport avec ce message

ACCESS & EXCEL [ par Banzai ] Bonjour,Voila j'ai un problème avec une extraction de données ACCESS sur un feuille EXCEL Le problème que je rencontre et que l'execution de ma foncti Petit problème de mise en forme [ par Sebcaen14 ] Bonjour, je suis en train de terminer une application access/excel et il me reste des petits problèmes de mise en forme, j'espère que quelqu'un pourra Problème de sauvegarde de VBA Access vers Excel... [ par karitchy ] Bonjour vous tous!J'aurais besoin de votre aide... Voici mon problème: Je travaille en Excel et Access. J'utilise VBA Access pour envoyer mes données Problème de controle de couleur dans excel lors de l'insertion d'un caractere spécial [ par fanjio ] Bonjour à tous, et merci à ceux qui ont répondu à ma derniere sollicitation.Celle qui vient s'en rapproche.Alors mon probleme est que je souhaite cont CopyFromRecordset... pitit problème [ par kibi46 ] Bonjour!J'ai donc utilisé la fonction CopyFromRecordset pour récupérer des données d'une base Access et les insérer dans une page d'un classeur Excel. VBA - problème d'importation table Access vers Excel [ par Tiko38 ] Salut à tous! J'ai un problème... Je vais essayer de m'expliquer... J'importe une table Access vers un onglet de fichier Excel. Je veux choisir d uN VRAI PROBLEME DE TRANSFERT DES DONNEES DE ACCESS A EXCEL [ par pataccess ] J'ai réellement un problème dans mon transfert de données de Access à Excel ! Quelqu'un pourrait il me dire comment se fait il que Access me recrée un Problème de requête entre Excel et Access [ par gorby69 ] Salut à tous, Je suis en train de péter un câble ... Je vous explique: je travaille en VBA sous Excel XP et j'attaque une base Access 97. J'ai une r Excel vers Access [ par therafou ] Salut,Je cherche à mettre en place une liaison d'une feuille Excel vers une base access, ce que je gère sans problème pour l'importation access vers E [SQL/VBA]: Problème entre Access et Excel [ par nico39 ] Bonjour à tous,mon problème est le suivant: je souhaiterais utiliser sous Excel une requête SQL exécutée sous Access. Sous Access, la requête fonction


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales