XL 2016 Image Useform

Maathis

XLDnaute Nouveau
Bonjour à tous,

Alors j'ai un petit problème avec un userform de saisie de données.
Le but de mon userform est de rentrer des infos sur un produit avec son image et ensuite de ranger ses valeurs dans un tableau.
Le problème c'est que ce document va être utilisé par plusieurs personnes différents sur leurs ordinateurs donc si elle insère une photo depuis leur photos par exemple, il faut que les autres utilisateurs puissent voire l'image ensuite.
J'avais réussi à obtenir ce que je voulais mais depuis le userform (grâce à votre aide sur ce forum), l'image était insérée en fichier temporaire et donc sur un autre poste, il y avait ce message:
Capture.PNG


J'ai donc eu l'idée de:
Au moment ou on va enregistrer les informations dans la base de données, l'image soit copié, renommé et envoyé vers un dossier accessible par toute les personnes du réseau et ensuite Excel prend ce fichier la pour l'insérer dans la base de données, ainsi tout le monde peut y avoir accès.
Mais est-ce la meilleure des solutions dans mon cas ?

Actuellement avec cette solution je bloque au moment ou Excel doit prendre l'image dupliquée dans le dossier accessible par tous le monde et l'insérer dans la bonne case du tableau.
Tous d'abord je vous met mon code pour insérer une image dans le useform:
VB:
Private Sub import_photo_Click()

 On Error GoTo Pasimage
    strFileName = Application.GetOpenFilename(filefilter:="JPEG Files (*.jpg;*.jpeg;*.jfif;*.jpe),*.jpg;*.jpeg;*.jfif;*.jpe,Bitmap Files(*.bmp),*.bmp", MultiSelect:=False)

    Me.boxphoto.Picture = LoadPicture(strFileName)
    Me.boxphoto.PictureSizeMode = fmPictureSizeModeStretch
    
    Me.Repaint
        
    End If

Exit Sub
Pasimage: MsgBox "Aucune image"

End Sub

Puis Quand je clique sur le bouton enregistré voici ce qu'il se passe:

Code:
pic = strFileName
        nom = Me.txtL
        
        Name pic As "C:\Users\" & nom & ".jpg"
        
                Sheets("Base").Unprotect ""
                
                
                Me.ID = "" & ID
                
                Sheets("Base").Activate
                Range("B100000").End(xlUp).Offset(1, 0).Select
                ActiveCell = Me.ID
                ActiveCell.Offset(0, 1) = Me.txtL
                ActiveCell.Offset(0, 2) = Me.txtC
                ActiveCell.Offset(0, 3) = Me.cbA
                ActiveCell.Offset(0, 4) = Me.cbM
            
    
                
                SavePicture boxphoto.Picture, pic
                
                ActiveCell.Offset(0, 5).Select
                
                 With Selection.Parents.Picture.Insert(pic)
                
                
                         .Placement = xlFreeFloating
                        
                        .PrintObject = msoFalse
                        .ShapeRange.LockAspectRatio = msoFalse
                        .Height = boxphoto.Height - 5
                        .Width = boxphoto.Width - 5
              
                        Selection.RowHeight = boxphoto.Height
                        If Selection.Width > boxphoto.Width _
                        Then Selection.Columns.ColumnWidth = 1
                      
                         Do While Selection.Width < boxphoto.Width
                             Selection.Columns.ColumnWidth = _
                             Selection.Columns.ColumnWidth + 1
                         Loop
                    .Placement = xlMoveAndSize
                End With
                
                Sheets("Base").Protect ""
                ActiveSheet.EnableAutoFilter = True
                
                Unload Me
                Sheets("Accueil").Activate
                MsgBox "Ajouté dans la base de données"
    End If

Une erreur se produit à cette ligne :
Code:
 With Selection.Parents.Picture.Insert(strFileName)
Le message d'erreur est que la proprieté insert n'est non géré.

Merci d'avance pour vos solutions.
Mathis
 

Maathis

