Image user forme selon valeur cellule selectionnée
Bonjour,
J'ai créé un tableau Excel avec une liste de N° de plan de fabrication.
Ces plans sont sauvegardés dans un dossier Windows sur un serveur interne.
La 1ère colonne liste des numéros de plan (format "chaine") avec un lien hypertexte qui ouvre le plan (format .tif) quand on clic dessus.
J'aimerais intégrer une fenêtre dans le fichier Excel qui affiche directement le plan sans avoir à cliquer et l'ouvrir. (un genre d'aperçu)
Je pensais passer par un userform (ou autre) avec une macro qui affiche le plan dans le userform en fonction de la cellule sélectionnée. (et donc du lien hypertexte de la cellule)
En 1er lieu, est ce que cela est possible ?
Et si oui, quelle serait la formule magique? 😊
J'ai des connaissance en vba mais vite assez limitée, surtout quand il s'agit de lien lien externe au fichier
Merci par avance pour votre aide🙏
Seb
Bonjour Seb276,
Je ne pense pas qu'Excel soit capable de gérer des aperçus de documents comme ceci, après j'imagine qu'il est possible de tricher !
Une idée à la volée :
Faire un programme pour ouvrir chaque plan un par un, enregistrer une capture d'écran dans un dossier dédié ainsi que la date de modification.
A l'ouverture de ton Excel, les dates de modif enregistrées sont comparées avec les dates des plans, si jamais une date ultérieure est trouvée, le plan a été modifié, on refait une capture.
Ensuite, un petit code permettrait d'afficher ces captures.
Est-ce que ça pourrait te convenir ?
Bonjour Seb276,
Il faut passer par un code événementiel de la feuille, Worksheet_selectionChange qui lancera automatiquement le lien si ce dernier est valide. Donc tu n'auras plus le clic à produire sur le lien.
Par contre prévoit ici un petit fichier avec une image tiff. Car ce type d'image Adobe est il compatible avec le contrôle Image du formulaire Windows.
Bonjour,
Merci pour vos réponses.
@NyxLingenhall : pourquoi créer des capture d'écran? l'ensemble des plans étant déjà au format tiff dans un dossier
J'utilise une petite macro dans un autre Excel pour vérifier que les plans ont sont bien les derniers mais l'idée de capture d'écran avec date de modification est intéressante 👍
@X cellus :
Je comprend que Worksheet_selectionChange permet afficher le plan dès que je sélectionne la cellule contenant le numéro du plan, ce qui simplifie encore la tache.
Comme indiqué ci dessus, l'ensemble des plans est au format tiff mais je n'ai pas compris ta derniere phrase
Petite précision : Il y a plus de 10 000 plans...
Bonjour Seb276,
Oui effectivement j'ai lu un peu vite mais si ce format est exploitable alors pas besoin de captures d'écran !
Mon idée était d'enregistrer chaque image directement dans Excel et des les nommer en fonction du nom du plan, de toutes les cacher et d'afficher seulement celle dont on veut voir l'aperçu. Peut-être un peu lourd vu le nombre de plans par contre, il faudrait peut-être faire une image intermédiaire de faible résolution ?
Bonjour à tous,
Mon idée était d'enregistrer chaque image directement dans Excel et des les nommer en fonction du nom du plan, de toutes les cacher et d'afficher seulement celle dont on veut voir l'aperçu. Peut-être un peu lourd vu le nombre de plans par contre, il faudrait peut-être faire une image intermédiaire de faible résolution ?
S'il y a + 10 000 images dans le fichier ça va rammer comme pas possible, surtout si on travaille avec une macro "selection_change" qui risque d'etre lancée très souvent. Il faut absolument trouver un moyen d'aller lire ces images dans le dossier windows et les ajouter à l'userform, sans passer par le classeur (ou, à la limite si nécessaire, stocker l'image en cours).
Cependant d'après Loading tif images by vba | MrExcel Message Board il y aura besoin de convertir les images car par défaut les UF n'acceptent pas le tif. Mais ça semble assez facile.
Re, pour info voir ci-joint un "petit bidouillage" pour afficher une image d'un format lisible par Windows (donc tiff ok), à partir de son chemin d'accès.
Cependant, je remarque en testant que les images ne sont pas redimensionnées pour s'adapter à l'UF. Il faudra donc voir, par exemple ici Resize Image inside a Image Control on userform | MrExcel Message Board, comment adapter les images à l'UF.
Alternativement j'imagine que si on s'assure que toutes les vignettes ont la même dimension, et que cette dimension est égale à celle de l'UF, il n'y aura pas de problème.
Bonjour Saboh,
Merci pour tes réponses.
Ta "bidouille" fonctionne et correspond à ce que je cherchais, elle a permis de lire tout de suite le rendu sans se lancer dans une macro complète 👍
Hélas, en effet le rendu est trop pauvre, même en modifiant la taille des images comme indiqué dans ton lien et en changeant la taille de l'image tif liée.
(Autrement je doit augmenter la taille du user form à la taille de mon écran, ce qui n'est pas non plus le but)
Le userform n'est certainement pas prévu pour de type d'utilisation et à ses limites de résolutions.
Je vais chercher une autre solution.
Merci à tous pour vos aides. 🙏
Bonjour de nouveau,
Oui désolé, je n'avais pas approfondi par manque de temps mais j'avais peur de ce résultat. En programmation de manière générale c'est toujours galère à gérer les images, mais je dois dire que VBA est particulièrement contraignant ET obsolète (très peu de formats supportés, pas de redimensionnement automatique) sur ce point.
J'imagine que cette demande était en lien avec votre sujet précédent. Je ne sais pas quelles sont vos contraintes, mais je me demande si une approche "hors excel" ne serait pas à privilégier. Je pense à Python et ses nombreuses librairies, ou bien, pour rester sur des tableurs, les possibilités JavaScript de GoogleSheets et Excel Online/365. Sur Excel 365 on a aussi la fonction IMAGE function - Microsoft Support qui aurait pu aider d'ailleurs. Mais honnêtement avec 10 000 lignes j'aurai très peur de planter mon PC.
Bonne recherche !
Bonsoir Seb276, le Fil,
Je reviens sur ton besoin et d'abord sur ma remarque.
Comme indiqué ci dessus, l'ensemble des plans est au format tiff mais je n'ai pas compris ta derniere phrase
Le format Tiff est un format développé par Adobe (créateur aussi du format pdf). Comme ce dernier le but a été de pouvoir réduire sans perte de qualité une image ou un texte (pour le pdf) et d'être facilement utilisable. Sans contrainte du logiciel à l'origine.
Ci-dessous, plutôt que de passer par un formulaire et à ses contrôles (solution plus lourde à gérer) , il serait préférable de passer par une forme qui fera office de conteneur. Exemple: un rectangle qui va recevoir l'image.
Code pour le Selection_Change
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Actif sur la première colonne avec présence du chemin complet de l'image
If Target.Column = 1 And Target.Value > "" Then
If ActiveSheet.Shapes("Rect02").Visible = False Then ActiveSheet.Shapes("Rect02").Visible = True
Call RepImg
Else: ActiveSheet.Shapes("Rect02").Visible = False
End If
End SubCode pour l'affichage de l'image dans la forme rectangle de la cellule active.
Private Sub RepImg()
'Images d'origine provenant d'un disque interne ou autre et l'insérer dans la forme
ActiveSheet.Shapes("Rect02").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.UserPicture ActiveCell
.TextureTile = msoFalse
End With
End SubTant que l'on reste sur la première colonne le cadre rectangle restera visible. Dès que l'on s'en éloigne ou que la ligne est vide, le cadre s'effacera.
Bonjour X Cellus,
En effet j'ignorais que le tiff a été développé par Adobe, on en apprend chaque jour 🤗
Ton code est très intéressant, après quelques minutes le temps de le comprendre et comment le faire tourner, ca fonctionne nickel.
C'est exactement ce que je recherchais 👍 je pensais abandonné l'idée mais tu as relancé mon projet!
Merci beaucoup!!!
Bonjour,
J'ai réussi a adapté le code à mon listing existant 😊
Je le partage ci dessous pour les futurs utilisateurs qui en auraient besoin.
Merci encore et bonnes fetes de fin d'années
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim plan As String
Dim rect As Shape
Dim PosRec As Range
'Actif sur la première colonne avec présence du chemin complet de l'image
If Target.Count = 1 Then
If Target.Column = 1 And Target.Value > "" Then
' Rect02 = Nom de la forme
plan = Target.Address
Set rect = ActiveSheet.Shapes("Rect02")
Set PosRec = ActiveSheet.Range(plan)
If ActiveSheet.Shapes("Rect02").Visible = False Then ActiveSheet.Shapes("Rect02").Visible = True
'postionner la forme 2 colonne à droite de la cellule selectionné
rect.Top = PosRec.Top
rect.Left = PosRec.Offset(0, 2).Left
Call RepImg
Range(plan).Select
Else: ActiveSheet.Shapes("Rect02").Visible = False
End If
End If
End Sub
Private Sub RepImg()
'Images d'origine provenant d'un disque interne ou autre et l'insérer dans la forme
Dim lien As String
Dim lien_existe As String
' Inserer le lien du chemin où sont contenues les image tif
lien = "C:\Users\user\Pictures\" & ActiveCell.Value & ".tif"
lien_existe = Dir(lien)
If lien_existe <> "" Then
ActiveSheet.Shapes("Rect02").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.UserPicture lien
.TextureTile = msoFalse
End With
Else
ActiveSheet.Shapes("Rect02").Visible = False
Exit Sub
End If
End SubMerci à vous Seb, bonnes fêtes également.
↑ sur votre dernière réponse