OVH Cloud OVH Cloud

Module de classe

12 réponses
Avatar
JLuc
Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-\O

10 réponses

1 2
Avatar
Driss HANIB
Oui c'est normal,

dans ta déclaration il ne faut pas dimensionner ton tableau : pas de chiffre
entre les parenthèses

Dim Machines() As New Machine


dans topn premier chargement tu peux alors mettre ensuite un dimensionnement
reDim Machines(1)

et ensuite tu peux redimensionner 'à volonté' ton tableau

Driss

"JLuc" a écrit dans le message de
news:
Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
Jean-marc
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée. Donc
je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à toute
ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Avatar
JLuc
Ok, je vais tester ça. Pour l'instant je suis en train d'installer VB
2005 Express avec la MSDN O-O
Dès que c'est fini, je teste et je te tiens au courrant
Merci pour cette réponse rapide


Il se trouve que Driss HANIB a formulé :
Oui c'est normal,

dans ta déclaration il ne faut pas dimensionner ton tableau : pas de chiffre
entre les parenthèses

Dim Machines() As New Machine


dans topn premier chargement tu peux alors mettre ensuite un dimensionnement
reDim Machines(1)

et ensuite tu peux redimensionner 'à volonté' ton tableau

Driss

"JLuc" a écrit dans le message de
news:
Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
Merci de tous ces renseignements en plus.
Comme je l'ai dis a Driss, je testerais dès que 2005 Express sera
installé. J'y rajouterais tes remarques pour une programmation propre
;-)

Jean-marc a pensé très fort :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée. Donc
je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à toute
ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
Petite question subsidiaire :
est il possible et facile de passer l'appli de VB6 à VB2005 ?
Doit on prévoir de grosse modifs ?


Jean-marc a utilisé son clavier pour écrire :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée. Donc
je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à toute
ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
Jean-marc
C'est possible, en théorie. A tel point qu'il y a même
un assistant qui est là pour aider à cette conversion.

Ca, c'est la théorie...

La pratique maintenant: J'ai pu migrer de (toutes) petites
applications sans trop de soucis, en revanche, l'assistant
a "calé" sur des applications plus grosses.

Dans ce cas, il génère tellement d'erreurs que les résoudre
une à une est un calvaire.

MAIS, et c'est le plus important, une application bien fichue
(clairement découpée en fonctions bien isolées, etc.) n'est pas
compliquée à porter, il faut juste le faire manuellement plutot
qu'avec l'assistant. Le meilleur conseil à donner est sans doute
de bien comprendre la philosophie de VB2005, de réécrire la partie
graphique dans l'esprit VB2055, puis de faire le portage de la
logique business, en réutilisant les principes et algorithmes, qui
eux de toute façon de changent pas.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/

"JLuc" a écrit dans le message de news:

Petite question subsidiaire :
est il possible et facile de passer l'appli de VB6 à VB2005 ?
Doit on prévoir de grosse modifs ?


Jean-marc a utilisé son clavier pour écrire :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
JLuc
Merci pour ces précisions. Par contre, pour la partie graphique, tu
crois qu'il vaut mieux refaire les forms plûtot que de les importés ?


Bonjour Jean-marc,

C'est possible, en théorie. A tel point qu'il y a même
un assistant qui est là pour aider à cette conversion.

Ca, c'est la théorie...

La pratique maintenant: J'ai pu migrer de (toutes) petites
applications sans trop de soucis, en revanche, l'assistant
a "calé" sur des applications plus grosses.

Dans ce cas, il génère tellement d'erreurs que les résoudre
une à une est un calvaire.

MAIS, et c'est le plus important, une application bien fichue
(clairement découpée en fonctions bien isolées, etc.) n'est pas
compliquée à porter, il faut juste le faire manuellement plutot
qu'avec l'assistant. Le meilleur conseil à donner est sans doute
de bien comprendre la philosophie de VB2005, de réécrire la partie
graphique dans l'esprit VB2055, puis de faire le portage de la
logique business, en réutilisant les principes et algorithmes, qui
eux de toute façon de changent pas.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/

"JLuc" a écrit dans le message de news:

