Besoin d'aide variables... vba

Résolu/Fermé
starnours - 14 févr. 2008 à 13:34
 le père - 15 févr. 2008 à 15:25
Bonjour,
Alors voilà mon petit souci :

Le contexte est le suivant : j'ai toute une série de variables : nom1, nom2, nom3,...
Et dans une boucle, j'aimerais modifier les valeurs de ces variables (1er tour de boucle, on change la valeur de nom1 au second, nom2,....
donc, j'ai pensé à l'idée suivante :
on crée un variable XX dans laquelle on met "nom" concaténé d'1 numéro (un compteur dans la boucle)

Mais ensuite, comment faire pour utiliser la variable dont le nom est la valeur de ma variable XX ??

(vous m'avez suivi?)

Merci d'avance pour votre aide

17 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
14 févr. 2008 à 13:37
Salut,
Tu te compliques la vie.
Utilise plutôt un tableau. dim nom(15) par exemple.
Tu fais ta bloucle, et tu changes la variable nom(i), et voilà ;)

Cordialement
0
arf, oui, ca marcherait, mais j'ai donné un cas général, en fait mes variables sont des champs. ET là, ca se complique
0
ou alors comment s'arranger pour changer une liste de champs dans un parcours de boucle?
0
pas de petites idées?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
14 févr. 2008 à 16:41
Salut,
Je connais pas trop le VBA, donc je peux pas trop d'aider. Mais il doit bien y avoir possibilité d'effectuer des groupes de contrôles et ainsi avoir accès à divers champs avec juste l'aide d'une indice. En gros champ(1) champ(2) etc.
J'espère qu'une personne s'y connaissant t'aidera, car ce n'est pas trop mon domaine ;)

Cordialement
0
Si ça pouvait marcher comme ça, je serais bien! Avec le nombre de champs que j'ai , ça serait vraiment le top!
Quelqu'un sait-il si c'est possible?
0
Bonjour

Peux-tu donner un exemple de ligne où tu utilises une variable dont le nom est la valeur de ma variable XX ?
0
justement, c'est ma question! j'aimerais savoir si c'est possible
0
Je pose cette question parce qu'au post 2 tu dis
en fait mes variables sont des champs. ET là, ca se complique
Alors que c'est exactement le contraire. Si ce sont des noms de champs, tu ne les utilises pas comme des variables VB mais dans des chaînes correspondant à des requêtes et là ça devient très facile.
Ecris une instruction VB comportant une l'utilisation d'un champ dont le nom est dans une variable, même si tu as peur d'écrire une c..nerie, c'est juste pour m'assurer que je comprends bien ce que tu veux et te donner une version corrigée si je peux.
0
Je sais pas si j'ai réussi à te comprendre et à me faire comprendre :
en gros :
j'ai toute une série de champs dans mon formulaire ainsi que'une série de valeur dans ma table. Donc, à l'aide d'une boucle, j'aimerais remplir tous les champs avec les valeurs de ma table. Le problème vient juste du fait que je ne sais pas comment selectionner un champ puis le suivant, puis le suivant... dans ma boucle pour les remplir (c'est pourquoi j'avais pensé à utiliser un tableau qui conteindrais des noms de variables... et tout l'tralala, mais je crois que c'est compliqué cette histoire de tableau).
0
Suppososns que tu aies un seul champ à remplir
Peux-tu montrer avec quel code tu le ferais ? (pour piocher dans ta table, puis mettre dans ton formulaire)
Ensuite, indique quels éléments doivent changer pour traiter chacun des champs
0
Pardon, supposons plutôt que tu aies 3 champs à remplr applelés Champ1, Champ2 et Champ3
Peux-tu montrer avec quel code sans boucle tu le ferais ?
0
Pour remplir 3 champs, sans boucle :

Dim RS As Recordset
Dim base As Database
Dim requete As String
Dim num_assoc As Integer


num_assoc = [...].Value


requete = " SELECT [id_AssocLignePrix] FROM [Association Prix Ligne] WHERE [id_ligne_associée] = " & num_assoc & "; "

Set base = CurrentDb
Set RS = base.OpenRecordset(requete, dbOpenSnapshot)


Champ(1) = RS(0)
RS.Movenext
champ(2) = RS(0)
RS.Movenext
champ(3) = RS(0)


Set RS = Nothing
0
Voila plus précisement c'que ça donne en évitant les erreurs...

requete = " SELECT cNomFou FROM [Association Prix Ligne] WHERE [id_ligne_associée] = " & num_assoc & "; "

Set base = CurrentDb
Set RS = base.OpenRecordset(requete, dbOpenSnapshot)

Dim veh As String
Dim Nbre_ligne_requete As Integer

If RS.RecordCount > 0 Then
RS.MoveLast
Nbre_ligne_requete = RS.RecordCount 'on compte le nombre de lignes
RS.MoveFirst
cpt = 1
'MsgBox Nbre_ligne_requete
'--------------------------------------------------------------
If cpt <= Nbre_ligne_requete Then
Me![supplier1].Value = RS(0)
cpt = cpt + 1
If cpt <= Nbre_ligne_requete Then
RS.MoveNext
Me![supplier2].Value = RS(0)
cpt = cpt + 1
If cpt <= Nbre_ligne_requete Then
RS.MoveNext
Me![supplier3].Value = RS(0)
cpt = cpt + 1
If cpt <= Nbre_ligne_requete Then
RS.MoveNext
Me![supplier4].Value = RS(0)
End If
End If
End If
End If
0
Je crois que nous allons finir par nous comprendre ;)

dim k%
do while k<=Nbre_ligne_requete 
  me.controls("supplier" & k).value = RS(0)
  if k<Nbre_ligne_requete  then RS.MoveNext 
  k=k+1
loop


Tout est dans la syntaxe Me![supplier3] <-> me.controls("supplier3")...
0
avec for k=1 to ... ça écite d'oublier l'initialisation de k
0
super! ca marche, merci pour ton aide! t'es vraiment un père pour moi :D !
0
Au plaisir ... :)
0