logique de syntaxe vba

  • Initiateur de la discussion Initiateur de la discussion lerogertroutman
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

lerogertroutman

Guest
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
 
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
@+
 
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+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
11
Affichages
408
Réponses
4
Affichages
739
Retour