Gerer des images avec uniquement excel (VBA) [Résolu]

FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 19 avril 2012 à 11:34 - Dernière réponse : FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention
- 26 avril 2012 à 10:16
Bonjour à tous,

Je suis en train de crée des userforms pour formaliser une entrée de données.
Parmis ces données je souhaiterais pouvoir gérer des images. Certe une image directement dans un tableau excel c'est pas bien joli, c'est lourd... et je sais meme pas si c'est possible de l'inserer automatiquement dans la cellule qu'on souhaite et qu'elle y reste.

Donc j'ai penser à une autre solution: à la place de l'image, mettre un lien hypertexte. Ca permet d'avoir un dossier spécifique avec tt les images, et a chaque fois qu'on souhaite visialiser une image, le clic sur le lien ouvre le gestionnaire d'image de windows.

Je ne suis pas très competent sous vba, je voulais déja savoir si cela vous parait possible, gérable? ou si une autre alternative vous parait plus interressante?


Merci d'avance
Afficher la suite 

13 réponses

Répondre au sujet
cs_Le Pivert 5070 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 19 avril 2012 à 12:35
0
Utile
Bonjour,
Pour faire ce que tu veux, tu n'as pas besoin de vba. Il te suffit de faire un clic droit sur une cellule, cliquez sur Lien hypertexte et de chercher le dossier d'image que tu veux visualiser.
Sinon je n'ai pas compris la question!

@+Le Pivert
Commenter la réponse de cs_Le Pivert
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 19 avril 2012 à 13:33
0
Utile
Salut Pivert,

En faite je souhaiterais faire ce que tu dis mais en appuyant sur le bouton d'un userform.
Au click je souhaiterais :
[list]
Que cela ouvre une fenetre pour choisir l'emplacement de l'image à enregistrer.
Que l'image à enregistré soit copier à l'emplacement que je souhaite.
Que cela genere un lien vers l'image , pour que je puisse enregistrer le lien à la suite des données que je met en forme.
/list

J'espere avoir été plus clair?

Merci

Flo
Commenter la réponse de FloVba
MarcPL 172 Messages postés jeudi 8 décembre 2011Date d'inscription 21 juillet 2013 Dernière intervention - 19 avril 2012 à 16:14
0
Utile
Bonjour.   Oui une image peut être directement enregistrée dans une cellule …

Même en utilisant l'icône de compression d'images, plus il y en aura plus lourd sera le fichier.

Pas de souci pour le lien hypertexte.

Par contre je ne comprends pas non plus le cheminement de ton dernier post,
par exemple "l'emplacement" désigne quoi ?   Une cellule, un dossier sur un disque ?

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
Commenter la réponse de MarcPL
cs_Le Pivert 5070 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 19 avril 2012 à 16:24
0
Utile
Mettre un contrôle Image dans l'UserForm et le code ci-dessous:

Option Explicit
Private Sub CommandButton1_Click()
Dim chemindestination, cheminfichier As String
'Declare a variable as a FileDialog object.
    Dim fd As FileDialog
   'Create a FileDialog object as a File Picker dialog.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
'Declare a variable to contain the path
    'of each selected item. Even though the path is a String,
    'the variable must be a Variant because For Each...Next
    'routines only work with Variants and Objects.
    Dim vrtSelectedItem As Variant
'Use a With...End With block to reference the FileDialog object.
    With fd
'Add a filter that includes GIF and JPEG images and make it the first item in the list.
        .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
        .Title = "Choisissez une image"
        .InitialFileName = "C:\Mes Documents\Mes images"
        .InitialView = msoFileDialogViewThumbnail 'afficher les miniatures

        'Use the Show method to display the File Picker dialog box and return the user's action.
        'If the user presses the action button...
        If .Show = -1 Then

            'Step through each string in the FileDialogSelectedItems collection.
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem is a String that contains the path of each selected item.
                'You can use any file I/O functions that you want to work with this path.
                'This example simply displays the path in a message box.
               cheminfichier = vrtSelectedItem
               Next
               End If
                End With
              'Set the object variable to Nothing.
    Set fd = Nothing
      If cheminfichier = "" Then Exit Sub
              'affiche l'image
               Image1.Picture = LoadPicture(cheminfichier)
               chemindestination = "C:\chemin du dossier destination\monimage.jpg"
               'sauvegarde l'image
              SavePicture Image1.Picture, chemindestination
              'coller la macro du lien hypertexte
 End Sub
