[VBA-2003] Déclaration feuille

Le
Péhemme
Bonjour à tous,

Pourquoi, dans la macro qui suit, quand la feuille Sh1 est déclarée en
Worksheet, le bouton "CommandButton1" n'est pas reconnu, tandis que si cette
feuille est déclarée sans type (Variant de fait) le même "CommandButton1"
est reconnu ?
Merci d'avance
Michel

Sub test_01()
Dim Sh1 'As Worksheet
Set Sh1 = Worksheets("Accueil")

If [b2] = "" Then
[b2] = "Bonjour"
With Sh1.CommandButton1
.Caption = "Efface"
.ForeColor = &HFF0000
.BackColor = &HFF00&
End With
Else
[b2] = ""
With Sh1.CommandButton1
.Caption = "Bonjour"
.ForeColor = &HFF00&
.BackColor = &HFF0000
End With
End If
Set Sh1 = Nothing
End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #17576901
Et pour répondre au Pourquoi ?

Quand tu déclares le type d'une variable comme dans
Dim Sh1 As Worksheet

À chaque fois que tu utilise le "point" suivant le nom de
la variable déclarée, Excel te propose une liste déroulante des
propriétés et méthodes appartenant à ce type de variable.
Comme le type de la variable est connu, excel est capable
de vérifier au moment de l'écriture du code et non à l'exécution
si oui ou non, la propriété ou la méthode fait vraiment parti de
la classe objet. À cet égard, un commandButton n'est pas
une propriété ou une méthode associée à un objet "Worksheet" mais
plutôt un "objet hiérarchisé" qui peut se retrouver dans une feuille.
Le "point" entre Sh1 et commandButton1 fait référence à une hié-
rarchie d'objet plutôt qu'à une méthode ou propriété de l'objet Worksheet.

Quand tu ne déclares pas le type d'objet, Excel doit attendre
l'exécution du code ligne par ligne pour savoir à quoi la variable
fait référence. La ligne de code est alors possible car, après
qu'il a fait l'analyse de la ligne de code, il se rend compte que
celle-ci fait référence à un objet hiérarchisé présent et
appartenant à la feuille.

Voici 3 autres syntaxes que tu peux utiliser :

Dim Sh1 As Worksheet
Set Sh1 = Worksheets("Accueil")

x = Worksheets(Sh1.Name).CommandButton1.Caption
x = Sh1.Shapes("CommandButton1").OLEFormat.Object.Object.Caption
x = Sh1.OLEObjects("CommandButton1").Object.Caption




"Péhemme"
Bonjour à tous,

Pourquoi, dans la macro qui suit, quand la feuille Sh1 est déclarée en
Worksheet, le bouton "CommandButton1" n'est pas reconnu, tandis que si cette
feuille est déclarée sans type (Variant de fait) le même "CommandButton1"
est reconnu ?
Merci d'avance
Michel

Sub test_01()
Dim Sh1 'As Worksheet
Set Sh1 = Worksheets("Accueil")

If [b2] = "" Then
[b2] = "Bonjour"
With Sh1.CommandButton1
.Caption = "Efface"
.ForeColor = &HFF0000
.BackColor = &HFF00&
End With
Else
[b2] = ""
With Sh1.CommandButton1
.Caption = "Bonjour"
.ForeColor = &HFF00&
.BackColor = &HFF0000
End With
End If
Set Sh1 = Nothing
End Sub
Péhemme
Le #17578571
Merci Denis pour ces explications parfaitement claires.
En plus, c'est logique et... j'ai tout compris (enfin je crois).
Bon dimanche à toi et
Bien amicalement
Michel

"michdenis" news:

Et pour répondre au Pourquoi ?

Quand tu déclares le type d'une variable comme dans
Dim Sh1 As Worksheet

À chaque fois que tu utilise le "point" suivant le nom de
la variable déclarée, Excel te propose une liste déroulante des
propriétés et méthodes appartenant à ce type de variable.
Comme le type de la variable est connu, excel est capable
de vérifier au moment de l'écriture du code et non à l'exécution
si oui ou non, la propriété ou la méthode fait vraiment parti de
la classe objet. À cet égard, un commandButton n'est pas
une propriété ou une méthode associée à un objet "Worksheet" mais
plutôt un "objet hiérarchisé" qui peut se retrouver dans une feuille.
Le "point" entre Sh1 et commandButton1 fait référence à une hié-
rarchie d'objet plutôt qu'à une méthode ou propriété de l'objet Worksheet.

Quand tu ne déclares pas le type d'objet, Excel doit attendre
l'exécution du code ligne par ligne pour savoir à quoi la variable
fait référence. La ligne de code est alors possible car, après
qu'il a fait l'analyse de la ligne de code, il se rend compte que
celle-ci fait référence à un objet hiérarchisé présent et
appartenant à la feuille.

Voici 3 autres syntaxes que tu peux utiliser :

Dim Sh1 As Worksheet
Set Sh1 = Worksheets("Accueil")

x = Worksheets(Sh1.Name).CommandButton1.Caption
x = Sh1.Shapes("CommandButton1").OLEFormat.Object.Object.Caption
x = Sh1.OLEObjects("CommandButton1").Object.Caption


Publicité
Poster une réponse
Anonyme