Petite question subsidiaire :
est il possible et facile de passer l'appli de VB6 à VB2005 ?
Doit on prévoir de grosse modifs ?


Jean-marc a utilisé son clavier pour écrire :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée. Donc
je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



-- ____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O







--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
Jean-marc
C'est en tout cas ce que je ferais, mais ce n'est
qu'un avis :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/


"JLuc" a écrit dans le message de news:

Merci pour ces précisions. Par contre, pour la partie graphique, tu crois
qu'il vaut mieux refaire les forms plûtot que de les importés ?


Bonjour Jean-marc,

C'est possible, en théorie. A tel point qu'il y a même
un assistant qui est là pour aider à cette conversion.

Ca, c'est la théorie...

La pratique maintenant: J'ai pu migrer de (toutes) petites
applications sans trop de soucis, en revanche, l'assistant
a "calé" sur des applications plus grosses.

Dans ce cas, il génère tellement d'erreurs que les résoudre
une à une est un calvaire.

MAIS, et c'est le plus important, une application bien fichue
(clairement découpée en fonctions bien isolées, etc.) n'est pas
compliquée à porter, il faut juste le faire manuellement plutot
qu'avec l'assistant. Le meilleur conseil à donner est sans doute
de bien comprendre la philosophie de VB2005, de réécrire la partie
graphique dans l'esprit VB2055, puis de faire le portage de la
logique business, en réutilisant les principes et algorithmes, qui
eux de toute façon de changent pas.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/

"JLuc" a écrit dans le message de news:

Petite question subsidiaire :
est il possible et facile de passer l'appli de VB6 à VB2005 ?
Doit on prévoir de grosse modifs ?


Jean-marc a utilisé son clavier pour écrire :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array
"globale"de cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce
qui cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



-- ____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O







--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
JLuc
Ca y est, j'ai finalement pu tester. Ton code marche impecable

Driss HANIB avait soumis l'idée :
Oui c'est normal,

dans ta déclaration il ne faut pas dimensionner ton tableau : pas de chiffre
entre les parenthèses

Dim Machines() As New Machine


dans topn premier chargement tu peux alors mettre ensuite un dimensionnement
reDim Machines(1)

et ensuite tu peux redimensionner 'à volonté' ton tableau

Driss

"JLuc" a écrit dans le message de
news:
Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée.
Donc je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à
toute ma reconnaissance

Merci pour vos reponses

--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
Avatar
JLuc
ReSalut,
J'ai enfin tester ton code, et j'ai une erreur :
91
Variable objet ou Variable de bloc with non défini

Et ceci, lors de l'affectation de valeur dans ma variable :/ . Problème
que je ne rencontre pas avec le code de Driss 8-o


Le 01/12/2006, Jean-marc a supposé :
"JLuc" a écrit dans le message de news:

Bonjour les lecteurs,
VB6
Voila mon petit soucis :
J'ai créer un module de classe que j'ai appelé "Machine".
Dans le module du formulaire, je déclare une variable array "globale"de
cette façon :
Dim Machines(1) As New Machine

Ensuite, sur une sélection dans un menu, je veux ajouter une entrée. Donc
je fais :

ReDim Preserve Machines(UBound(Machines) + 1)

Et là, elle me mets :
Erreur de compillation. Tableau déjà dimentionné.

Où est ce que je commets une erreur ? J'avoue que je ne vois pas ce qui
cloche :/
Si quelqu'un pouvait me sortir cette épine du pied, il aurai droit à toute
ma reconnaissance



Hello,

Voici une façon (assez) classique de faire:

'
' déclaration sans dimensions, sans New
'
Dim machines() As Machine

'
' première allocation
'
ReDim machines(1)
Set machines(1) = New Machine

'
' puis pour toutes les suivantes
'
Dim idxNewInstance As Long

idxNewInstance = UBound(machines) + 1
ReDim Preserve machines(idxNewInstance)
Set machines(idxNewInstance) = New Machine

C'est une façon de faire, sure et propre, qui a en
plus le mérite de fonctionner parfaitement :-)

Note: le fait de dissocier la première allocation des autres
est juste pour s'éviter un test vérifiant que machines() a au
moins un élément.



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O
1 2