Créer des variables dynamiquement

Le
teddy
Bonjour à tous,

Je souhaite créer sous VB6 des variables nom_variable0, nom_variable1, est les déclarer dynamiquement avec une boucle :

Dim i as Integer
For i=0 to n
'déclarer ici la variable(i) avec Dim
Next

Je n'arrive pas à déclarer ces variables constituées du mot "nom_variable" et de l'indice i, c'est à dire un nom définit par la
chaîne :
"nom_fichier" & LTrim(Str$(i))

J'ai contourné le problème avec un tableau de dimension n.
Auriez-vous une idée pour résoudre ce problème ou est-ce impossible tout simplement ?
Merci beaucoup par avance.

Ted
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #16710161
teddy wrote:
Bonjour à tous,



Hello,

Je souhaite créer sous VB6 des variables nom_variable0,
nom_variable1, ... est les déclarer dynamiquement avec une boucle :
Dim i as Integer
For i=0 to n
'déclarer ici la variable(i) avec Dim
Next

Je n'arrive pas à déclarer ces variables constituées du mot
"nom_variable" et de l'indice i, c'est à dire un nom définit par la
chaîne : "nom_fichier" & LTrim(Str$(i))

J'ai contourné le problème avec un tableau de dimension n.
Auriez-vous une idée pour résoudre ce problème ou est-ce impossible
tout simplement ?



C'est impossible syntaxiquement. Ca n'aurait d'ailleurs pas d'intérêt,
car ça revient strictement identique à manipuler un tableau.

Le tableau de dimensions n est donc La solution. Au besoin, on
peut faire de l'allocation dynamique comme présenté dans cet
article:
http://faq.vb.free.fr/index.php?question3

Onpeut finalement tout faire en utilisant judicieusement
Dim, Redim et Erase.

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
LE TROLL
Le #16710611
' program "déclaration" form 1
Option Explicit
Dim variable() As String
Dim i As Long
Sub Form_Load()
ReDim variable(3)
For i = 1 To 3
If i = 1 Then variable(i) = i & " bonjour"
If i > 1 Then variable(i) = i & " bonjours"
Next i
MsgBox variable(1) & vbLf & variable(2) & vbLf & variable(3)
End Sub ' fin load
' processeur 32, 64 bits = type LONG (i as LONG)
' testé !

--
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
" teddy"
| Bonjour à tous,
|
| Je souhaite créer sous VB6 des variables nom_variable0, nom_variable1, ...
est les déclarer dynamiquement avec une boucle :
|
| Dim i as Integer
| For i=0 to n
| 'déclarer ici la variable(i) avec Dim
| Next
|
| Je n'arrive pas à déclarer ces variables constituées du mot "nom_variable"
et de l'indice i, c'est à dire un nom définit par la
| chaîne :
| "nom_fichier" & LTrim(Str$(i))
|
| J'ai contourné le problème avec un tableau de dimension n.
| Auriez-vous une idée pour résoudre ce problème ou est-ce impossible tout
simplement ?
| Merci beaucoup par avance.
|
| Ted
|
teddy
Le #16712021
J'évoquais en fait dans ce problème quelque chose qui fait penser soit à la valeur d'1 variable soit à 1 nom qui fait référence à la
valeur de cette variable (1 sorte de "pointeur").

Le problème se pose aussi pour redimensionner un tableau : Redim n'accepte pas autre chose qu'une valeur numérique et non 1
variable contenant cette valeur numérique, ce qui n'est pas toujours pratique.

En tout cas, merci à tous pour ces précisions.

Ted

"Jean-marc"
teddy wrote:
Bonjour à tous,



Hello,

Je souhaite créer sous VB6 des variables nom_variable0,
nom_variable1, ... est les déclarer dynamiquement avec une boucle :
Dim i as Integer
For i=0 to n
'déclarer ici la variable(i) avec Dim
Next

