Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Créer des variables dynamiquement

9 réponses
Avatar
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

9 réponses

Avatar
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_' ;
Avatar
LE TROLL
' 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" a écrit dans le message de news:

| 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
|
Avatar
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" a écrit dans le message de 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_' ;






Avatar
Jacques93
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.
Avatar
LE TROLL
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" a écrit dans le message de news:

| 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" a écrit dans le message de
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_' ;
| >
| >
| >
| >
|
Avatar
parci
On Thu, 4 Sep 2008 00:46:32 +0200, " teddy" wrote:

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
Avatar
teddy
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.


Avatar
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_' ;
Avatar
teddy
Merci à tous pour ces précisions bien utiles.
Ted


"Jean-marc" a écrit dans le message de news:48c0453a$0$2855$
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_' ;