Rechercher : dans
Par :

Concaténation de boucles VB

Dernière réponse le 18 oct 2007 à 00:00:56 marcus, le 16 sep 2007 à 22:42:01 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « concaténation de boucles VB » dans :
PHP - Concaténation VoirPHP permet de concaténer des chaînes de caractères grâce à l'opérateur "." : $concatenation= $a . $b; Ou encore pour affecter, dans la variable $a, la valeur de la concaténation de $a et de $b : $a.=$b; Pour concaténer des chaînes et des...
Javascript - Concaténation de chaînes de caractères VoirLe terme "concaténer" signifie joindre deux chaînes bout à bout pour n'en former qu'une seule. Dans la plupart des langages tels que PHP, la concaténation se fait avec le caractère ".". En javascript, il suffit d'utiliser le caractère plus (+) ou...
Firefox bloque les boucles de redirection VoirProblème Comment faire pour que Firefox tienne compte des boucles de redirection ? Solution La configuration de Firefox limite parfois le nombre de redirection enchainées, ce qui génère cette erreur. Pour ne pas avoir ce problème il faut modifier...
ADSL - Le dégroupage de la boucle locale VoirIntroduction au dégroupage de la boucle locale On appelle "boucle locale" la partie finale de la ligne téléphonique arrivant à l'abonné. Afin de vous faire profiter de l'internet à haut débit (ADSL), les Fournisseurs d'Accès à Internet (FAI)...

1

eriiic, le 16 sep 2007 à 23:33:29

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

Répondre à eriiic

2

marcus, le 18 sep 2007 à 23:14:44

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

Répondre à marcus

3

eriiic, le 19 sep 2007 à 11:36:50

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

Répondre à eriiic

5

marcus, le 21 sep 2007 à 23:10:21

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 @+

Répondre à marcus

4

marcus, le 19 sep 2007 à 23:08:31

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 .

Répondre à marcus

6

eriiic, le 22 sep 2007 à 01:51:51

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

Répondre à eriiic

7

marcus, le 22 sep 2007 à 23:34:33

Merci eric,
c'est sympat de ta part.

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

Bon weenk @+

Répondre à marcus

8

marcus, le 25 sep 2007 à 22:49:10

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

Répondre à marcus

9

eriiic, le 26 sep 2007 à 14:41:56

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

Répondre à eriiic

10

marcus, le 26 sep 2007 à 22:47:44

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

Répondre à marcus

11

eriiic, le 26 sep 2007 à 23:44:43

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

Répondre à eriiic

12

marcus, le 27 sep 2007 à 23:02:21

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

Répondre à marcus

13

eriiic, le 27 sep 2007 à 23:19:25

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

Répondre à eriiic

14

marcus, le 28 sep 2007 à 23:51:08

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 @+

Répondre à marcus

15

eriiic, le 29 sep 2007 à 09:53:36

Volià, c'est un compteur qu'on utilise en index d'un tableau
eric

Répondre à eriiic

16

marcus, le 2 oct 2007 à 23:05:08

Bonjour,

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

A+

Répondre à marcus

17

marcus, le 4 oct 2007 à 21:48:35

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+

Répondre à marcus

18

eriiic, le 4 oct 2007 à 23:49:25

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

Répondre à eriiic

19

 marcus, le 18 oct 2007 à 00:00:56

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+

Répondre à marcus