Private Sub UserForm_Initialize()
 Image1.PictureSizeMode = fmPictureSizeModeZoom
End Sub


Pour le lien sert toi de l'enregistreur de macro et tu colles le code ou c'est indiqué.
Le Pivert
Commenter la réponse de cs_Le Pivert
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 19 avril 2012 à 17:54
0
Utile
Bonjour MarcPL,

Oui par "l'emplacement" je voulais désigner un dossier sur mon disque.

@Le Pivert:

Merci beaucoup pour le code!
Il y a pas mal de bout que je ne comprend pas mais je me penche dessus tout de suite!


Je vous tiens au courant!
Encore merci

Flo
Commenter la réponse de FloVba
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 23 avril 2012 à 16:50
0
Utile
Bonjour,

J'ai un petit soucis avec ce code, il n'y a que les dossiers qui apparaissent. J'ai bien vérifier que mes images etaient dans le bon format... et j'ai essayer de dégager le filtre (j'ai aussi rajouter un .Filtres.clear en 1er ligne du with) mais rien n'y fait. Uniquement les dossiers apparaissent dans l'explorateur.

je n'ai trouvé personne ayant eu le meme soucis que moi sur le net

Quelqu'un aurait-t'il une idée?

Merci
Commenter la réponse de FloVba
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 23 avril 2012 à 17:37
0
Utile
EDIT:

J'ai trouver comment palier a mon probleme:
.InitialFileName = "C:\Mes Documents\Mes images\*.*"

Du coup dans le fileName il y a *.* et tous les fichiers apparaissent (le filtre ne sert à rien mais c'est deja ca...)


Par contre j'ai un peu du mal a comprendre la fin du code:
   

If .Show = -1 Then 'Si je comprend bien ici la condition indique la fermeture de la fenetre           
          'Step through each string in the FileDialogSelectedItems collection.
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem is a String that contains the path of each selected item.
                'You can use any file I/O functions that you want to work with this path.
                'This example simply displays the path in a message box.
               cheminfichier = vrtSelectedItem 'ici pour chaque image selectionnée on définit a la variable cheminfichier
' le path complet du fichier (meme si il y en a qu'un seul a chaque fois)               
            Next
               End If
                End With
              'Set the object variable to Nothing.
    Set fd = Nothing ' je comprend pas pk on le vide?
      If cheminfichier = "" Then Exit Sub 'si jamais on selectionne rien on stop la procedure
              'affiche l'image
               Image1.Picture = LoadPicture(cheminfichier) ' je comprend pas ce que c'est que Image1.Picture 
'j'ai déclarer Image1 comme un HeaderFooter (c'est ce que VBA me demandait de déclarer mais je ne sais pas ce que c'est)
' j'ai essayer de le déclarer en object, picture mais il me met: "object variable or withblock not set (run-time erreur 91)
' et si j'ai bien compris, on assigne l'image de cheminfichier dans Image1?               
chemindestination = "C:\chemin du dossier destination\monimage.jpg"
               'sauvegarde l'image
              SavePicture Image1.Picture, chemindestination ' la ca va :D
              'coller la macro du lien hypertexte
 End Sub
Private Sub UserForm_Initialize()
 Image1.PictureSizeMode = fmPictureSizeModeZoom
End Sub



Du coup je pense que mon erreur vien de la déclaration de Image1 mais je ne sais pas comment le déclarer.

Merci d'avance
Commenter la réponse de FloVba
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 24 avril 2012 à 16:47
0
Utile
Salut!

Tout d'abord un grand merci, j'ai réussi à aboutire à une code qui marche et qui me satisfait!
j'ai donc un bouton avec lequel je load une image et un autre bouton qui permet de generer l'hypertext et d'enregistrer l'image sous le format "F" & UnNumeros & LaDate(jj-mm-aa) & ".bmp" dans le bon repertoire.

voila mon code:
Sub LoadImage()
'Declare a variable as a FileDialog object.
    Dim fd As FileDialog
   'Create a FileDialog object as a File Picker dialog.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
'Declare a variable to contain the path must be a variant because For each...next
    Dim vrtSelectedItem As Variant
'Use a With...End With block to reference the FileDialog object.
    With fd
'Add a filter that includes GIF and JPEG images and make it the first item in the list.
        .Filters.Clear
        .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
        .Title = "Choisissez une image"
        .InitialFileName = "C:\Mes Documents\Mes images\*.*"
        .InitialView = msoFileDialogViewThumbnail 'afficher les miniatures

        'Use the Show method to display the File Picker dialog box and return the user's action.
        'If the user presses the action button...
        If .Show = -1 Then
        'Step through each string in the FileDialogSelectedItems collection.
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem is a String that contains the path of each selected item.
               cheminfichier = vrtSelectedItem
               'extraire nom du fichier seul
            Dim posit
                Do
                    posit = InStr(1, cheminfichier, "")
                    cheminfichier = Right(cheminfichier, Len(cheminfichier) - posit)
                Loop Until posit = 0
            nomDisplay = cheminfichier
            Next vrtSelectedItem
       Else
         'If the user presses Cancel...
        'MsgBox "Opération annulée par l'utilisateur", vbCritical, "Ouverture fichier"
        Exit Sub
        End If
    End With
              'Set the object variable to Nothing.
    Set fd = Nothing
      If cheminfichier = "" Then Exit Sub
              'affiche l'image
               ProjetConta.Image1.Picture = LoadPicture(cheminfichier)
               DateFormaté = Format(Date, "dd-mm-yy")
               chemindestination = ThisWorkbook.Path & "\Image\F" & ProjetConta.N°Four.Value & " " & DateFormaté & ".bmp"
              
            fichiersansext = Left(nomDisplay, Len(nomDisplay) - 4)
             
End Sub


J'ai bien aimé la methode pour trouver le nom du fichier :D

voila le bout de code pour generer le lien et enregistrer:
             oClasseur.Sheets("Data").Hyperlinks.Add Anchor:=Cells_
(3, 14), Address:=chemindestination, TextToDisplay:=fichiersansext
                
                 
        'sauvegarde l'image
              SavePicture ProjetConta.Image1.Picture, chemindestination


Par contre il me reste 2 soucis auxilieres:
-Est il possible que lorsque je clique sur le lien hypertexte, l'image associer s'ouvre avec l'explorer d'image de windows et non internet explorer. Je m'explique: IE ne lis pas les fichiers jpg/gif/png... c'est pour ca que j'ai mis les images en .bmp : ca ouvre l'image avec paint et non IE.
- Mon autre question est a propos du filtre, comme je l'ai dit dans le messages précedent "Du coup dans le fileName il y a *.* et tous les fichiers apparaissent (le filtre ne sert à rien mais c'est deja ca...) ".
As tu une solution?


