Trier un tableau en vba

trustpol Messages postés 36 Statut Membre -  
 Utilisateur anonyme -
Bonjour,

Je travaille un partir d'un export d'un autre fichier et je voudrais que cet export soit trier à partir de la première colonne.

Je voudrais réaliser une macro qui me supprime les lignes dont la premeière colonne contient plus de 3 caractères et qu'il soit trié par ordre alphabétique puis dans l'ordre croissant du nombre qui suit la première lettre.

Exemple

T54 4589 XW 86 Taxi
W45 5869 VC 54 Wagon
W544 8586 BV 19 Wagon
P546 4695 BN 25 Poussette
A45 8568 XC 64 Voiture

et donc je voudrais obtenir

A45 8568 XC 64 Voiture
T54 4589 XW 86 Taxi
W45 5869 VC 54 Wagon

Merci de votre aide et demandez moi des infos si c'est pas très clair
Configuration: Windows 2003
Internet Explorer 7.0

3 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    Exemple type :

    Option Explicit
    
    Sub Traitement()
    
        Dim Plage As Range, Limite As Long
        Dim Feuille As Worksheet, Reponse As Boolean
        
        Set Feuille = ActiveSheet
        Limite = Range("A65536").End(xlUp).Row
        Set Plage = Range("A1:A" & Limite)
        Reponse = Epuration(Plage)
        TrierFeuille Feuille
        
    End Sub
    '
    
    Function Epuration(ByVal Cible As Range) As Boolean
    
        Dim Cellule As Range
        
        On Error GoTo Err_Epuration
        
        Epuration = False
        Sheets(1).Select
        For Each Cellule In Cible
            If (Len(Trim(Cellule.Value)) > 3) Then
                Cellule.EntireRow.Delete
            End If
        Next Cellule
        Epuration = True
    
    Exit_Epuration:
        Exit Function
    
    Err_Epuration:
        Epuration = False
        GoTo Exit_Epuration
        
    End Function
    '
    
    Function TrierFeuille(ByVal Lafeuille As Worksheet)
    
        Lafeuille.Select
        Cells.Select
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
        Range("A1").Select
    
    End Function
    '
    


    Lupin
    0
    1. trustpol Messages postés 36 Statut Membre
       
      bonjour

      je vous remrcie pour votre réponse. Cependant je n'arrive pas à l'insérer.

      Pour tout vous dire je suis novice en macro et donc j'aimerais savoir a quel endroit je dois faire des modifications sur le

      code pour l'inserer dans mon classeur.

      J'attends votre réponse avec impatience. Merci
      0
  2. Utilisateur anonyme
     
    re:

    // Menu Excel / Outils / Macro / Visual Basic Éditeur

    Sous VBE :

    Fenetre de gauche, section Project - VBA Project

    Repérer votre classeur

    Clic droit

    Choisir // Insertion / Module

    Faire un copier/coller dans la fenêtre de droite

    Retourner dans la fenêtre Excel

    // Menu Excel / Outils / Macro / Macro ...

    Sélectionner la macro [ Traitement ]

    Clic sur bouton [ Exécuter ]

    Amicalement

    Lupin
    0
    1. trustpol Messages postés 36 Statut Membre
       
      C'est bon sa marche

      J'avoue que j'ai pas saisi tout le code masi le principal c'est que sa marche

      Merci beaucoup
      0
  3. Utilisateur anonyme
     
    re:

    Étape par étape :

    Sub Traitement()
    
        ' Déclare un variable Plage de type Range ( plage de cellule(s) )
        ' Déclare une variable de type Long  ( plus grand que 32768 )
        Dim Plage As Range, Limite As Long
    
        ' Déclare une variable Feuille de type Feuille Excel
        ' Déclare une variable Reponse de type booléan ( vrai ou faux )
        Dim Feuille As Worksheet, Reponse As Boolean
        
        ' Affecte à la variable Feuille la feuille active
        Set Feuille = ActiveSheet
        ' Recherche la dernière cellule non-vide de la collone A
        Limite = Range("A65536").End(xlUp).Row
        ' Affecte à la variable Plage les cellule en commençant en A1 jusqu'a A et Limite
        Set Plage = Range("A1:A" & Limite)
        ' Reçoit le résultat de la fonction Epuration qui renvoie vrai ou faux dans la variable Reponse
        ' en fournissant en paramètre la variable Plage
        Reponse = Epuration(Plage)
        ' Appel de la fonction TrierFeuille avec comme paramètre la variable Feuille
        TrierFeuille Feuille
        
    End Sub
    


    Function Epuration(ByVal Cible As Range) As Boolean
    
        Dim Cellule As Range
        
        On Error GoTo Err_Epuration
    
        ' Affecte Faux à la fonction Epuration    
        Epuration = False
        ' Sélectionne la première feuille du classeur
        Sheets(1).Select
        ' Pour chaque cellule dans les dcellules défini par la Plage
        For Each Cellule In Cible
            ' Si la longueur (Len)  de la cellule vérifier et dépouiller des espaces superflu (Trim)
            ' est plus grande que 3
            If (Len(Trim(Cellule.Value)) > 3) Then
                ' Alors detruit la ligne au complet
                Cellule.EntireRow.Delete
            End If
        Next Cellule
        ' Pas d'erreur donc renvoie la valeur Vrai
        Epuration = True
    
    Exit_Epuration:
        Exit Function
    
    Err_Epuration:
        Epuration = False
        GoTo Exit_Epuration
        
    End Function
    '
    


    Lupin
    0