Je n'arrive pas à déclarer ces variables constituées du mot
"nom_variable" et de l'indice i, c'est à dire un nom définit par la
chaîne : "nom_fichier" & LTrim(Str$(i))

J'ai contourné le problème avec un tableau de dimension n.
Auriez-vous une idée pour résoudre ce problème ou est-ce impossible
tout simplement ?



C'est impossible syntaxiquement. Ca n'aurait d'ailleurs pas d'intérêt,
car ça revient strictement identique à manipuler un tableau.

Le tableau de dimensions n est donc La solution. Au besoin, on
peut faire de l'allocation dynamique comme présenté dans cet
article:
http://faq.vb.free.fr/index.php?question3

Onpeut finalement tout faire en utilisant judicieusement
Dim, Redim et Erase.

Cordialement,

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






Jacques93
Le #16712171
Bonjour,
teddy a écrit :

[...]

Le problème se pose aussi pour redimensionner un tableau : Redim
n'accepte pas autre chose qu'une valeur numérique et non 1 variable
contenant cette valeur numérique, ce qui n'est pas toujours pratique.




???

A moins d'avoir mal compris compris le problème, Redim accepte bien une
variable comme paramètre, sinon il ne servirait pas à grand chose, Dim
suffirait ;-) :

Dim tbl() As String
Dim n As Integer

n = 2 * 5
ReDim tbl(3 * n) As String
MsgBox "Indice tableau de : " & LBound(tbl) & " à " & UBound(tbl)


--

Cordialement,

Jacques.
LE TROLL
Le #16712331
Voici quelques variantes des possbilités offertes, mais normalement une
varible s'appelle par son non, ce qui livre son contenu

Option Explicit
Private Type groupe
nom1 As Long
nom2 As String
End Type
Dim nom As groupe
'

Sub Form_Load()
Dim i As Long
Dim variable() As Long
Dim nom_variable() As String
ReDim variable(2)
ReDim nom_variable(2)
variable(1) = 25
nom_variable(1) = " Cette variable s'appelle : nom_variable 1"
variable(2) = 50
nom_variable(2) = " Cette variable s'appelle : nom_variable 2"
For i = 1 To 2
MsgBox variable(i) & nom_variable(i)
Next i
Call suite
End Sub

' OU

Sub suite()
nom.nom1 = 75
nom.nom2 = "variable nom.nom1"
With nom
.nom1 = 75
.nom2 = "variable nom.nom1"
End With
MsgBox nom.nom1 & vbLf & nom.nom2
End Sub

------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
" teddy"
| J'évoquais en fait dans ce problème quelque chose qui fait penser soit à
la valeur d'1 variable soit à 1 nom qui fait référence à la
| valeur de cette variable (1 sorte de "pointeur").
|
| Le problème se pose aussi pour redimensionner un tableau : Redim
n'accepte pas autre chose qu'une valeur numérique et non 1
| variable contenant cette valeur numérique, ce qui n'est pas toujours
pratique.
|
| En tout cas, merci à tous pour ces précisions.
|
| Ted
|
| "Jean-marc" news:48bed7c7$0$2861$
| > teddy wrote:
| >> Bonjour à tous,
| >
| > Hello,
| >
| >> Je souhaite créer sous VB6 des variables nom_variable0,
| >> nom_variable1, ... est les déclarer dynamiquement avec une boucle :
| >> Dim i as Integer
| >> For i=0 to n
| >> 'déclarer ici la variable(i) avec Dim
| >> Next
| >>
| >> Je n'arrive pas à déclarer ces variables constituées du mot
| >> "nom_variable" et de l'indice i, c'est à dire un nom définit par la
| >> chaîne : "nom_fichier" & LTrim(Str$(i))
| >>
| >> J'ai contourné le problème avec un tableau de dimension n.
| >> Auriez-vous une idée pour résoudre ce problème ou est-ce impossible
| >> tout simplement ?
| >
| > C'est impossible syntaxiquement. Ca n'aurait d'ailleurs pas d'intérêt,
| > car ça revient strictement identique à manipuler un tableau.
| >
| > Le tableau de dimensions n est donc La solution. Au besoin, on
| > peut faire de l'allocation dynamique comme présenté dans cet
| > article:
| > http://faq.vb.free.fr/index.php?question3
| >
| > Onpeut finalement tout faire en utilisant judicieusement
| > Dim, Redim et Erase.
| >
| > Cordialement,
| >
| > --
| > Jean-marc Noury (jean_marc_n2)
| > Microsoft MVP - Visual Basic
| > FAQ VB: http://faq.vb.free.fr/
| > mailto: remove '_no_spam_' ;
| >
| >
| >
| >
|
parci
Le #16715501
On Thu, 4 Sep 2008 00:46:32 +0200, " teddy"
J'évoquais en fait dans ce problème quelque chose qui fait penser soit à la valeur d'1 variable soit à 1 nom qui fait référence à la
valeur de cette variable (1 sorte de "pointeur").



