XL 2016 vérifier si une image est sélectionnée

gsx-air

XLDnaute Nouveau
salut a tous
j'ai un fichier Excel dans lequel je glisse 4 a 5 images différentes ensuite je clique sur une image puis je lance une petite macro pour redimensionner et positionner chaque image
mais lorsque je lance ma macro si je n'ai pas sélectionner l'image auparavant la macro ne fonctionne pas (erreur)
je souhaiterais donc contrôler au début de ma macro qu'une image est sélectionnée pour pouvoir continuer la macro

je souhaiterais contrôler
si pas d'image sélectionnée
message box (vous devez sélectionner une image pour continuer la macro)
pouvoir sélectionner une image
contrôler a nouveau
si ok on continue la macro
si pas ok on sort de la macro

merci par avance

j'ai essayais avec la fonction erreur mais je n'arrive a ne contrôler que la première fois
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Un perfectionnement serait possible : Au lieu de demander la position on la calcule, l'image ayant été à peu près positionnée où on la veut manuellement …
Ça ouvre même la porte à la possibilité de traiter toutes les images existantes de la feuille !

Et ça maaarche ! :
VB:
Option Explicit
Sub AjusterImages()
   Dim Img As Excel.Picture
   For Each Img In ActiveSheet.Pictures
      AjusteImage Img: Next Img
   End Sub
Sub DéplacImage1()
   If Not TypeOf Selection Is Excel.Picture Then
      If MsgBox("Veuillez sélectionner une image", vbOKCancel, "DéplacImage1") _
         = vbOK Then Application.OnTime Now + TimeSerial(0, 0, 3), "DéplacImage1"
      Exit Sub: End If
   AjusteImage Selection
   End Sub
Sub AjusteImage(ByVal Img As Excel.Picture)
   Dim PosImg As Integer, NbImg As Integer, Gauche As Double, _
      Largeur As Double, Dessus As Double, Bas As Double
   NbImg = ActiveSheet.[G1].Value
   With ActiveSheet.[B2:B6]: Gauche = .Left: Largeur = .Width
      Dessus = .Top: Bas = Dessus + .Height: End With
   PosImg = Int(IntpoLin(Img.Top + Img.Height / 2, Dessus, 0.5, Bas, NbImg + 0.5) + 0.5)
   Img.Top = IntpoLin(PosImg, 0.5, Dessus, NbImg + 0.5, Bas) - Img.Height / 2
   Img.Left = Gauche + (Largeur - Img.Width) / 2
   End Sub
Function IntpoLin(ByVal X As Double, ByVal X1 As Double, ByVal Y1 As Double, _
                                     ByVal X2 As Double, ByVal Y2 As Double) As Double
   IntpoLin = Y1 + (Y2 - Y1) * (X - X1) / (X2 - X1)
   End Function
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
148

Statistiques des forums

Discussions
314 450
Messages
2 109 719
Membres
110 551
dernier inscrit
Khyolyanna