Je te remercie très grandement
pour l'aide que tu m'as déja apporter!!


Florent
Commenter la réponse de FloVba
cs_Le Pivert 5070 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 24 avril 2012 à 16:59
0
Utile
C'est normal que l'ouverture ne fonctionne pas si tu as des images .bmp. Mets ceci:

.Filters.Add "Images", "*.bmp; *.gif; *.jpg; *.jpeg", 1

Ensuite pour l'ouverture du lien dans l'explorer d'image de windows . Chez moi cela fonctionne. Je ne connais pas la raison, cela doit venir d'un réglage de ton PC. Pose la question sur un nouveau post.
Content d'avoir pu t'aider
@+Le Pivert
Commenter la réponse de cs_Le Pivert
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 25 avril 2012 à 17:26
0
Utile
C'est normal que l'ouverture ne fonctionne pas si tu as des images .bmp. Mets ceci:

.Filters.Add "Images", "*.bmp; *.gif; *.jpg; *.jpeg", 1


Oui j'avais déja essayer mais ca ne change rien je ne vois aucun fichier qu'il soit .bmp .gif .jpg...

Pour le moment je reste avec *.*

Merci
a+
Commenter la réponse de FloVba
cs_Le Pivert 5070 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 25 avril 2012 à 19:58
0
Utile
Essaie ceci:

