Besoin d'aide variables... vba

Résolu
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
Configuration: Windows XP
Internet Explorer 6.0

17 réponses

  1. Contributeur
    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
    1. 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
      1. ou alors comment s'arranger pour changer une liste de champs dans un parcours de boucle?
        1. Contributeur
          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
          1. 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?
            1. Bonjour

              Peux-tu donner un exemple de ligne où tu utilises une variable dont le nom est la valeur de ma variable XX ?
              1. 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.
                1. 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).
                  1. 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
                    1. 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 ?
                      1. 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
                        1. 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
                          1. 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")...
                            1. avec for k=1 to ... ça écite d'oublier l'initialisation de k
                          2. super! ca marche, merci pour ton aide! t'es vraiment un père pour moi :D !