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

[Résolu]
Signaler
Messages postés
4
Date d'inscription
mercredi 23 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2009
-
Messages postés
4
Date d'inscription
mercredi 23 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2009
-
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

Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
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+
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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]
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
46
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) 
Messages postés
4
Date d'inscription
mercredi 23 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2009

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
Messages postés
221
Date d'inscription
mercredi 9 avril 2003
Statut
Membre
Dernière intervention
13 décembre 2009
1
[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 !
Messages postés
4
Date d'inscription
mercredi 23 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2009



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