Tri d'un fichier avec une macro excel

Résolu
Lionel_86 Messages postés 43 Date d'inscription   Statut Membre -  
 Utilisateur anonyme -
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

4 réponses

  1. Utilisateur anonyme
     
    Bonjour,

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

    Lupin
    1
    1. Lionel_86 Messages postés 43 Date d'inscription   Statut Membre 6
       
      Je voudrais trié un fichier que j'aurais créé par une macro excel.
      Un fichier de type TXT.


      Lionel
      0
  2. Utilisateur anonyme
     
    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
    1. Lionel_86 Messages postés 43 Date d'inscription   Statut Membre 6
       
      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
  3. Utilisateur anonyme
     
    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
    1. Lionel_86 Messages postés 43 Date d'inscription   Statut Membre 6
       
      Merci

      La solution est si simple.
      0
  4. Utilisateur anonyme
     
    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