Visual Basic 5.0

Signaler
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009
-
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009
-
Bonjour à tous,

Je suis actuellement en train de coder un automate cellulaire qui est censé simuler l'expension urbaine d'une Ville.


Pour cela j'ai créer un tablea à 2 dimension, dont chaque case de ce tableau est un objet de type Cellule.

Ma classe Cellule est défini par les attributs suivants :

Colour : Variant
axex:Variant
axey:Variant
Nom:String

Ma classe ne possède pas encore de methode.

Le 1er souci que je rencontre est lors de la création d'une procedure qu prend en parametre une des cases du tableau, donc un objet Cellule !

Les cases de mon tableau( Ces fameux objets Cellule) sont modifié par l'utilisateur à l'aide d'une interface graphique.


Cette procedure est censé prendre en parametre une des cellules du tableau et effectuer des calculs sur les nouveaux attributs de ces cellules.


Mais je ne sais pas si cette procedure doit être une methode déclaré dans ma classe ou si au contraire elle doit être codé dans la partie Form ( avec les procedures évenementielles) ??

La procedure en question se nomme "echelle"

J'ai testé avec les 2 facons mais je ne sais pas comment appeler ma procedure: Dois-je écrire :

echelle("la cellule en question")
ou
"la celulle en question".echelle ??


Je suis beaucoup trop perdu :/


j'ai besoin de votre aide.

Merci d'avance !

13 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonsoir,

S'il s'agit d'une procédure (donc une sub) et non d'une fonction et qu'elle a pour nom echelle et qu'elle attend un paramètre la_cellule, ce sera ;
echelle la_cellule

Sans parenthèses, donc.
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Merci de cette réponse rapide !!

J'ai commenecr par initialiser mon tableau qui se nomme tableaucalcul:

Private Sub init_Click()
Dim m, n, i, j As Single

For m = 0 To hauteur Step 1
For n = 0 To largeur Step 1
Set tableaucalcul(m, n) = New cellule
Next n
Next m
End Sub


Ensuite le crée une instance de ma Classe :

Private Sub test_Click()
Set celluletest = New cellule
celluletest.colour = 70
celluletest.colour = celluletest.colour + 1
Set tableaucalcul(3, 3) = celluletest
End Sub

Et là je donne le code de la procedure cellule codé à lexterieur de ma classe :

Private Sub echelle(cellule As Object)

Dim Nb As Variant
Nb = cellule.colour

End Sub

Je veut donc ensuite appeler la fonction echelle pour qu'elle s'applique a mon objet celluletest posé dans tableaucalcul(3,3)

Mais la aucune syntaxe ne marche :
echelle.celluletest
VB me dit que l'objet ne gere pas cette methode (normal c'en est pas une, c'ets juste une procedure !)
echelle(celluletest)
Pareil :/



Vraiment bloqué :(
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
A quoi peut-il servir de poser une question, si on ne lit même pas la/les réponse(s) et qu'on n'en tient donc aucun compte ?

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Disons que si je n'en ai pas tenu compte c'est tout simplement peut être que je n'ai pas compris votre réponse malgré le fait que je l'ai lu. Et puis personnelement je pensais avoir fait ce que vous avez proposez en testant la syntaxe que vous avez dite :
echelle.celluletest ce qui correspond à votre réponse que je cite :
"echelle la_cellule

Sans parenthèses, donc."

Sans parenthèses, et en mettant un point.

Merci de clarifier votre réponse s'il vous semble que je l'ai encore mal comprise.

Cordialement
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Pardon ?
Qu'y a--t-il donc à "comprendre" ?
Je t'ai dit d'appeler ta procédure echelle (qui attend un paramètre) par cette syntaxe :

echelle la_cellule


où la_cellule est à remplacer par ton paramètre à toi ...
Que faudrait-il "clarifier" de plus ?

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Il est évident qu'en écrivant echelle celluletest dans mon cas ca ne marche pas.C'est pour cela que je navais pas compris. Je l'ai testé et ca ne marche comme même pas...

Peut être est-ce du à la maniere avec laquel j'ai codé ma procedure echelle? A savoir :

Private Sub echelle(cellule As Object)

Dim Nb As Variant
Nb = cellule.colour

End Sub

Est-ce bien la bonne syntaxe pour donner à la procedure un parametre de type Objet? Ma classe ici est nommée "cellule".


Je te remercie pour toute ton aide .

Cordialement
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Cà, ami, c'est une autre paire de manches....
Ta question, telle que posée, était comment appeler une procédure Pr utilisant un paramètre Pa en VB6
La réponse (à cette question) est :
Pr Pa
Le reste (le fonctionnement de ta procédure, la justesse du paramètre qu'elle utilise et de son typage... est autre chose !
Or c'est toi qui affirme ceci :
procedure qu prend en parametre une des cases du tableau, donc un objet Cellule

et :

dont chaque case de ce tableau est un objet de type Cellule

sans nous montrer comment est défini un objet de type cellule
D'ailleurs, si ce type d'objet avait été défdini, explique-nous alors pourquoi :
Private Sub echelle(cellule As Object)


et pas :
Private Sub echelle(cellule As cellule)

et on s'interrogerait d'ailleurs sur l'ambiguîté résultant du nom d'un paramètre identique à celui de son type !
Voilà ...
___________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

J'ai deja dit comment ma classe cellule étai defini :

"Ma classe Cellule est défini par les attributs suivants :

Colour : Variant
axex:Variant
axey:Variant
Nom:String

Ma classe ne possède pas encore de methode."

Pour la procedure je confirme bien ce que tu as compris elle prend bien une cellule en parametre d'entrée :
j'ai testé avec echelle( celluleA as Cellule) mais rien y fait :/

Donc dans ce cas je ne vois pas ou est mon erreur en faite :/

Je fonctionne sous Visual Basic 5.0 en fait.

je me suis dit peut-être que la procedure echette doit être déclaré en tant que méthode pour pouvoir agir sur les parametres de la classe cellule.

Du coup j'ai essayé en la codant dans la partie méthode mais rien y fait ;/

Désolé je n'y arrive vraiment pas avec ce langage pourtant plus simple que du Pascal avec lazarus ;/


Si tu peut encore m'aider je t'en serais reconnaissant.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
J'y perds un peu mon lation...
A tout hasard : 2 questions :
1) d'où (exactement) appelles-tu la sub echelle ?
2) où (exactemùent) se trouve la sub echelle ?

