Gerer des images avec uniquement excel (VBA)

Résolu
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013 - 19 avril 2012 à 11:34
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013 - 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

13 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
19 avril 2012 à 12:35
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
19 avril 2012 à 13:33
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
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
19 avril 2012 à 16:14
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 !
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
19 avril 2012 à 16:24
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
19 avril 2012 à 17:54
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
23 avril 2012 à 16:50
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
23 avril 2012 à 17:37
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
24 avril 2012 à 16:47
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
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
24 avril 2012 à 16:59
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
25 avril 2012 à 17:26
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+
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
25 avril 2012 à 19:58
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
0
FloVba Messages postés 27 Date d'inscription jeudi 19 avril 2012 Statut Membre Dernière intervention 8 août 2013
26 avril 2012 à 10:16
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!
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
24 avril 2012 à 08:03
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
-2
Rejoignez-nous