Rechercher : dans
Par :

Trier un tableau en vba

Dernière réponse le 2 avr 2008 à 20:03:44 trustpol, le 2 avr 2008 à 10:10:43 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « trier un tableau en vba » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Tri par fusion - récursivité- VoirVoici une procédure récursive qui permet de trier un tableau de n entiers en utilisant la méthode de tri par fusion : Procedure Tri_Fusion (Var t : TAB; g, d : integer); Var m, i, j, k : integer; s : TAB; Begin If d > g Then ...

1

Lupin.A, le 2 avr 2008 à 13:54:47

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

Répondre à Lupin.A

2

trustpol, le 2 avr 2008 à 16:41:20

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

Répondre à trustpol

3

Lupin.A, le 2 avr 2008 à 17:04:55

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

Répondre à Lupin.A

4

trustpol, le 2 avr 2008 à 17:35:40

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

Répondre à trustpol

5

 Lupin.A, le 2 avr 2008 à 20:03:44

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

Répondre à Lupin.A