Différence entre "Obj". et "Obj.Object"

Chrige

XLDnaute Occasionnel
Bonjour à tous

Il y a 8 jours, suite à ma demande de simplification de ma macro me permettant de paramétrer les propriétés de boutons de commande, ChTi160 à utiliser ce bout de code :

Code:
            Obj.Top = 40
            Obj.Width = 20
            Obj.Height = 20
            Obj.Left = Gauche
            Obj.Object.BackColor = Clr
            Obj.Object.Caption = ""

- En 1er
j'aimerai comprendre ce qui différencie Obj. de Obj.Object ?
Pourquoi certaines propriétés nécessitent l'un et pas l'autre ?

- En second, j'aimerai savoir si pour gérer toutes les propriétés de boutons
C'est nécessairement l'un de ces 2 codes ou si il y a encore d'autres ?

Si quelqu'un peut m'apporter la réponse ?
Merci d'avance

A+
 

Dranreb

XLDnaute Barbatruc
Bonjour à tous.
Un début d'explication donné ici.
Dans une feuille vierge je place juste un bouton ActiveX puis j'exécute ce code :
VB:
Sub test()
Dim Shp As Shape
Set Shp = ActiveSheet.Shapes(1)
MsgBox TypeName(Shp) & vbLf _
   & TypeName(Shp.OLEFormat) & vbLf _
   & TypeName(Shp.OLEFormat.Object) & vbLf _
   & TypeName(Shp.OLEFormat.Object.Object)
End Sub
Ça affiche l'enchainement suivant des types d'objets des propriétés successives :
Shape
OLEFormat
OLEObject
CommandButton

Edit. La raison fondamentale de tous ces objets intermédiaire c'est qu'une feuille de calcul n'est pas un support naturel pour des graphiques, formes dessinées où quoi que ce soit d'autre que des cellules.
Il faut donc que l'objet Worksheet qui la représente soit muni d'un certain nombre de collections contenant un nombre limité d'objets supports à vocations assez générales pouvant supporter à leur tour des objets de plus en plus spécifiques. Un UserForm, lui, contient seulement des Control pouvant directement être des CommandButton. Ce n'est pas le cas d'un Shape.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Dranreb

C'est vrai que c'est pas forcément intuitif à coder
exemple
Code:
Sub Test_CommandButtons()
Dim btn As OLEObject, Nom$, shp As Shape
For Each btn In ActiveSheet.OLEObjects
    Nom = btn.name
    If btn.OLEType = xlButtonOnly And InStr(Nom, "CommandButton") > 0 Then
    Set shp = ActiveSheet.Shapes(Nom)
        With shp
            .Height = 15: .Width = 15
            With .OLEFormat.Object.Object
            .BackColor = RGB(160, 78, 56): .Caption = vbNullString
            End With
        End With
    End If
Next
End Sub
 

Chrige

XLDnaute Occasionnel
Bonjour Dranreb, Stapple, Le Forum

Je vous remercie pour ces explications
Je comprends mieux les différences entre OLE, OLE.Object, OLE.Object.Object

Mais malheureusement je ne comprends toujours pas pourquoi je dois utiliser ?
Obj. Pour la propriété .Left
Et
Obj.Object Pour la propriété .BackColor.


A+
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Parce que les Left, Top, Width et Height sont des propriété basiques de tout objet dessiné, et sont donc présentes dans l'objet support à caractère général tandis que BackColor est une propriété spécifique de l'objet du type particulier supporté en l'occurrence et désigné par la propriété Object de l'objet support.
Vous pouvez trouver les propriétés et méthodes des objets dans l'explorateur d'objets
 
Dernière édition:

Chrige

XLDnaute Occasionnel
Re,
Merci pour cette précision, maintenant c'est clair pour moi.

En qui concerne ma deuxième question :
- En second, j'aimerai savoir si pour gérer toutes les propriétés de boutons
C'est nécessairement l'un de ces 2 codes ou si il y a encore d'autres ?
Je suppose que la réponse est donc : Oui, nécessairement l'un de ces 2 codes ?

A+
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@Chrige
Précisions
Obj "n'appartient pas à VBA", c'est Chti160 qui a choisit ce nom comme variable dans son code
Dim Obj As OLEObject
Il aurait pu écrire
Dim CmB As OLEObject
et dans ce cas le code aurait été
CmB.Object.BackColor
etc..
 

Chrige

XLDnaute Occasionnel
Re,
Zut alors, que je suis bête !
Je n'ai pas fait attention
C'est vrai que "Obj" était très orienté Object, d'où ma gaffe :confused:
Mais j'aurai du faire attention !!
Cela ne m'étonne pas que je n'avais pas trouvé la réponse sur internet
Maintenant tout est limpide
Merci encore à vous deux
A+