logique de syntaxe vba

lerogertroutman

XLDnaute Junior
Bonjour à tous,

Le Premier code fonctionne, mais pas le second. Une âme charitable peut-elle m'expliquer pourquoi ?
Code:
Dim MaVar As Integer

MaVar = Range("A1").Row
MsgBox MaVar
:)

Code:
Dim MaVar As Integer

MaVar = Range("A1")
MsgBox MaVar.Row
:(

Par avance merci,
Le Roger
 

Pierrot93

XLDnaute Barbatruc
Re : logique de syntaxe vba

Bonjour Roger, suistrop

pour que ton 2ème code fonctionne, il faudrait déclarer ta variable en type de donnée "range" :

Code:
Dim MaVar As Range
Set MaVar = Range("A1")
MsgBox MaVar.Row

en l'état dans ton code, comme tu n'avais pas précisé la propriété à utiliser, il renvoyait dans ta variable la propriété par défaut, c'est à dire pour ton cas la valeur de la cellule...

bon après midi
@+
 

Bigfish

XLDnaute Occasionnel
Re : logique de syntaxe vba

Salut,

Range("A1") est un objet de la colection range, un peu comme dans la realité, une boite est un objet. Une boite peu contenir d'autre chose, peu avoir differente propriété comme: sa couleur, sa forme, sa position, etre verrouilée etc.

donc je reprends, range("a1") est un objet alors que row est une propriété de l'objet range. Cette propriété renvois la position en numero de ligne de l'objet range au quel on l'applique.

Ce que tu doits savoir:

Une varialble une fois typée, c'est a dire que l'on lui a attribuée ce qu'elle a le droit de contenir, ne peu donc contenir que le type spécifié. Par exemple:

Dim MaChaine As String
Ici MaChaine ne peu contenir que des chaine de caracteres.

Dim MesCellules As Range
Ici MesCellules ne peu contenir que des objets de la collection range.

une exception toute fois qui est le type Variant (qui est a eviter d'ailleurs) , et qui accept n'importe quel type de valeur ou d'objet.

pour attribué une valeur a une variable de type valeur (long, Integer, String etc)il suffit de faire

Dim MaValeur As Long
MaValeur=10

pour une variable typée objet (Range, Worksheet, Object etc) il faut ajouter l'instruction set:

Dim MaCellule As Range, Ligne As Long
Set MaCellule=Range("A1")
Ligne=MaCellule.Row
Msgbox Ligne

Si tu as besoin de précision n'hesite pas
A+
 

lerogertroutman

XLDnaute Junior
Re : logique de syntaxe vba

Bonjour suistrop, Pierrot, Bigfish,

Merci à tous les trois, je me demande comment j'ai fait jusqu'à présent sans avoir compris ça (En fait je sais : je n'ai pas fait grand chose).

Bigfish, c'est vraiment sympa ton explication. Non seulement elle a achevé de me faire comprendre le fonctionnement des variables, ce qu'est une variable typée objet, ce qu'est une collection, etc. mais elle m'a en outre fait comprendre quand utiliser SET (jusqu'à présent je l'utilisais pour tout et n'importe quoi, selon... mon humeur).

Bref, j'étais dans le brouillard, tu fus ma lanterne ;)

Ce qui induit en erreur, c'est que vba semble tolérer certains écarts, comme ici :
Code:
Dim MaVar As Integer
MaVar = Range("A1").Row
MsgBox MaVar


Mais au fait, quand utilise-t-on une variable typée Object ?

Merci encore !

Le Roger
 

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 224
dernier inscrit
Brilma