Image selon URL dans un MsgBox
Bonjour,
Je vois pas mal d'anciens posts pour afficher une image dans un MsgBox mais je tombe sur de nombreux codes obsolètes sur ma version et pas exactement la même problématique.
Voilà le code sur lequel je me base en espérant déjà que ca pose problème ^^
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("F11:F400")) Is Nothing Then
MsgBox "Bonjour"
ActiveSheet.Shapes("MON_Image").Visible = True
End If
End SubJ'aimerai donc que lors d'un double clic sur une cellule de la plage F11 à F400 un Msg box s'affiche avec une image dont le lien (en local C:/...) est différent pour chaque cellule et ce lien se trouve 4 cellules à droite de la cellule sélectionnée (dans la colonne J qui est masquée).
Est-ce faisable assez facilement avec cette base de code ?
ou alors je n'y suis pas du tout ^^
Merci d'avance !
Bonjour,
Le plus facile est de :
> Insérer un Userform dans VBEditor (le nommer Userform1),
> Y placer un contrôle Image (le nommer Image1),
Le code devient alors :
Pour la feuille :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("F11:F400")) Is Nothing Then
Userform1.Pic = Target.Offset(0, 4).Value
Userform1.Show
End If
End SubPour L'Userform :
Public Pic As String
Private Sub UserForm_Activate()
Userform1.Image1.Picture = LoadPicture(Pic)
End SubAprès, il y aura plein d'ajustements à faire : taille et position de l'userform, de l'image, format des images acceptées (jpg, gif, ...) etc...
Mais teste déjà ça.
Bonjour pijaku, ca fonctionne nickel.
Mais en effet l'image apparait très zoomée sur une portion, on peut lui donner une dimension précise ? C'est uniquement des image en jpg.
Petit détail : Et autre point, vu que je demande un double clic sur un tableau dynalmique, quand je ferme la msgBox il y a aussitôt une autre boite qui s'ouvre à s'avoir les détails du tableau dynamique. Bon en soit on fait annuler aussitôt et c'est bon mais si au cas où au passage une petite ligne pouvait éviter d'afficher cette boite après fermeture.
Merci!
Bonsoir,
Je suis hors réseau ce week end.
Faites moi une petite relance lundi matin, sauf si quelqu'un d'autre prend en charge ce sujet...
Bon week-end
Bonjour,
1- l'image, le code de l'UserForm devient :
Public Pic As String
Private Sub UserForm_Activate()
Userform1.Image1.Picture = LoadPicture(Pic)
Userform1.Image1.PictureSizeMode = fmPictureSizeModeStretch
End Sub2- Le tableau dynamique : pas compris la question...
- Messages
- 3'678
- Excel
- 365, 2019
- Inscrit
- 11/04/2020
- Emploi
- Formateur bureautique, dvpt de fichiers
Bonjour,
En fait, sa macro se lance suite à un double clic dans un TCD, ce qui a pour effet de créer une nouvelle feuille avec les donnés qui ont permis de construire cette ligne du TCD, comportement classique d'Excel.
Tu peux essayer de mettre cancel = true
Avant la ligne if not...
Bonjour,
Bien vu Joyeux Noël.
Je n'avais pas compris qu'il s'agissait d'un TCD, mais pensais à un tableau...
En effet, le Cancel = True règle le souci :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("F1:F21")) Is Nothing Then
Cancel = True
UserForm1.Pic = Target.Offset(0, 4).Value
UserForm1.Show
End If
End SubBonjour !
Merci pour vos réponses !
Finalement j'ai décidé que pour la fluidité de l'usage, j'allais faire apparaitre l'image à droite du tableau dans le classeur plutôt qu'un useforme.
Cela donne le code suivant
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'D abord on actualise la table
Application.EnableEvents = False
Sheets("Stock restant").PivotTables("STOCK").RefreshTable 'On actualise le tableau dynamique TCD qui donne les résultats en temps réel
Application.EnableEvents = True
Dim Img As Object 'On supprime ensuite toutes les images de la feuille avant de continuer
For Each Img In ActiveSheet.Pictures
Img.Delete
Next Img
'On active la troisième cellule à droite de celle où on a fait le double clic
ActiveCell.Offset(rowOffset:=0, columnOffset:=3).Activate
For Each cel In Selection 'Pour chaque cellule (bon ici 1 seule) sélectionnée
If IsFile(cel.Value) = 0 Then 'On vérifie que le lien qu'il contient n'est pas nulle
Range("J2").Value = "Photo non dispo"
Exit Sub 'Sinon on arrête là.
Else
Set Image = ActiveSheet.Pictures.Insert(cel.Value) 'Si c'est ok, on va chercher l'image dans SSD
With Image
.ShapeRange.LockAspectRatio = msoTrue 'et on l'inclue telle quelle
.Left = Range("J2").Offset(0, 0).Left 'l'image se place en J2
.Top = Range("J2").Offset(0, 0).Top
End With
End If
Cells(1, 10).Value = cel.Offset(0, -3) 'En J1 on rappelle le nom de ce qui a été cliqué initialement (3 cases à gauche de la sélection)
Next cel
End sub
Function IsFile(fName As String) As Boolean 'Fonction faisant fonctionner la recherche du fichier image lu dans le lien
On Error Resume Next
IsFile = ((GetAttr(fName) And vbDirectory) <> vbDirectory)
End FunctionJe sais que c'est pas forcément hyper propre car c'est l'association de plusieurs codes que j'ai trouvé mais cela fonctionne !
Après s'il y a des optimisations importantes je suis preneur ^^