Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Shapes, ShapeRange, DrawingObject ?

15 réponses
Avatar
galopin01
Bonjour,
J'ai quelques macros de ce genre que j'aimerai bien optimiser :

ActiveSheet.Shapes("Hold1").Select
Selection.ShapeRange.Fill.ForeColor.SchemeColor = 52
Selection.ShapeRange.Fill.BackColor.SchemeColor = 13

J'ai essayé quelques variations sur le thème de DrawingObject mais la bête
résiste !

Est-ce possible ? Avec quelle syntaxe ?
Merci.

A+

5 réponses

1 2
Avatar
galopin01
Bonsoir,

Effectivement la boucle n'était pas nécessaire et les deux propositions
fonctionnent correctement.
Finalement je vais opter pour cette syntaxe que je comprends bien :
Sh.Image1.Picture = Feuil1.DrawingObjects("Image" & a).Object.Picture

Mais je garde le OLEFormat.Object.Object en réserve en cas que...

Le type d'ojet ? Heu ça doit être des minis jpg ou png, je ne me rappelle
plus ils sont Insérés dans des Contrôles Images issues de la boite d'outils
Contrôle
Je les ai embarqués dans une feuille pour alléger un peu le paquet
cadeau...
Avec ces 200 lignes de codes en moins le classeur ne dépassera pas les 520
ko (au lieu de 650 !)
C'est magique !

Merci encore.

"Misange" a écrit dans le message de news:




Daniel.C a écrit :
Bonjour Misange.
Sais-tu quel est le type d'objet représenté par Image1 ?
(par ailleurs, je pense que la boucle est superflue...)
Cordialement.
Daniel


t'as farpaitement raison :-) lu trop vite
je retourne bronzer !

Misange migrateuse
http://www.excelabo.net
Avatar
Daniel.C
Je voulais parler du type d'objet VBA. Puisque ni DrawingObject, ni
OLEObject ne possède de propriété Picture.
Daniel

Bonsoir,

Effectivement la boucle n'était pas nécessaire et les deux propositions
fonctionnent correctement.
Finalement je vais opter pour cette syntaxe que je comprends bien :
Sh.Image1.Picture = Feuil1.DrawingObjects("Image" & a).Object.Picture

Mais je garde le OLEFormat.Object.Object en réserve en cas que...

Le type d'ojet ? Heu ça doit être des minis jpg ou png, je ne me rappelle
plus ils sont Insérés dans des Contrôles Images issues de la boite d'outils
Contrôle
Je les ai embarqués dans une feuille pour alléger un peu le paquet cadeau...
Avec ces 200 lignes de codes en moins le classeur ne dépassera pas les 520 ko
(au lieu de 650 !)
C'est magique !

Merci encore.

"Misange" a écrit dans le message de news:




Daniel.C a écrit :
Bonjour Misange.
Sais-tu quel est le type d'objet représenté par Image1 ?
(par ailleurs, je pense que la boucle est superflue...)
Cordialement.
Daniel


t'as farpaitement raison :-) lu trop vite
je retourne bronzer !

Misange migrateuse
http://www.excelabo.net
Avatar
michdenis
Bonjour Daniel,

| OLEObject ne possède de propriété Picture.

Ça mérite quand même un brin de réflection

Voici 3 procédures que tu peux placer dans le module
de la feuille où tu inséres tes images. Je te laisse
conclure !
;-)

'----------------------------------
Sub test()
Dim Pic As Picture
'Image de la commande insertion / image
Set Pic = Me.Shapes("Denis").OLEFormat.Object

With Pic
.Border
.BottomRightCell
.BringToFront
.Copy
.CopyPicture
.Creator
.Cut
.Delete
'ici une image ne peut pas avoir une propriété "picture"
'la shape est elle-même déjà une image.
'.../suite
End With

