Passage d'un objet personnalisé dans une procédure

Résolu
ooEmixamoo Messages postés 4 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 24 septembre 2009 - 23 sept. 2009 à 13:10
ooEmixamoo Messages postés 4 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 24 septembre 2009 - 23 sept. 2009 à 14:06
Bonjour,

Je débute en VBA avec quelques notions de programmation objet et je suis face à un problème que je ne comprends pas.

J'ai déclaré une classe cServeur dans le code suivant je créer une instance de la classe que j'essaye de passer en paramètre

Sub main()

Dim doc_actif As Visio.Document
Set doc_actif = Visio.ActiveDocument    'reference au document

Dim page_active As Visio.Page
Set page_active = Visio.ActivePage        'reference a la page active


Dim Serveur As New cServeur

Ajouter.Show vbModal 'montrer le userform Ajouter et bloquer tant qu'il est actif
 fonction1 (Serveur)
End Sub


voici la procédure en question:

Sub fonction1(Serveur As cServeur)
MsgBox "fonction1"
Serveur.Constructeur = Ajouter.TextBox_constructeur
Serveur.Modele_Materiel = Ajouter.TextBox_modele



End Sub


Au lancement de la procédure main() j'ai le message d'erreur suivant :
Erreur d'exécution '438'
Propriété ou méthode non gérée par l'objet

Je ne vois pas d'où peut venir l'erreur, de plus si je transforme ma procédure en fonction aucun problème le code fonctionne.
Quelqu'un saurait il d'ou peut venir le problème?

Merci d'avance pour vos réponses

6 réponses

cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
23 sept. 2009 à 13:33
Salut,

Le problème vient des parenthèses.

En vb6/vba pour appeler une procédure on écrit soit :

fonction1 Serveur


Soit :

Call fonction1(Serveur)


Dans ton écriture, "fonction1 (Serveur)" les parenthèses n'ont pas le même rôle que celles qui servent à entourer les paramètres passés à une sub/fonction. Elles forcent l'interpreteur à évaluer l'expression.
Mais mon explication est un peu bancale, peut être quelqu'un d'autre saura détailler ou corriger ce que je te dis.

A+
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 sept. 2009 à 13:30
salut,

[i]Serveur.Constructeur = Ajouter.TextBox_constructeur
Serveur.Modele_Materiel = Ajouter.TextBox_modele/i

ces 2 syntaxes veulent dire que tu attribues AUX PROPRIéTéS Constructeur et Materiel les valeurs blabla

or ta classe n'a aucune propriété

de plus tes syntaxe Ajouter.... sont aussi sensées être des méthodes renvoyant un résultat, méthodes d'une instance de X nommée AJOUTER, est-ce que çà correspond bien à quelque chose?
(cette question parce que l'interprétation se fait de droite à gauche)

++
[hr]
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
23 sept. 2009 à 13:42
nos 2 explications se complètent Ayr

fonction1 ne renvoyant pas de résultat, c'est une procédure
(donc déjà on trouve un nom plus explicite )

et on l'appelle par
call procTest(serveur)

ou
procTest serveur



seules les fonctions peuvent être appelées avec des parenthèses, même si on ne récupère pas le résultat :
MsgBox (Me.Caption) 
0
ooEmixamoo Messages postés 4 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 24 septembre 2009
23 sept. 2009 à 13:45
Merci beaucoup Ayr effectivement ça marche mieux je le saurai pour la prochaine fois


PCPT je te remercie également pour ta réponse quelque précisions semblent nécessaires pour ceux qui auraient une question similaire:

Serveur.Constructeur = Ajouter.TextBox_constructeur
Serveur.Modele_Materiel = Ajouter.TextBox_modele

ces 2 syntaxes veulent dire que tu attribues AUX PROPRIéTéS Constructeur et Materiel les valeurs blabla

or ta classe n'a aucune propriété

Ma classe cServeur définit bien des propriétés via les méthodes Get et Let (enfin si j'ai bien compris)


de plus tes syntaxe Ajouter.... sont aussi sensées être des méthodes renvoyant un résultat, méthodes d'une instance de X nommée AJOUTER, est-ce que çà correspond bien à quelque chose?

Ajouter un userform (j'aurais du le préciser) j'ai apparemment accès au contenu des textboxs qui le composent avec cette syntaxe mais je ne saurais expliquer pourquoi.

Merci encore à tous les deux
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Ayr Messages postés 221 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 13 décembre 2009 2
23 sept. 2009 à 13:48
[quote=PCPT]fonction1 ne renvoyant pas de résultat, c'est une procédure
(donc déjà on trouve un nom plus explicite ) /quote

Absolument d'accord !
0
ooEmixamoo Messages postés 4 Date d'inscription mercredi 23 septembre 2009 Statut Membre Dernière intervention 24 septembre 2009
23 sept. 2009 à 14:06


PCPT a écrit

fonction1 ne renvoyant pas de résultat, c'est une procédure
(donc déjà on trouve un nom plus explicite )



Absolument d'accord !


De même, c'était pour mes test je sais c'est mal
0
Rejoignez-nous