Rechercher : dans
Par :

Tri d'un fichier avec une macro excel

Dernière réponse le 28 fév 2007 à 15:44:45 Lionel_86, le 27 fév 2007 à 10:16:54 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Internet Explorer 7.0

1

Lupin.A, le 27 fév 2007 à 14:12:20
  • +1

Bonjour,

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

Lupin

Répondre à Lupin.A

2

Lionel_86, le 27 fév 2007 à 16:02:46

Je voudrais trié un fichier que j'aurais créé par une macro excel.
Un fichier de type TXT.


Lionel

Répondre à Lionel_86

3

Lupin.A, le 28 fév 2007 à 01:11:57

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
'

Répondre à Lupin.A

4

Lionel_86, le 28 fév 2007 à 09:03:13

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

Répondre à Lionel_86

5

Lupin.A, le 28 fév 2007 à 13:24:09

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

Répondre à Lupin.A

6

Lionel_86, le 28 fév 2007 à 13:57:36
  • +1

Merci

La solution est si simple.

Répondre à Lionel_86

7

 Lupin.A, le 28 fév 2007 à 15:44:45

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

Répondre à Lupin.A