Tri alphabétique
Fermé
nick_2428
Messages postés
31
Date d'inscription
lundi 5 novembre 2012
Statut
Membre
Dernière intervention
5 juillet 2015
-
10 nov. 2012 à 17:05
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 15 nov. 2012 à 08:45
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 15 nov. 2012 à 08:45
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
11 nov. 2012 à 16:57
11 nov. 2012 à 16:57
Bonjour,
oeut-être une piste (je n'en suis pas l'auteur):
T est ton array
senstri ctrie dans l'ordre croissant ( de mémoire: true) ou décroissant
oeut-être une piste (je n'en suis pas l'auteur):
T est ton array
senstri ctrie dans l'ordre croissant ( de mémoire: true) ou décroissant
Sub TriaBulle(T, Optional SensTri As Boolean = True) Dim Test As Boolean, I&, Temp Do Test = False For I = LBound(T) To UBound(T) - 1 If (T(I) > T(I + 1) And SensTri) Or (T(I) < T(I + 1) And Not SensTri) Then Temp = T(I) T(I) = T(I + 1) T(I + 1) = Temp Test = True End If Next I Loop Until Not Test End Sub
nick_2428
Messages postés
31
Date d'inscription
lundi 5 novembre 2012
Statut
Membre
Dernière intervention
5 juillet 2015
11 nov. 2012 à 14:22
11 nov. 2012 à 14:22
Personne? Est-ce que c'est possible à la base? Vers quoi je devrais chercher? Est-ce que je me suis mal exprimé et j'en deviens incompréhensible?
Toute l'aide apporté sera très apprécié. Je suis vraiment blocké à ce point.
Merci
Nick
Toute l'aide apporté sera très apprécié. Je suis vraiment blocké à ce point.
Merci
Nick
nick_2428
Messages postés
31
Date d'inscription
lundi 5 novembre 2012
Statut
Membre
Dernière intervention
5 juillet 2015
12 nov. 2012 à 01:45
12 nov. 2012 à 01:45
Merci
Malheureusement, j'obtiens un message d'erreur sur la 1ere ligne.
Merci quand même du coup de main. Je vais continuer ma recherche.
Malheureusement, j'obtiens un message d'erreur sur la 1ere ligne.
Merci quand même du coup de main. Je vais continuer ma recherche.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
12 nov. 2012 à 08:45
12 nov. 2012 à 08:45
Bonjour,
Curieux, je viens d'essayer et c'est OK ...(essai sur l'éditeur VBA Ms office)
peut-^tre parce qu'il s'agit d'une sub paramétrée avec une syntaxe particulière d'appel
le code ;
Je ferai un essai en Vbscript et te dirai le résultat
Curieux, je viens d'essayer et c'est OK ...(essai sur l'éditeur VBA Ms office)
peut-^tre parce qu'il s'agit d'une sub paramétrée avec une syntaxe particulière d'appel
le code ;
Sub Test() tablo = Array("Pierre", "Annie", "Paul", "Jean", "Alain", "Léone") TriaBulle tablo End Sub Sub TriaBulle(T, Optional SensTri As Boolean = True) Dim Test As Boolean, I&, Temp Do Test = False For I = LBound(T) To UBound(T) - 1 If (T(I) > T(I + 1) And SensTri) Or (T(I) < T(I + 1) And Not SensTri) Then Temp = T(I) T(I) = T(I + 1) T(I + 1) = Temp Test = True End If Next I Loop Until Not Test End Sub
Je ferai un essai en Vbscript et te dirai le résultat
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
12 nov. 2012 à 09:07
12 nov. 2012 à 09:07
Voici la version en Vbscript sans macro paramétrée et c'est OK aussi
T = Array("Pierre", "Annie", "paul", "Jean", "Alain", "Léon") Do Test = False For I = LBound(T) To UBound(T) - 1 If (T(I) > T(I + 1)) Then Temp = T(I) T(I) = T(I + 1) T(I + 1) = Temp Test = True End If Next Loop Until Not Test ordre = Join(T, ", ") Wscript.Echo ordre
nick_2428
Messages postés
31
Date d'inscription
lundi 5 novembre 2012
Statut
Membre
Dernière intervention
5 juillet 2015
13 nov. 2012 à 19:46
13 nov. 2012 à 19:46
Merci beaucoup Michel de me donner un coup de main. C'est vraiment apprécié. Je ne travaille pas dans le milieu et je n'ai pas non plus de mentor pour m'aider. Je dois apprendre sur le tas et quelques fois ce n'est pas évident. Effectivement, ton code marche parfaitement et c'est exactement ce que je veux faire. Le seul hic que je rencontre, c'est que je n'ai aucune idée où l'insérer dans mon code pour que mon strResultat soit trié de façon alphabétique lorsque je double click sur mon fichier html (strResultat) créé par mon code. Donc en gros, j'aimerais que mon code s'effectue, puisque celui-ci isole certaines variables de mes Arrays et j'aimerais ensuite que les résultats soient triés en ordre alphabétique. J'espère m'être bien exprimé pour que tu comprennes bien ce que je veux faire.
Voici un exemple d'un de mes Arrays:
78 38 45 18 24 22 61 59 68 32
48 48 71 26 119 14 10 0 5 1 0
2003 16 5 100 0 0 0 0 99
0 0 0 0
0 0 0 0
0 0 0 0 0 1
10 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 2 219 10 6
0 0 0 0 0
0 0 2 58 116
Jacques Beauchand
70 80 83 74 86 83 7 1 5 1 0
1985 16 5 6 2 2003 1 1 1
9 1 3 0
1 0 2 0
50 49 98 1 0 108
0 108 0 0 0 8
Au total dans mon fichier, j'ai 3500 Arrays de 20 lignes chacun. La variable à trier alphabétiquement est la ligne 14 de chaque array (MyArray(13)= Nom de personnes).
strSourceFile = "C:\...txt"
strResultat = "C:\....HTML"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.openTextFile(strSourceFile, 1,true)
Set objResultat = objFSO.openTextFile(strResultat, 8,true)
dim Myarray (20)
objResultat.writeline "<table ALIGN=CENTER><tr><td><big><b><span><font size=60> Addresse et Téléphone </FONT></span><br><br></td></tr></table>"
x=0
Do until objTextFile.AtEndOfStream
MyArray(x) = objTextFile.ReadLine
straddresse = Mid(MyArray(1),8,2)
strtelephone = Mid(MyArray(1),11,2)
If x = 19 Then
x=0
objResultat.writeline "<table border=1 ALIGN=CENTER valign=middle cellspacing=0 cellpadding=0><tr><td align=left width=300><span><font size=5>"&" "&MyArray(13)&"</font></span></td><td align=center width=40><span><font size=5>"&straddresse&"</font></span></td><td align=center width=20><span><font size=5>"&"/"&"</font></span></td><td align=center width=40><font size=5><span>"&strtelephone&"</span></font></td></tr></table>"
Else
x=x+1
End If
Loop
objTextFile.close
objResultat.close
wscript.quit
APRÈS JE NE VOUS ACHALE PLUS :P !!!!! MERCI
Voici un exemple d'un de mes Arrays:
78 38 45 18 24 22 61 59 68 32
48 48 71 26 119 14 10 0 5 1 0
2003 16 5 100 0 0 0 0 99
0 0 0 0
0 0 0 0
0 0 0 0 0 1
10 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 2 219 10 6
0 0 0 0 0
0 0 2 58 116
Jacques Beauchand
70 80 83 74 86 83 7 1 5 1 0
1985 16 5 6 2 2003 1 1 1
9 1 3 0
1 0 2 0
50 49 98 1 0 108
0 108 0 0 0 8
Au total dans mon fichier, j'ai 3500 Arrays de 20 lignes chacun. La variable à trier alphabétiquement est la ligne 14 de chaque array (MyArray(13)= Nom de personnes).
strSourceFile = "C:\...txt"
strResultat = "C:\....HTML"
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.openTextFile(strSourceFile, 1,true)
Set objResultat = objFSO.openTextFile(strResultat, 8,true)
dim Myarray (20)
objResultat.writeline "<table ALIGN=CENTER><tr><td><big><b><span><font size=60> Addresse et Téléphone </FONT></span><br><br></td></tr></table>"
x=0
Do until objTextFile.AtEndOfStream
MyArray(x) = objTextFile.ReadLine
straddresse = Mid(MyArray(1),8,2)
strtelephone = Mid(MyArray(1),11,2)
If x = 19 Then
x=0
objResultat.writeline "<table border=1 ALIGN=CENTER valign=middle cellspacing=0 cellpadding=0><tr><td align=left width=300><span><font size=5>"&" "&MyArray(13)&"</font></span></td><td align=center width=40><span><font size=5>"&straddresse&"</font></span></td><td align=center width=20><span><font size=5>"&"/"&"</font></span></td><td align=center width=40><font size=5><span>"&strtelephone&"</span></font></td></tr></table>"
Else
x=x+1
End If
Loop
objTextFile.close
objResultat.close
wscript.quit
APRÈS JE NE VOUS ACHALE PLUS :P !!!!! MERCI
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 14/11/2012 à 08:41
Modifié par michel_m le 14/11/2012 à 08:41
Bonjour,
Difficile de s'y retrouver dans tes explications...
tu extrais de ton HTLM une variable tableau StrResultat(3500,20)
ou as tu 3500 array de 20 données (soit 3500 strResultats) si oui comment passe tu d'un strresultat au suivant ?
as tu des risques de doublons dans les noms-prénoms ?
Difficile de s'y retrouver dans tes explications...
tu extrais de ton HTLM une variable tableau StrResultat(3500,20)
ou as tu 3500 array de 20 données (soit 3500 strResultats) si oui comment passe tu d'un strresultat au suivant ?
as tu des risques de doublons dans les noms-prénoms ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 14/11/2012 à 11:01
Modifié par michel_m le 14/11/2012 à 11:01
au lieu de StrResultats lire Strsourcefile....
annule mon post précédent
en fait, chaque strfiletext envoie des données dans un array dont l'indice 13 renvoie le nom, 1 l'adresse et le tél, et ces 3 données seront retranscrites dans strResuliats dans l'ordre nom, adresse,tél
C'est bien çà ?
edit: 11:00
STP, merci de mettre un fichier source en piece jointe
pour joindre une pièce
mettre le fichier sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
Enfin, le + important:
quès aco "Achale" ? :o)
annule mon post précédent
en fait, chaque strfiletext envoie des données dans un array dont l'indice 13 renvoie le nom, 1 l'adresse et le tél, et ces 3 données seront retranscrites dans strResuliats dans l'ordre nom, adresse,tél
C'est bien çà ?
edit: 11:00
STP, merci de mettre un fichier source en piece jointe
pour joindre une pièce
mettre le fichier sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
Enfin, le + important:
quès aco "Achale" ? :o)
nick_2428
Messages postés
31
Date d'inscription
lundi 5 novembre 2012
Statut
Membre
Dernière intervention
5 juillet 2015
Modifié par nick_2428 le 14/11/2012 à 15:09
Modifié par nick_2428 le 14/11/2012 à 15:09
[quote="michel_m"] en fait, chaque strfiletext envoie des données dans un array dont l'indice 13 renvoie le nom, 1 l'adresse et le tél, et ces 3 données seront retranscrites dans strResuliats dans l'ordre nom, adresse,tél. C'est bien çà ? [/quote] Oui c'est exactement ça. Voici un échantillon de mon fichier source. Je n'ai pas pu le mettre de façon intégral, puisqu'il contient énormément d'informations personnelles. J'ai modifier le texte pour éliminer ces informations, mais dans le fichier en pièces jointes, j'ai seulement mis 6 exemples de arrays présent dans mon fichier et non les 3500 comme j'ai actuellement dans le vrai fichier source. J,espère que ça sera correcte pour les fins de l'exercise. https://www.cjoint.com/?0KopgZ4kYSr [quote="michel_m"]quès aco "Achale" ? :o)[/quote]
Ça veut dire embêté..... Je ne vous embêterai plus ensuite :P
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 15/11/2012 à 08:03
Modifié par michel_m le 15/11/2012 à 08:03
Bonjour,
ma question: chaque strfiletext envoie des données dans un array ?
ta réponse:
Oui c'est exactement ça.
+ loin
j'ai seulement mis 6 exemples de arrays présent dans mon fichier et non les 3500
????
D'autre part, tu indiques que la présentation de ton array est vertical (ton document joint) et tu écris dans ton code
MyArray(x) = objTextFile.ReadLine
???
Bon le principe serait de boucler sur tout les arrays en créant une variable tableau de N lignes (3500) et 3 colonnes identité, adresse, téléphone
on trierait ce tableau sur l'identité ( par le nom ou le prénom ?)
on déviderait alors les 3500 lignes sous la forme du fichier text que tu as fait
mais je commence à douter....
ma question: chaque strfiletext envoie des données dans un array ?
ta réponse:
Oui c'est exactement ça.
+ loin
j'ai seulement mis 6 exemples de arrays présent dans mon fichier et non les 3500
????
D'autre part, tu indiques que la présentation de ton array est vertical (ton document joint) et tu écris dans ton code
MyArray(x) = objTextFile.ReadLine
???
Bon le principe serait de boucler sur tout les arrays en créant une variable tableau de N lignes (3500) et 3 colonnes identité, adresse, téléphone
on trierait ce tableau sur l'identité ( par le nom ou le prénom ?)
on déviderait alors les 3500 lignes sous la forme du fichier text que tu as fait
mais je commence à douter....
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 15/11/2012 à 08:47
Modifié par michel_m le 15/11/2012 à 08:47
Le principe mais je renonce à comprendre comment tu extrais tes 3500 arrays
a toi de voir quel style de boucle tu veux utiliser
'écriture du fihier résultat
fin = cptr
For cptr = 0 To fin
objResultat.writeline "<table border=1 ALIGN=CENTER valign=middle cellspacing=0 cellpadding=0><tr><td align=left width=300><span><font size=5>" & " " & T_tri(0, cptr) & "</font></span></td><td align=center width=40><span><font size=5>" & T_tri(1, cptr) & "</font></span></td><td align=center width=20><span><font size=5>" & "/" & "</font></span></td><td align=center width=40><font size=5><span>" & T_tri(2, cptr) & "</span></font></td></tr></table>"
'aller à la ligne
Next
Voilà, je ne peux plus faire grand chose, hélas (eextraction des arrays mystérieuses pour moi)
Enfin Chalade: quel langue ou dialecte ?
dans mon coin, c'est plutôt "escagasser" mais c'est vulgaire ....:oD
a toi de voir quel style de boucle tu veux utiliser
on boucle sur les 3500 arrays ReDim T_tri(2, 0) For cptr = 0 To 3500 ' 3500 à confirmer ou calculer ou autre style de boucle (do loop..., for each array... avec implémention de cptr avant redim preserve) ReDim Preserve T_tri(2, cptr) Tri(0, cptr) = arrayencours(13) 'identité Tri(1, cptr) = Mid(arrayencours(1), 8, 2) 'adresse Tri(2, cptr) = Mid(arrayencours(1), 11, 2) 'téléphone Next 'Pour trier le tableau T_tri avec les 3500 arrays (technique des quicksort pour >1000 lignes) Tablo = T_tri Col = 0 'identité Min = LBound(T_tri) Max = UBound(T_tri) 'Tri rapide Dim I&, J&, K&, M, Chaine I = Min J = Max M = Tablo((Min + Max) / 2, Col) While (I <= J) While (Tablo(I, Col) < M And I < Max) I = I + 1 Wend While (M < Tablo(J, Col) And J > Min) J = J - 1 Wend If (I <= J) Then For K = LBound(Tablo, 2) To UBound(Tablo, 2) Chaine = Tablo(I, K) Tablo(I, K) = Tablo(J, K) Tablo(J, K) = Chaine Next K I = I + 1 J = J - 1 End If Wend If (Min < J) Then TriMulti Tablo, Col, Min, J If (I < Max) Then TriMulti Tablo, Col, I, Max End Sub
'écriture du fihier résultat
fin = cptr
For cptr = 0 To fin
objResultat.writeline "<table border=1 ALIGN=CENTER valign=middle cellspacing=0 cellpadding=0><tr><td align=left width=300><span><font size=5>" & " " & T_tri(0, cptr) & "</font></span></td><td align=center width=40><span><font size=5>" & T_tri(1, cptr) & "</font></span></td><td align=center width=20><span><font size=5>" & "/" & "</font></span></td><td align=center width=40><font size=5><span>" & T_tri(2, cptr) & "</span></font></td></tr></table>"
'aller à la ligne
Next
Voilà, je ne peux plus faire grand chose, hélas (eextraction des arrays mystérieuses pour moi)
Enfin Chalade: quel langue ou dialecte ?
dans mon coin, c'est plutôt "escagasser" mais c'est vulgaire ....:oD