End Sub
'----------------------------------
Sub test1()
Dim Pic As Image
'Contrôle émanant de la barre d'outils Contrôle
Set Pic = Me.Shapes("Diane").OLEFormat.Object.Object
'ou on peut écrire :
Set Pic = Me.OLEObjects("Diane").Object
With Pic
' .BackColor
' .BackStyle
' .BorderColor
' .Picture 'C'est une propriété d'un objet OleObjects
'La collection OleObjects a plusieurs objets dont
'les "Images" qui elles ont une propriété "Picture"
'.../ suite
End With
End Sub
'----------------------------------
Sub Test3()
Dim Pic As Object
'Tu peux boucler sur toutes les images insérées
'dans la feuille à l'aide de la commande Insertion / image
'ou émanant de la barre d'outils Contrôle
'
For Each Pic In Pictures
a = a + 1
Cells(1, a) = Pic.Name
Cells(2, a) = TypeName(Pic)
Cells(3, a) = Pic.ShapeRange.Type
Next
End Sub
'----------------------------------




"Daniel.C" a écrit dans le message de groupe de discussion :
##
Je voulais parler du type d'objet VBA. Puisque ni DrawingObject, ni
OLEObject ne possède de propriété Picture.
Daniel

Bonsoir,

Effectivement la boucle n'était pas nécessaire et les deux propositions
fonctionnent correctement.
Finalement je vais opter pour cette syntaxe que je comprends bien :
Sh.Image1.Picture = Feuil1.DrawingObjects("Image" & a).Object.Picture

Mais je garde le OLEFormat.Object.Object en réserve en cas que...

Le type d'ojet ? Heu ça doit être des minis jpg ou png, je ne me rappelle
plus ils sont Insérés dans des Contrôles Images issues de la boite d'outils
Contrôle
Je les ai embarqués dans une feuille pour alléger un peu le paquet cadeau...
Avec ces 200 lignes de codes en moins le classeur ne dépassera pas les 520 ko
(au lieu de 650 !)
C'est magique !

Merci encore.

"Misange" a écrit dans le message de news:




Daniel.C a écrit :
Bonjour Misange.
Sais-tu quel est le type d'objet représenté par Image1 ?
(par ailleurs, je pense que la boucle est superflue...)
Cordialement.
Daniel


t'as farpaitement raison :-) lu trop vite
je retourne bronzer !

Misange migrateuse
http://www.excelabo.net
Avatar
Daniel.C
Bonjour et merci. Je n'aurais jamais trouvé ça tout seul ;-)
Daniel

Bonjour Daniel,

OLEObject ne possède de propriété Picture.



Ça mérite quand même un brin de réflection

Voici 3 procédures que tu peux placer dans le module
de la feuille où tu inséres tes images. Je te laisse
conclure !
;-)

'----------------------------------
Sub test()
Dim Pic As Picture
'Image de la commande insertion / image
Set Pic = Me.Shapes("Denis").OLEFormat.Object

With Pic
.Border
.BottomRightCell
.BringToFront
.Copy
.CopyPicture
.Creator
.Cut
.Delete
'ici une image ne peut pas avoir une propriété "picture"
'la shape est elle-même déjà une image.
'.../suite
End With

End Sub
'----------------------------------
Sub test1()
Dim Pic As Image
'Contrôle émanant de la barre d'outils Contrôle
Set Pic = Me.Shapes("Diane").OLEFormat.Object.Object
'ou on peut écrire :
Set Pic = Me.OLEObjects("Diane").Object
With Pic
' .BackColor
' .BackStyle
' .BorderColor
' .Picture 'C'est une propriété d'un objet OleObjects
'La collection OleObjects a plusieurs objets dont
'les "Images" qui elles ont une propriété "Picture"
'.../ suite
End With
End Sub
'----------------------------------
Sub Test3()
Dim Pic As Object
'Tu peux boucler sur toutes les images insérées
'dans la feuille à l'aide de la commande Insertion / image
'ou émanant de la barre d'outils Contrôle
'
For Each Pic In Pictures
a = a + 1
Cells(1, a) = Pic.Name
Cells(2, a) = TypeName(Pic)
Cells(3, a) = Pic.ShapeRange.Type
Next
End Sub
'----------------------------------




"Daniel.C" a écrit dans le message de groupe de
discussion : ##
Je voulais parler du type d'objet VBA. Puisque ni DrawingObject, ni
OLEObject ne possède de propriété Picture.
Daniel

Bonsoir,

Effectivement la boucle n'était pas nécessaire et les deux propositions
fonctionnent correctement.
Finalement je vais opter pour cette syntaxe que je comprends bien :
Sh.Image1.Picture = Feuil1.DrawingObjects("Image" & a).Object.Picture