Question subsidiaire : "ça ne marche pas" comment, lorsque tu appelles ta procédure comme je te l'ai dit ? (Quel symptome ou message d'erreur) ?

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Alors 1ere question :
la procdure echelle est appelé suite à un click sur un bouton particulié présent sur un la form1, ainsi la procedure est appelé dans la partie code de Form1

2eme question :
la procdure echelle se situe dans le module de la classe Cellule

Pour effectuer un test sur la procedure j'ai ajouter un bouton (test) qui me permet de generer une instance de la classe cellule :

Private Sub test_Click()

Set celluletest = New cellule
celluletest.colour = 70
Set tableaucalcul(3, 3) = celluletest

End Sub

J'ai crée aussi par la mêem occasion un boutton qui va appeler la procedure echelle en prenant comme parametre d'entrée 'celluletest" Ce boutton se nomme EchTest :

Private Sub EchTest_Click()

echelle celluletest
End Sub

N'hésite pas à me demander les autres bout de code si tu veut vérifier ^^'


L'erreur est : ""Procedure sub ou fonction non définie "
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Euh je voudrais bien savoir comment tu fait pour ajouter des bouts de code Visual basic dans tes réponses ce sera peut-être plus clair
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Ta procédure n'est pas appelable depuis ta form, car tu l'as tout simplement définie comme private ...
pour mémoire :

Private Sub echelle(cellule As Object)

Dim Nb As Variant
Nb = cellule.colour

End Sub

il te faut la définir Public et non Private

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
8
Date d'inscription
jeudi 2 novembre 2006
Statut
Membre
Dernière intervention
28 décembre 2009

Oui j'avais deja testé avec Public et Private ca ne fonctionne hélas toujours pas. Visual me disait tout le temps qu'il attendait un objet...

Alors j'ai testé une nouvelle chose qui fonctionne maintenant:

J'ai defini ma methode echelle plus dans ma classe mais plutot dans ma forme :
 Public Sub echelle(celluleA As Cellule)
Nb = celluleA.colour

End Sub


et la variable Nb est dimension Public dans la partie superieur de ma forme, car je ne souhaite pas que cette variable soit locale, je veut y acceder même a l'exterieur de ma procedure !

J'appelle donc ma procedure echelle suite au click d'un bouton de ma form, ce qui se traduit par :

  
Public Sub Command1_Click()
    Call echelle(celluletest)
End Sub

Et là tout va bien, dans le panneau inferieur je tape "?Nb" et il me retourne bien la valeur attendu !


Mais par contre ceci était juste un petit test ... le cas réel de mon programme est plus complexe !

En effet ma classe cellule n'est pas juste composé d'un attribut colour, elle possède plusieurs attributs que j'ai créer a l'aide du generateur de classe de Visual Basic.


Ce dernier m'a donc automatiquement créer les procedures Let et Get des ces attributs. Jusque ici tout va bien.


Sauf que je vois une petite différence dans le codage de ces procedures Get et Let selon les attributs : Voyons de plus près :


Pour l'attribut Colour de tpe Variant, Visual m'a donné :
 
  Public Property Let colour(ByVal vData As Variant)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.colour = 5
    mvarcolour = vData
End Property


Public Property Get colour() As Variant
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.colour
    colour = mvarcolour
End Property  




Par contre pour l'attibut axex de type single, il ma écrit :


 
Public Property Let axex(ByVal vData As Variant)
'utilisé lors de l'affectation d'une valeur à la propriété, du coté gauche de l'affectation.
'Syntax: X.axex = 5
    mvaraxex = vData
End Property

Public Property Get axex() As Variant
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.axex
    If IsObject(mvaraxex) Then
        Set axex = mvaraxex
    Else
        axex = mvaraxex
    End If
End Property     



Donc si vous saviez pouquoi une telle difference dans le codage de ces 2 attributs cela m'aiderai car lorsque je veut rajouter a ma procedure echelle la partie :

"tx=celluleA.axex " comme faite pour Nb,

le programme bloque car il rentre dans la procedure get() de axex et me dit qu'il faut un objet .. alors que celluletest est bien un objet de type cellule.


Pour l'instant pour regler ce problème j'ai modifier la procedure get() de axex pour la mettre comme celle de l'attribut colour :

 

Public Property Get axex() As Variant
'utilisé lors de la lecture de la valeur de la propriété, du coté droit de l'instruction.
'Syntax: Debug.Print X.axex
            axex = mvaraxex
    
End Property     


Voilà ^^'
Je sais c'est compliqué et très long mais encore merci pour votre aide !