Concaténation de boucles VB

pour générer toute les combinaisons d’association possible ex : (111. 112. 113. 121. 131 ...jusqu’à 333) en VB.
J'ais besoin de faire 3 boucles; de 1 à 3 à chaque fois, et mettre dans une variable la concaténation du résultat des 3 boucles à chaque boucle;
Voiçi le seul code que j'ai pus créer, mais il ne fonctionne pas!

Dim 1 As string, 2 As string, 3 As string
1=1
2=2
3=3
Etiquette1:
If condition="333" Then
Goto Etiquette2 'renvoie à la fin

Else 'sinon aff générer jusqu’à 333
print "1" & "2" & "3" to "333"

End If

Goto Etiquette1

Etiquette2:

End sub
---------
Est-ce que quelcun aurait-il une idée de code plus juste ,svp?

En esperant avoir eu une reponse
je vous remercie encore et bonne apres midi à tous
merci

Marc

18 réponses

  1. Bonjour,
    merci des conseil,
    Je reviens (j'étais absent)
    Je vais faire comme tu à dis.
    Mais l'example que j'avais datte de trés longtemps,

    A+
    1. Bonsoir Marc,

      Je te rassure, si si c'est un peu confus ;-)
      Les grandes lignes sont là mais tu t'égards un peu parfois...

      Pourquoi Feuil1_Load ? de quelle version d'excel viennent tes exemples ?
      Ce n'est pas un evenement sheets ça, si c'est pour lancer une procédure au chargement du classeur il faudrait utiliiser WorkbookOpen.

      Et pour ton 1er test bouton fait simple:
      dessine ton bouton, double-clique dessus et dans le code mets msgbox("yesssss!!!! ça marche")
      tu auras ton 1er bouton fonctionnel tu peux modifier ton code, faire d'autre procédures que tu appelles, aller voir les evenement d'une feuille, de thisworkbook etc

      Amuses toi bien :-)
      eric
      1. Salut Eric,

        Je voudrais éxperimenter un bouton de commande :).

        Pour aller encore plus loint (un peut;)
        Et dans le même cadre mais avec un contrôle qui commande l'éxecution du programme çi dessus ( Sub test() ) (dans une feuille VB),

        Dabord créer la feuille "Feuil1"
        Et j'ésite à écrire dans la boite code projet1 :

        Private Sub Feuil1_Load()
        (Car je m'aide d'un example de code).

        Puis je pense qu'il faud créer un bouton "Bt1" sur la feuille "Feuil1" puis une nouvelle procédure pour le bouton en double-cliquant dessus :

        "procédure=Click" et Objet (Form) = "Bt1"

        Puis son Code pour commander l'application "test":

        Private Sub Bt1_Click()
        test ' éxecute les boucle imbriqué nomé " Sub test() "
        End Sub

        Maintenant pour attaché "test" à la feuille "Feuil1" je dois faire idem en créant une procédure :

        "procédure = "Load ou Sub test" et
        Objet (Form) = "?"

        Puis y coler tout le code précédament créé (avec le fichier séquenciel)

        Voilà, j'éspers que c'est pas confus comme explication .

        Je trouve sa assez intéressant alors je vais essayer d'étre plus claire la prochaine fois .

        Voilà, j'éspers que c'est assez claire comme éxplication.
        merci

        Marc A+
        1. Bonjour,

          Ok
          Je te remerci pour tes éxplications claire qui mon bien aidé.

          A+
          1. Contributeur
            Volià, c'est un compteur qu'on utilise en index d'un tableau
            eric
            1. Bonjour,

              Donc i sert juste à créer les dénomination de a() pour avoir à chaque passage de i :1er tours = a(0), 2é tours = a(1) et 3é tour de i on obtient a(3) .
              C'est à la fois un compteur et un dénominateur.

              J'éspers ne pas me planter car je sais que c'est niveau débutant. (puis tu éxplique assez bien en plus)

              merci eric,

              marc @+
              1. Contributeur
                Bonsoir marc,

                a() est un tableau de 4 élements (imagine 4 cases numérotée 0,1,2,3)
                i est l'index permettant de s'adresser au (i+1) éme élément
                donc si i=0 tu ecris ou lit la 1ère case de a()
                si i=2 tu ecris ou lit la 3ème case de a()

                Dans cet exemple on lit le 1er morceau du fichier texte jusqu'à la virgule (séparateur de valeur) et on l'écrit dans a(0) (1ere case de a() )
                puis la seconde et comme on a fait i+1 on le stocke dans la 2nde case a(1)
                etc

                eric
                1. Bonjour,
                  J'ai fini par comprendre l'ensemble ,
                  (Se que j'aurait dû faire plutôt )

                  Mais Concérnant :
                  Input #n, a(i)
                  i = i + 1

                  Le (i) de a(i) est une variable de compteur avec: i = i + 1
                  Oú c'est plutôt pour dire afficher "a" là oú il y à "i" ?

                  Voilà, c'était tout ce qui me manquait à comprendre,
                  Si sa ne te dérange pas plus,
                  merci

                  marc
                  1. Contributeur
                    Oui tu peux enlever ce que tu dis si tu veux que les 2 macros n'en fasse plus qu'une
                    Mais met bien End Sub à la fin
                    eric
                    1. Merci,

                      Je vais essayer de l'éxecuter pour mieux comprendre. (mais avec VBA de word car j'ai plus mon Pc)

                      Alors le code serait comme sa :

                      Sub test()
                      Dim a(3) As String
                      fich = "e:\_tmp\liste.txt"
                      Dim i As Integer
                      n = FreeFile
                      Open fich For Input As #n 'ouverture du fichier
                      While Not EOF(n) ' et lecture tant qu'on n'est pas arrivé à la fin
                      Input #n, a(i)
                      i = i + 1
                      Wend
                      End Sub

                      Sub test()
                      For i = 0 To 2
                      For j = 0 To 2
                      For k = 0 To 2
                      ' MsgBox (i & j & k)
                      ' il suffit de remplacer par
                      MsgBox(a(i) & a(j) & a(k))
                      Next k
                      Next j
                      Next i
                      End

                      Je me suis demandé s'il fallait retirer End Sub et Sub test() entre les deux code ou si c'était juste ?

                      merci

                      marc
                      1. Contributeur
                        Bonjour,

                        Pas bcp de différence avec ce que je t'avais mis dans le 1er message.
                        Tes boucles doivent utiliser 3 variables i, j, k et utiliser a(n)

                        Donc si tu as mis tes variables dans a(0) à a(2) :

                        Sub test() 
                        For i = 0 To 2 
                          For j = 0 To 2 
                           For k = 0 To 2 
                             ' MsgBox (i & j & k) 
                             ' il suffit de remplacer par 
                             MsgBox(a(i) & a(j) & a(k))
                           Next k 
                          Next j 
                        Next i 


                        eric
                        1. Salut eric,
                          Ton éxplication est trés claire .
                          Il y à seulement des points que je dois éclaircire .
                          Lorsque tu dis :

                          "et ensuite tu fais travailler tes boucles i, j, k sur les indices du tableau
                          si j=0 alors a(j) => "1" etc.. "

                          Je tourne bétement en rond car je me demande s'il faudrais rajouter trois boucle imbriqué avec A, J, et K
                          et jouer avec le tableau "a" voir des conditions "IF"

                          (De plus je n'ai plus accé à mon Pc mais celui d'un amie et sans mes logiciels );)

                          Voilà, peut tu m'éclairer sur la fin stp,
                          Merci

                          marc
                          1. Merci eric,
                            c'est sympat de ta part.

                            Je vais lire ton explication, et essayer de comprendre le fonctionnement ce weekend.

                            Bon weenk @+
                            1. Contributeur
                              Bonsoir marcus,
                              fich = "e:\_tmp\liste.txt" : tu voulais récuperer les données fournies dans un fichier texte. Pour les test j'en ai créé un appelé liste.txt que j'ai mis sur le lecteur E:, répertoire \_tmp\. Tu remplaces par ton fichier et ton chemin. Et comme c'est long à écrire je l'ai affecté à la variable fich

                              Dim a(3) As String = déclaration d'une variable tableau qui peut stocker plusieurs valeurs. Ici 4 valeurs de a(0) à a(3) mais seules 3 serviront ici. Dim a(2) était suffisant... C'est plus simple à utiliser ensuite dans les boucles. Tu fais varier i de 0 à 2 et tu lis ou écris a(i)

                              Input #n, a(i) = lecture sequentielle dans le fichier ouvert sur #n
                              #n est un 'canal' ouvert par windows, il faut lui demander un numero de canal libre d'où le n = FREEFILE juste avant. pour lire le fichier liste.txt. Comme ça tu peux travailler avec plusieurs fichiers ouverts simultanément et tu fais reference au fichier en donnant juste son n° de canal.
                              un fichier sequentiel est un fichier texte où les données sont séparée par des virgules. En l'occurence "1","2","3"
                              Chaque Input lit une donnée dans liste.txt et la stocke dans une variable tableau a() jusqu'à la fin du fichier (EOF)
                              Donc en sortie de boucle tu as
                              a(0) = "1"
                              a(1) = "2"
                              a(2) = "3"

                              C'est expliqué sommairement mais ça t'éclairera peut-etre
                              eric
                              1. Merci sa marche déjà (on arrangeant le code)

                                Je voulais dire que pour les valeurs numérique c'est assez simple à comprendre et je t'en remérci;

                                Mais par example pour faire la même chose sauf que les valeurs sont dans un fichier texte séparé par un éspace
                                (ou virgule)
                                Alors comment déclarer des boucles imbriqué pour chaque valeur qu'il y aurait ?

                                Open C:fichier1.txt
                                for i= (1ére valeur du fichier)

                                If (encore des valeurs)
                                imbriqué les boucle

                                Je sais que c'est faut mais je pense qu'il faud les prendre comme des chaine de caractère . (¿)

                                Qu'en pense-tu ? C'est compliqués ?

                                Merci .
                                1. Contributeur
                                  Pas sûr d'avoir bien compris mais je les mettrai dans une variable tableau
                                  avec liste.txt de la forme "1","2","3"

                                  Sub test()
                                  Dim a(3) As String
                                  fich = "e:\_tmp\liste.txt"
                                  Dim i As Integer
                                  n = FreeFile
                                  Open fich For Input As #n 'ouverture du fichier
                                  While Not EOF(n) ' et lecture tant qu'on n'est pas arrivé à la fin
                                  Input #n, a(i)
                                  i = i + 1
                                  Wend
                                  End Sub

                                  et ensuite tu fais travailler tes boucles i, j, k sur les indices du tableau
                                  si j=0 alors a(j) => "1" etc

                                  eric
                                  1. Salut erric.
                                    Peut tu m'éxpliquer le fonctionnement de ton code s'il te plaît.
                                    Notament : Input #n, a(i)
                                    et le lien de :

                                    Dim a(3) As String
                                    fich = "e:\_tmp\liste.txt"

                                    Dim i As Integer
                                    n = FreeFile

                                    Merci @+
                                2. merci,
                                  c'est gentil.

                                  En plus compliqué si les variables sont issue d'un fichier texte alors comment les assignerais tu?
                                  ex: un fichier texte avec des valeures (1, 2, 3)

                                  open c:fichier.txt

                                  c'est chaud là ?
                                  Merci
                                  1. Contributeur
                                    Bonsoir,

                                    fais plutôt 3 boucles imbriquées :
                                    Sub test()
                                    For i = 1 To 3
                                    For j = 1 To 3
                                    For k = 1 To 3
                                    MsgBox (i & j & k)
                                    Next k
                                    Next j
                                    Next i
                                    End Sub

                                    evite d'utiliser les etiquettes et les goto, et ne donne pas de chiffre comme nom de variable, démarre-les toujours par une lettre

                                    cdt
                                    eric