Utilisation de range / shape :votre avis

T

Tom

Guest
Bonjour,
Je débute sur excel et j'aimerai avant d'aller trop loin avoir votre avis !
Voilà, sur une feuille que j'appelle d'une appli vb je voudrai faire apparaitre une image !
Je souhaiterai avant de la faire apparaitre, m'assurer qu'il n'y en pas pas déjà et si c'est le cas l'enlever.
Mon intérrogation porte sur comment déclarer cette image ?
Me faut-il déclarer un 'range', un 'shape', ou bien une 'picture' ?
Aujourd'hui j'arrive à afficher cette image avec ce code :
Code:
Dim s As Excel.Shape
Set s = Feuille.Shapes.AddPicture(SLogo, msoFalse, msoCTrue, 0, 0, 0, 0) '.Name ' = 'monimage'
    With s
        .LockAspectRatio = msoFalse
        .Top = Range('d4').Top
        .Left = Range('d4').Left
        .Height = Range('d4:d7').Height
        .Width = Range('d4:f4').Width
    End With
Mais je n'arrive pas à 'tester' pour eventuellemtn effacer cette image !!!
Merci pour vos conseil ou suggestions ;)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour tom, bonjour le forum,

Je suppose que les variables Feuille et SLogo ont été déclarées et définies auparavant ou bien que Feuille c'est le (Name) de ton onglet... Je te propose alors cette solution :


Dim s As Shape

On Error GoTo suite 'en cas d'erreur va à la balise 'suite'
Feuille.Shapes('monimage').Select 'sélectionne l'image 'monimage' (provoque une erreur si elle n'existe pas)
Selection.Delete 'supprime l'image 'monimage'

suite: 'balise
Set s = Feuille.Shapes.AddPicture(SLogo, msoFalse, msoCTrue, 0, 0, 0, 0)
With s
.Name = 'monimage' 'nomme l'image
.LockAspectRatio = msoFalse
.Top = Range('d4').Top
.Left = Range('d4').Left
.Height = Range('d4:d7').Height
.Width = Range('d4:f4').Width
End With

Message édité par: Robert, à: 21/04/2006 17:28
 
T

Tom

Guest
Mille merci robert, désolé de n'avoir pu me connecter plus tôt.
Bon, j'ai un souci avec la formule proposée car en nommant mon image c'est bien mais quant tu ouvres le document, forcement les noms donnés aux shapes ne sont plus connus donc on trouve pas d'image même si elle est tj là !!!? suis-je clair :S
Donc si tu veux, ca tombe tj en erreur suivant ton code.
Ne pourrais-je pas désigner uunn 'range' dans lequel je met cette image et faire un 'clear' ou qlq chose comme ca !?
Thanks
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Tom, bonjour le forum,

Tiens c'est nouveau ça... Pourquoi que le nom de l'image disparaît ???

En tous cas chez moi ça marche impec. Il faudrait que tu m'expliques... De toutes manières tu ne peux pas attribuer une image à une plage (Range) car celle-ci est posée dessus même si elle a la même dimension. Effacer la range ne supprimera jamais l'image posée dessus.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Tom, mon Cher Robert, le Forum

Je pense qu'il faut faire attention aux arguments de la méthode AddPicture.

En Effet :
expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
Selon le passage d'argument, on pourrait avoir des surprises.

Sinon sans se soucier du nom, je propose ceci :


Const Slogo As String = 'C:\\\\\\\\Documents and Settings\\\\\\\\ThierryXLD\\\\\\\\Mes documents\\\\\\\\Mes images\\\\\\\\LogoXLD.gif'

Sub InsertLogo()
Dim ObjSH As Shape

Leon
'Le Nettoyeur !!! lol

Set ObjSH = Feuille.Shapes.AddPicture(Slogo, False, True, 0, 0, 0, 0)
   
With ObjSH
        .Name = 'MonImage'
        .LockAspectRatio = msoFalse
        .Top = Range('d4').Top
        .Left = Range('d4').Left
        .Height = Range('d4:d7').Height
        .Width = Range('d4:f4').Width
   
End With


End Sub

Sub Leon()
Dim WS As Worksheet
Dim ObjShape As Shape

Set WS = Feuille

For Each ObjShape In WS.Shapes
   
With ObjShape
       
If .Type = msoPicture Then
               
'Pour Tester
                MsgBox .Name & ' Will be killed soon'
            .Delete
       
End If
   
End With
Next


End Sub

Mais attention plus qu'aucune 'Shape' 13 (Picture) ne subsistera après passage...


Bonne Soirée
[ol]@+Thierry[/ol]
 

Discussions similaires