cheminfichier = Application.GetOpenFilename( _
    "Fichiers Image (*.jpg;*.gif;*.png;*.tif;*.bmp),*.jpg;*.gif;*.png;*.tif;*.bmp")
    If cheminfichier = False Then Exit Sub
     Filtre = Right(cheminfichier, 4)


Tu déclares Filtre en String
Le Pivert
Commenter la réponse de cs_Le Pivert
FloVba 27 Messages postés jeudi 19 avril 2012Date d'inscription 8 août 2013 Dernière intervention - 26 avril 2012 à 10:16
0
Utile
J'ai trouvé d'où venais le pb !!!
il manquait juste un \ dans le code de départ
avant:
.InitialFileName = "C:\Mes Documents\Mes images"

après:
.InitialFileName = "C:\Mes Documents\Mes images"


et du coup les filtres marchent nickel!!

Merci pour ton aide et a très bientot dans le coin!
Commenter la réponse de FloVba
cs_Le Pivert 5070 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 25 avril 2018 Dernière intervention - 24 avril 2012 à 08:03
-2
Utile
Image1 est un outil que tu trouves dans la boite à outils sous le nom d'Image et que tu places dans ton UserForm.
J'attendais ta réponse pour te soumettre un code.
Il faut que tu mettes dans le même dossier que ton classeur un dossier nommé: Nouveau dossier (que tu pourras renommer)

'Mettre la propriété de l'UserForm1.ShowModal = False
Option Explicit
Dim chemindestination, cheminfichier, nomfichier, fichiersansext As String
Private Sub CommandButton1_Click()
'Declare a variable as a FileDialog object.
    Dim fd As FileDialog
   'Create a FileDialog object as a File Picker dialog.
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
'Declare a variable to contain the path
    'of each selected item. Even though the path is a String,
    'the variable must be a Variant because For Each...Next
    'routines only work with Variants and Objects.
    Dim vrtSelectedItem As Variant
'Use a With...End With block to reference the FileDialog object.
    With fd
'Add a filter that includes GIF and JPEG images and make it the first item in the list.
        .Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1
        .Title = "Choisissez une image"
        .InitialFileName = "C:\Mes Documents\Mes images"
        .InitialView = msoFileDialogViewThumbnail 'afficher les miniatures

        'Use the Show method to display the File Picker dialog box and return the user's action.
        'If the user presses the action button...
        If .Show = -1 Then
        'Step through each string in the FileDialogSelectedItems collection.
            For Each vrtSelectedItem In .SelectedItems

                'vrtSelectedItem is a String that contains the path of each selected item.
                'You can use any file I/O functions that you want to work with this path.
                'This example simply displays the path in a message box.
               cheminfichier = vrtSelectedItem
               'extraire nom du fichier seul
     Dim posit
    Do
        posit = InStr(1, cheminfichier, "")
        cheminfichier = Right(cheminfichier, Len(cheminfichier) - posit)
                 Loop Until posit = 0
    nomfichier = cheminfichier
   Next vrtSelectedItem
       Else
         'If the user presses Cancel...
        MsgBox "Opération annulée par l'utilisateur", vbCritical, "Ouverture fichier"
        Exit Sub
        End If
    End With
              'Set the object variable to Nothing.
    Set fd = Nothing
      If cheminfichier = "" Then Exit Sub
              'affiche l'image
               Image1.Picture = LoadPicture(cheminfichier)
               chemindestination = ThisWorkbook.Path & "\Nouveau dossier" & nomfichier
               'sauvegarde l'image
              SavePicture Image1.Picture, chemindestination
              'coller la macro du lien hypertexte
             fichiersansext = Left(nomfichier, Len(nomfichier) - 4)
              ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=chemindestination _
        , TextToDisplay:=fichiersansext
 End Sub
Private Sub UserForm_Initialize()
 MsgBox "Sélectionnez la cellule pour recevoir le lien Hypertexte", vbInformation, "Lien Hypertexte"
 Image1.PictureSizeMode = fmPictureSizeModeZoom
 Image1.BorderStyle = fmBorderStyleNone
 CommandButton1.Caption = "Ouvrir image"
End Sub



Mettre la propriété de l'UserForm1.ShowModal = False, c'est important pour pouvoir sélectionner une cellule.

Le Pivert
Commenter la réponse de cs_Le Pivert

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.