Tri d'un fichier avec une macro excel

Résolu/Fermé
Lionel_86 Messages postés 43 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 30 novembre 2008 - 27 févr. 2007 à 10:16
 Utilisateur anonyme - 28 févr. 2007 à 15:44
Bonjour,

Avec une macro Excel il est possible de créer un fichier.
Mais est il possible de trier ce fichier ?

D'avance Merci

Lionel
A voir également:

4 réponses

Utilisateur anonyme
27 févr. 2007 à 14:12
Bonjour,

Oui, sans aucun doute tout est relativement possible avec VBA d'excel.
Quel type de fichier désirez vous trier ?

Lupin
1
Lionel_86 Messages postés 43 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 30 novembre 2008 6
27 févr. 2007 à 16:02
Je voudrais trié un fichier que j'aurais créé par une macro excel.
Un fichier de type TXT.


Lionel
0
Utilisateur anonyme
28 févr. 2007 à 01:11
Bonjour,

Alors voici un exemple simple que vous devrez adapter à vos besoin.

Option Explicit
'

Dim Limite As Double
'

Sub EcrireFichierTexte()

    Dim NumFic As Integer
    Dim Valeur As String
    Dim Boucle As Integer
    
    Valeur = "C:\Essai.txt"
    NumFic = FreeFile
    
    Open Valeur For Output As #NumFic
    For Boucle = 9 To 1 Step -1
        Write #NumFic, Boucle
    Next Boucle
    Close #NumFic
    
End Sub
'

Sub LireFichierTexte()

    Dim NumFic As Integer, Message As String
    Dim Valeur As String, Resultat As Integer
    Dim Compteur As Double
    Dim Boite() As Integer
    
    Valeur = "C:\Essai.txt"
    NumFic = FreeFile
    Limite = 0
    
    ' Premier passage, connaître le nombre d'élément à lire
    Open Valeur For Input As #NumFic
    While Not EOF(NumFic)
        Input #NumFic, Resultat
        Limite = (Limite + 1)
    Wend
    Close #NumFic

    'Second passage, effectuer la lecture
    ReDim Boite(Limite) As Integer
    Compteur = 0
    Open Valeur For Input As #NumFic
    While Not EOF(NumFic)
        Input #NumFic, Resultat
        Boite(Compteur) = Resultat
        Compteur = (Compteur + 1)
    Wend
    Close #NumFic

    Trier Boite, Message
    MsgBox Message

End Sub
'

Function Trier(ByRef Boite() As Integer, ByRef Message As String)

    Dim Boucle As Integer, ValeurTmp As Integer, Compteur As Integer
    
    For Boucle = 0 To (Limite - 1)
        For Compteur = 0 To (Limite - 1)
            If (Boite(Compteur) > Boite(Compteur + 1)) Then
                ValeurTmp = Boite(Compteur + 1)
                Boite(Compteur + 1) = Boite(Compteur)
                Boite(Compteur) = ValeurTmp
            End If
        Next Compteur
    Next Boucle
    
    For Boucle = 0 To Limite
        Message = Message & Boite(Boucle) & vbCrLf
    Next Boucle
    
    
End Function
'
0
Lionel_86 Messages postés 43 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 30 novembre 2008 6
28 févr. 2007 à 09:03
Merci pour l'exemple.

Je viens de tester cet exemple.
Le tri n'est pas physique dans le fichier.

Y a t'il une possibilité que le fichier soit physiquement trié ?

Car pour mon cas, je fais une création par un userform excel (listbox) et je souhaiterais que le fichier soit trié dans un ordre donné.

Exemple dans ma listbox j'ai :
Poitiers 01 à 10 - 10
Limoges 11 à 15 - 05
Montmorillon 16 à 20 - 05
Paris 21 à 21 - 01
Marseille 22 à 24 - 03
Rennes 25 à 30 - 06

Je créé ces enregistrements dans un fichier format TXT, et je souhaiterais qu'il trie dans ce fichier en décroissant sur le dernier nombre (celui après le -).
La seule solution que j'ai trouvé c'est de saisir les informations dans l'ordre dont je les voulais dans mon fichier.

Si vous avez une autre solution, je serais ravis de la connaitre.

Dans tous les cas merci encore pour l'exemple, il va me donner des possibiltés pour d'autres applications.

Lionel
0
Utilisateur anonyme
28 févr. 2007 à 13:24
Bonjour,

Un fois trier vous n'avez qu'a reconstruire le fichier :



...
    Trier Boite, Message
    MsgBox Message

    Open Valeur For Output As #NumFic
    For Boucle = 0 To (Limite-1)
        Write #NumFic, Boite(Boucle)
    Next Boucle
    Close #NumFic   

Ens Sub


Lupin
0
Lionel_86 Messages postés 43 Date d'inscription lundi 2 octobre 2006 Statut Membre Dernière intervention 30 novembre 2008 6
28 févr. 2007 à 13:57
Merci

La solution est si simple.
0
Utilisateur anonyme
28 févr. 2007 à 15:44
re:

c'est toujours un plaisirs lorsque apprécié par le demandeur.

notez bien que ce n'est qu'une suggestion, il y a beaucoup d'autre
façon de procéder. Pour ma part j'ai l'habitude de décomposer
toutes les étapes pour mieux gérer les changements.

diviser pour régner !


@+
Lupin
0