Une variable fait toujours référence à une zone en mémoire. Tu as des
fonctions cachées (VarPtr, StrPtr, ObjPtr) qui te retournent
l'adresses de cette zone. Mais ça ne t'avanceras pas beacoup dans ton
cas.

Le problème se pose aussi pour redimensionner un tableau : Redim n'accepte pas autre chose qu'une valeur numérique et non 1
variable contenant cette valeur numérique, ce qui n'est pas toujours pratique.



Ben non :

Private Sub Test()

Dim tNoms() As String
Dim nbNoms As Long

nbNoms = 10
ReDim tNoms(0 To nbNoms) As String
Debug.Print UBound(tNoms)

End Sub
teddy
Le #16720431
Exect ça marche.
Le problème semblait venir du fait d'avoir prédimensionné le tableau Dim FileLoad(1000) As Long ce qui entraînait un message
d'erreur.

Dim FileLoad() As Long
ReDim FileLoad(Total_Files) -> fonctionne maintenant.



"Jacques93" a écrit dans le message de news:
Bonjour,
teddy a écrit :

[...]

Le problème se pose aussi pour redimensionner un tableau : Redim n'accepte pas autre chose qu'une valeur numérique et non 1
variable contenant cette valeur numérique, ce qui n'est pas toujours pratique.




???

A moins d'avoir mal compris compris le problème, Redim accepte bien une variable comme paramètre, sinon il ne servirait pas à
grand chose, Dim suffirait ;-) :

Dim tbl() As String
Dim n As Integer

n = 2 * 5
ReDim tbl(3 * n) As String
MsgBox "Indice tableau de : " & LBound(tbl) & " à " & UBound(tbl)


--

Cordialement,

Jacques.


Jean-marc
Le #16720751
teddy wrote:
Exect ça marche.
Le problème semblait venir du fait d'avoir prédimensionné le tableau
Dim FileLoad(1000) As Long ce qui entraînait un message d'erreur.

Dim FileLoad() As Long
ReDim FileLoad(Total_Files) -> fonctionne maintenant.



A noter qu'un article très complet de la FAQ explique tout ceci en
détail, avec des liens vers la documentation:

"Comment et pourquoi faut-il déclarer les variables d'un programme ?"
http://faq.vb.free.fr/index.php?question0

Cordialement,

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
teddy
Le #16759711
Merci à tous pour ces précisions bien utiles.
Ted


"Jean-marc"
teddy wrote:
Exect ça marche.
Le problème semblait venir du fait d'avoir prédimensionné le tableau
Dim FileLoad(1000) As Long ce qui entraînait un message d'erreur.

Dim FileLoad() As Long
ReDim FileLoad(Total_Files) -> fonctionne maintenant.



A noter qu'un article très complet de la FAQ explique tout ceci en
détail, avec des liens vers la documentation:

"Comment et pourquoi faut-il déclarer les variables d'un programme ?"
http://faq.vb.free.fr/index.php?question0

Cordialement,

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






Publicité
Poster une réponse
Anonyme