Mais je garde le OLEFormat.Object.Object en réserve en cas que...

Le type d'ojet ? Heu ça doit être des minis jpg ou png, je ne me rappelle
plus ils sont Insérés dans des Contrôles Images issues de la boite d'outils
Contrôle
Je les ai embarqués dans une feuille pour alléger un peu le paquet
cadeau... Avec ces 200 lignes de codes en moins le classeur ne dépassera pas
les 520 ko (au lieu de 650 !)
C'est magique !

Merci encore.

"Misange" a écrit dans le message de news:




Daniel.C a écrit :
Bonjour Misange.
Sais-tu quel est le type d'objet représenté par Image1 ?
(par ailleurs, je pense que la boucle est superflue...)
Cordialement.
Daniel


t'as farpaitement raison :-) lu trop vite
je retourne bronzer !

Misange migrateuse
http://www.excelabo.net
Avatar
galopin01
Je note avec soin ces explications qui me rendront sans doute moins
nébuleuse l'utilisation des OLEObjects
A+

"michdenis" a écrit dans le message de news:
uKer%23a$
Bonjour Daniel,

| OLEObject ne possède de propriété Picture.

Ça mérite quand même un brin de réflection

Voici 3 procédures que tu peux placer dans le module
de la feuille où tu inséres tes images. Je te laisse
conclure !
;-)

'----------------------------------
Sub test()
Dim Pic As Picture
'Image de la commande insertion / image
Set Pic = Me.Shapes("Denis").OLEFormat.Object

With Pic
.Border
.BottomRightCell
.BringToFront
.Copy
.CopyPicture
.Creator
.Cut
.Delete
'ici une image ne peut pas avoir une propriété "picture"
'la shape est elle-même déjà une image.
'.../suite
End With

End Sub
'----------------------------------
Sub test1()
Dim Pic As Image
'Contrôle émanant de la barre d'outils Contrôle
Set Pic = Me.Shapes("Diane").OLEFormat.Object.Object
'ou on peut écrire :
Set Pic = Me.OLEObjects("Diane").Object
With Pic
' .BackColor
' .BackStyle
' .BorderColor
' .Picture 'C'est une propriété d'un objet OleObjects
'La collection OleObjects a plusieurs objets dont
'les "Images" qui elles ont une propriété "Picture"
'.../ suite
End With
End Sub
'----------------------------------
Sub Test3()
Dim Pic As Object
'Tu peux boucler sur toutes les images insérées
'dans la feuille à l'aide de la commande Insertion / image
'ou émanant de la barre d'outils Contrôle
'
For Each Pic In Pictures
a = a + 1
Cells(1, a) = Pic.Name
Cells(2, a) = TypeName(Pic)
Cells(3, a) = Pic.ShapeRange.Type
Next
End Sub
'----------------------------------




"Daniel.C" a écrit dans le message de groupe de
discussion :
##
Je voulais parler du type d'objet VBA. Puisque ni DrawingObject, ni
OLEObject ne possède de propriété Picture.
Daniel

Bonsoir,

Effectivement la boucle n'était pas nécessaire et les deux propositions
fonctionnent correctement.
Finalement je vais opter pour cette syntaxe que je comprends bien :
Sh.Image1.Picture = Feuil1.DrawingObjects("Image" & a).Object.Picture

Mais je garde le OLEFormat.Object.Object en réserve en cas que...

Le type d'ojet ? Heu ça doit être des minis jpg ou png, je ne me rappelle
plus ils sont Insérés dans des Contrôles Images issues de la boite
d'outils
Contrôle
Je les ai embarqués dans une feuille pour alléger un peu le paquet
cadeau...
Avec ces 200 lignes de codes en moins le classeur ne dépassera pas les
520 ko
(au lieu de 650 !)
C'est magique !

Merci encore.

"Misange" a écrit dans le message de news:




Daniel.C a écrit :
Bonjour Misange.
Sais-tu quel est le type d'objet représenté par Image1 ?
(par ailleurs, je pense que la boucle est superflue...)
Cordialement.
Daniel


t'as farpaitement raison :-) lu trop vite
je retourne bronzer !

Misange migrateuse
http://www.excelabo.net





1 2