XLDnaute Nouveau
bonjour
heu pour mettre une image au centre d'un range boucler "" jusqu'a tant que"" c'est un peu négligé comme code
et tes images si tu les garde en sauvant ton fichier deviendra trop lourd
si tu les garde pas et que tu travaille sur un autre pc (a moins qu'elle soient en reseau) ben tu n'a plus tes images

copier une image de l'userform vers la feuille
savepicture image1.picture,chemintemp
With Selection.Parent.Pictures.Insert(chemintemp)
'utiliser ma fonction de placement
end with
kill chemintemp
Merci pour le code afin de centrer l'image, je vais essayer de m'en inspirer.
Mais J'avais utilisé ce code car je voulais que l'image conserve la taille qu'elle avait prise dans l'userform pur que toutes les images aient la même taille. Mais je vais essayer de mixer les 2 codes.
 

Maathis

XLDnaute Nouveau
J'ai eu une idée pour ne pas encombrer le classeur.
Insérer l'image dans l'useform (mon code fonctionne).
VB:
On Error GoTo Pasimage
    strFileName = Application.GetOpenFilename(filefilter:="JPEG Files (*.jpg;*.jpeg;*.jfif;*.jpe),*.jpg;*.jpeg;*.jfif;*.jpe,Bitmap Files(*.bmp),*.bmp", MultiSelect:=False)

    Me.boxphoto.Picture = LoadPicture(strFileName)
    Me.boxphoto.PictureSizeMode = fmPictureSizeModeStretch
    
    Me.Repaint

Exit Sub
Pasimage: MsgBox "Aucune image"

La copier et la renommer dans un dossier réseau (mon code fonctionne)
Code:
pic = strFileName
nom = Me.txtL
Name pic As "C:\Pictures\" & nom & ".jpg"

Insérer dans la case image de ma base de données un lien hypertexte qui ouvre l'image depuis le dossier réseau accessible par tous le monde (mon code bug)
Code:
ActiveCell.Offset(0, 5).Select
ActiveCell.FormulaR1C1 = "Lien Image" & Me.txtL
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:=pic, TextToDisplay:="Lien Image_"& Me.txtL
J'ai ce message d'erreur quand je clique sur le lien :
1607001531997.png

Merci d'avance :)
 

fanch55

XLDnaute Barbatruc
Merci beaucoup mais justement est ce que c'st possible de sauvegarder des fichiers temporaires sur un dossier réseau pour que le fichier ne sois pas trop lourd et que tous les utilisateurs du réseau puissent voir les images ?

SavePicture boxphoto.Picture, pic

Il faut oublier
VB:
pic = strFileName
nom = Me.txtL
Name pic As "C:\Pictures\" & nom & ".jpg"
Car tu essayes de renommer le fichier photo ( pas de le dupliquer )

Utilises plutôt :
SavePicture boxphoto.Picture, pic
Il faut juste mettre dans Pic l'addresse de ton disque réseau et faire un insert à partir de celui-ci, ce qui sera difficile si tu travailles chez toi ( à moins d'avoir accès à celui-ci ) .

Je m'interroge quand même sur la problématique car je n'ai pas tous les éléments :
 

Maathis

XLDnaute Nouveau
Mais sachant que avec SavePicture boxphoto.Picture, pic , je le duplique est ce que je peux le renommer aussi ? Car il faudrait que les images sois triés car comme ca j'évite les doublons au moment de la saisie et je retouve plus facilement l'image correspondante dans le dossier ?
 

fanch55

XLDnaute Barbatruc
Mince, j'ai fait entrée trop tôt :
Je m'interroge quand même sur la problématique car je n'ai pas tous les éléments :
Si tes utilisateurs font les mises à jour ( ou un super User ), ce sera sur le réseau de l'entreprise et en ce cas si la photo est accessible via le userform, il le sera via la cellule, pas besoin de passer par un fichier temporaire ... 🤔
 

Maathis

XLDnaute Nouveau
En effet, mais dans le cas ou les utilisateurs insèrent la photo depuis leur espace perso sur le réseau comment ça se passe ? 🧐

Et effectivement comme tu l'a dis, le fichier excel sera lourd donc je pense qu'une solution plus simple serait plus adapté.

La solution de liens hypertexte serait-elle efficace ?
 

fanch55

XLDnaute Barbatruc
Mais sachant que avec SavePicture boxphoto.Picture, pic , je le duplique est ce que je peux le renommer aussi ? Car il faudrait que les images sois triés car comme ca j'évite les doublons au moment de la saisie et je retouve plus facilement l'image correspondante dans le dossier ?
Tu peux mettre ce que tu veux dans Pic (dans la syntaxe d'un nom de fichier valide avec son dossier)
 

fanch55

XLDnaute Barbatruc
En effet, mais dans le cas ou les utilisateurs insèrent la photo depuis leur espace perso sur le réseau comment ça se passe ? 🧐
Je suppose qu'en plus de leur espace perso, il existe un espace commun ?
Mais je commence à voir :
l'utilisateur choisit une image sur son espace perso ou le commun ( via l'userform) et celle-ci doit être déversée dans la cellule et dans l'espace commun ...
 

Maathis

XLDnaute Nouveau
Je suppose qu'en plus de leur espace perso, il existe un espace commun ?
Mais je commence à voir :
l'utilisateur choisit une image sur son espace perso ou le commun ( via l'userform) et celle-ci doit être déversée dans la cellule et dans l'espace commun ...
Exactement, il y a en effet un espace commun dont je peux me servir et oui peut importe d'où il prélèvent la photo, elle sera dupliqué vers l'espace commun et inséré sous forme d'image ou de lien hypertexte.
 

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86