Je m'explique:
je voudrais savoir si on peut faire un truc de ce genre:
pour plus tard faire comme ça :Code:
1
2
3
4 Do Until I = 10 Dim Variable & I as string I = I + 1 Loop
... vous voyez où je veux en venir ?Code:machin = Variable & I
Version imprimable
Je m'explique:
je voudrais savoir si on peut faire un truc de ce genre:
pour plus tard faire comme ça :Code:
1
2
3
4 Do Until I = 10 Dim Variable & I as string I = I + 1 Loop
... vous voyez où je veux en venir ?Code:machin = Variable & I
salut touaa :aie:
pas d'idée directement, mais peux-tu nous dire la finalité de cette multiplication de variable stp ?
C'est compliqué.....
mais je veux bien essayer de m'expliquer, ça va être long.
J'essaye de faire une exportation de données vers un fichier texte.
Pour cette exportation, je sélectionne certains champs d'une table.
à chaque enregistrement, je dois regarder chaque champ, comme le nom, l'ID, etc...
Pour chacun de ces champs, je dois les exporter de façon particulière: en texte ou numérique, mais c'est pas simple, le fait que ce soit texte ou numérique n'a pas forcément de relation avec les paramètres des champs de ma table.
Donc pour retrouver ce type, j'ai une table de paramètres qui regroupe chacun des noms des champs. (nomChamp, TypeChamp)
Donc, pour en revenir à mon exportation, le souci qui se pose est le suivant:
à chaque enregistrement, pour chaque champ je fais un check de ma table paramètres.
Donc en gros, ça fait ça:
Le problème, c'est qu'à chaque enregistrement, je fais le check de la table params (mon rst2), alors que c'est inutile.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Do Until Rst.EOF I = 0 Req1 = "" Req2 = "" While I < Rst.Fields.Count If Not IsNull(Rst(I)) Then Crit = "Nomchamp like '" & Rst.Fields(I).name & "'" Rst2.FindFirst Crit Crit = TrouverTypeChamp(Rst2![TypeChamp]) Call AddRequete.AddRequete(Req1, Req2, Rst.Fields(I).name, Replace(Rst(I).Value, "'", "''"), Crit) End If I = I + 1 Wend Crit = "/* " & J & " */ INSERT INTO " & Me.ComboBd & " (" & Req1 & ") VALUES (" & Req2 & ");" Call CreaAjoutFichier.AjoutLigneDansFichier(Chemin & "\" & NomFichier, Crit) J = J + 1 Progress.Value = J - 1 Rst.MoveNext Loop
Ce qui, en temps, est énorme. pour 15000 enregistrements, contenus dans une table qui a 12 champs différents, 15000*12 checks... TROP LONG
J'aurais préféré créer X variables, qui ont le nom du champ, et qui prennent comme valeur "int" ou "str", et faire allusion à ces variables à chaque fois.
Mais le souci, c'est que le nom des champs change, et le nombre n'est pas fixe.
Donc je voulais savoir si, après avoir comté le nombre de champs, on peut créer des variables avec le Do Until puis Loop.
Voilà, je me prends peut-être trop la tête, si ça se trouve il y a beaucoup plus simple.
................Tu as compris ? :roll:
oki,
et pourquoi n'utilises-tu pas une collection dans ce cas là ?
Mais d'après ce que je crois comprendre de ton énoncé, il me semble qu'il n'est pas non plus nécessaire d'avoir X variables...
Je ne sais pas utiliser les collections ! si tu as un tuto en tête je suis preneuse !
Pour le nombre de variables X, si il change, en fonction de la table à exporter !
(et oui, dommage....)
Oui, une collection ou un tableau serait le bon outil.
L'intérêt de la collection est que tu peux y ajouter des objets. L'exemple de l'aide d'Access fait justement cela. (tu vas en mode programme, tu tape Collection, tu sélectionne collection et tu appuis sur F1)
Un tableau est plus primaire mais peut trés bien faire la job.
Pour définir un tableau :
Dim monTableau(10) as string (Attention la numérotation commence à 0 donc c'est un tableau de 11 éléments !).
Les fonctions LBound(monTableau) and UBound(monTableau) te donne l'indice du 1er élément et du dernier.
L'instruction Redim est aussi trés utile pour agrandir un tableau.
Mais si tu as le temps investit le dans l'étude de l'objet Collection, c'est bien plus puissant qu'un tableau.
A+