Trier un tableau en vba
trustpol
Messages postés
36
Statut
Membre
-
Utilisateur anonyme -
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
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
A voir également:
- Trier un tableau en vba
- Trier un tableau excel - Guide
- Tableau word - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
3 réponses
Bonjour,
Exemple type :
Lupin
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
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
// 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
re:
Étape par étape :
Lupin
É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
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