VBA : savoir si une variable objet a été correctement affectée

dionys0s

XLDnaute Impliqué
Salut le forum

j'ai peur que cette fois-ci je ne trouve pas de réponse : je souhaite pouvoir tester mes variables objet. C'est à dire que j'aimerais savoir si, dans l'exemple d'un Range, ma variable a bien été comme ceci :

VB:
Set MaPlag = UnClasseur.UneFeuil.Cells(i, j)

et non pas comme cela :

VB:
Set MaPlag = Cells(i, j)

Donc j'avais imaginé que je pourrais avoir une fonction qui ressemblerait à ceci :

VB:
Public Function VarObjetOK(ByRef UneVar As Object) As Boolean

Select Case UneVar.Type
 Case Range
  'test si les 2 parents (Worksheet et Workbook) ont été affectés par l'utilisateur ou par l'interprétateur
 Case Worksheet
  'test si le parent (Workbook) a été affecté par l'utilisateur ou par l'interprétateur
End Select

End Function

Mais j'ai parcouru les propriétés et méthodes de variables Object et n'ai rien trouvé qui m'ait mis sur la voir, d'où ce post.

D'avance merci pour votre aide

Dionys0s
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : savoir si une variable objet a été correctement affectée

Bonjour,

bah... comprends pas trop le but.... de toute façon tu sais bien l'instruction que tu as écrite pour initialiser ta variable.... sans plus de détails, difficile d'en dire plus...

bon après midi
@+
 

dionys0s

XLDnaute Impliqué
Re : VBA : savoir si une variable objet a été correctement affectée

Bonjour Pierrot,

je mets en place un module de fonctions et macros toutes entièrement génériques, dont certaines reçoivent en paramètres des objets, principalement classeurs, onglets et plages.

Du coup quand moi je fais appel à ces fonction, je fais effectivement attention à ne donner en paramètres que des variables affectées correctement, mais ce module sera utile à tout un tas de gens, dont certains ont une expérience bien moindre, et a qui il pourra arriver d'envoyer en paramètre une Range sans préciser son et ses parents, ce que j'aimerais pouvoir tester et signaler dès le début de la fonction.

En gros, si une fonction reçoit un range qui n'est pas dimensionné correctement, la macro s'arrête. C'est l'idée.
 

Pierrot93

XLDnaute Barbatruc
Re : VBA : savoir si une variable objet a été correctement affectée

Re,

bon bah... pas compris, de toute façon un "range" aura toujours un parent "worksheet" et lui même un parent "workbook"... vois pas trop comment il pourrait en être autrement....
 

dionys0s

XLDnaute Impliqué
Re : VBA : savoir si une variable objet a été correctement affectée

Re,

oui, mais uniquement parce que si l'utilisateur a déclaré une variable range sans préciser son classeur, par défaut c'est la feuille active du classeur actif qui est son parent. J'aurais souhaité savoir si les variables objet, ou leur parent, ont une propriété du genre Créateur, qui permettrait de faire la distinction entre une variable affectée proprement et une variable déclarée "salement".
 
G

Guest

Guest
Re : VBA : savoir si une variable objet a été correctement affectée

Bonjour,

Je ne comprends pas non plus, comme mon petit camarade Pierrot:)

Une variable objet est ou non initialisée. Proprement ou salement n'existent pas en VBA! A part Range.Dirty mais qui n'a rien à voir avec la demande.

Vois pas bien non plus la finalité de tout ceci.

A+
 
Dernière modification par un modérateur:

dionys0s

XLDnaute Impliqué
Re : VBA : savoir si une variable objet a été correctement affectée

Re,
Bonjour Hasco

Je m'explique mal je pense

On va dire que j'ai une Sub appelée, peu importe laquelle, par exemple :
VB:
Public Sub UneSubAppelee(ByRef UnePlag as Range)

UnePlag.ClearContents

End Sub

et une Sub appelant la Sub appelée :
VB:
Public Sub UneSubAppelante()

'dans le cas suivant : la sub appelée risque de faire nawak puisque la personne qui a codé a oublié de préciser le classeur et l'onglet, qui seront donc Activeworkbook et Activesheet
Call UneSubAppelee(Cells(1,1))

'dans le cas suivant, l'appel est maîtrisé :
Call UneSubAppelee(Thisworkbook.Sheets(1).Cells(1,1))

End Sub

Si là je n'arrive pas à me faire comprendre, je déclare forfait.

Merci d'avoir patienté jusque là en tout cas.
 
G

Guest

Guest
Re : VBA : savoir si une variable objet a été correctement affectée

Re,

Code:
[COLOR=#008000]puisque la personne qui a codé a oublié de préciser le classeur et l'onglet, qui seront donc Activeworkbook et Activesheet[/COLOR]

La personne qui a codé? euh, c'est toi non?!

Ou alors dans subAppelée quelque chose comme:

Code:
If Not Plag.Parent Is LeClasseur.LaBonneFeuille Then 
    MsgBox "Pas bonne Feuille"
    Exit Sub
End if

If Not Plag.Parent.Parent Is  LeBonClasseur Then
   MsgBox "Pas bon classeur"
   Exit Sub
End IF

A+
 

dionys0s

XLDnaute Impliqué
Re : VBA : savoir si une variable objet a été correctement affectée

Re,

Non ce n'est pas forcément moi le codeur.

je mets au point un module de fonctions et macros totalement génériques qui seront utilisées par d'autres codeurs, pas forcément rigoureux. Et donc j'aurais voulu savoir si la propriété .Parent de variables plage et onglet possédait une propriété renseignant la manière avec laquelle la variable fille a été affectée :
- proprement : le codeur écrit un truc du genre Set MaPlag = UnClasseur.UneFeuille.Cells(i, j)
- salement : Set MaPlag = Cells(i, j)

Et comme il s'agit d'un module de fonctions et subs génériques à 100%, je ne peux pas connaître "la bonne feuille" d'une plage ou "le bon classeur" d'un onglet dans la sub ou fonction générique.
 
G

Guest

Guest
Re : VBA : savoir si une variable objet a été correctement affectée

Re,

Ce sera à l'utilisateur de tes macros et fonctions de savoir ce qu'il fait et comment. A toi de l'informer par quelque moyen que ce soit. Et à gérer les possibilités d'erreurs.

Mais là on parle dans le théorique. On ne sait pas concrètement de quoi il s'agit. Alors je m'arrâterai là.

A+
 

Discussions similaires

Réponses
7
Affichages
349

Statistiques des forums

Discussions
312 215
Messages
2 086 322
Membres
103 178
dernier inscrit
BERSEB50