Listview avec macro pour classer ordre croissant

  • Initiateur de la discussion Initiateur de la discussion bloomby
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bloomby

XLDnaute Occasionnel
Bonjour à tous,

ci joins j'ai un lisview qui affiche des données
j'aimerais que lorsque l'on clique sur (%) par exemple ou n'importe quel autre titre dans le listview ex: (name)(heure)(nombre)

que les données se classe en ordre croissant
c'est à dire, si on clique sur nombre la première ligne en gaut devrais afficher
02/01/2009 6 HEURES 5178 -25%

Merci de votre aide
 

Pièces jointes

Re : Listview avec macro pour classer ordre croissant

Re,

Bon Bloomby, si vous avez un minimum de savoir-vivre, vous aurez deux posts auxquels répondre...

Voici votre fichier et la macro :

Code:
Dim Flag As Boolean

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim i As Integer

With ListView1
   
For i = 1 To .ListItems.Count [COLOR="Red"]'1ère colonne au format décimal[/COLOR]
.ListItems(i).Text = CDec(CDate(.ListItems(i).Text))
Next

If Flag Then
.SortOrder = lvwDescending [COLOR="Red"]'pour les clics d'ordre pair[/COLOR]
 Else
  .SortOrder = lvwAscending [COLOR="Red"]'pour les clics d'ordre impair[/COLOR]
 End If
.Sorted = True [COLOR="Red"]'la propriété Sorted exécute le tri[/COLOR]
Flag = Not Flag

For i = 1 To .ListItems.Count [COLOR="Red"]'Retour 1ère colonne au format dd/mm/yyyy[/COLOR]
.ListItems(i).Text = Format(CDate(.ListItems(i).Text), "dd/mm/yyyy")
Next

End With

End Sub

Un 2ème clic sur une colonne inverse l'ordre du tri.

A+
 

Pièces jointes

Dernière édition:
Re : Listview avec macro pour classer ordre croissant

Bonjour Bloomby, bonjour Job75,

Si les colonnes doivent être toujours triées dans le même ordre:

Code:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
' Réalise le tri d'une colonne en cliquant sur l'en-tête
    ListView1.SortKey = ColumnHeader.Index - 1 '-1 car l'index commence à 1 et les en-têtes à partir de 0
   ListView1.Sorted = True
    ListView1.SortOrder = lvwAscending 'Ordre de tri
End Sub


@+

Gael
 
Re : Listview avec macro pour classer ordre croissant

Salut Gael,

Je pensais que Bloomby voulait toujours trier selon les dates, quelque soit la colonne cliquée.

Faut que je revois ma copie.

A+
 
Dernière édition:
Re : Listview avec macro pour classer ordre croissant

Bonjour à tous


Boomby ne sait peut-être pas qu'en ayant sur son bureau (virtuel bien sur) ce lien,


Il pourra répondre à tous ces anciens posts restés sans réponses de sa part (j'espère qu'il n'en a pas trop🙄).
 
Re : Listview avec macro pour classer ordre croissant

Salut Pierre Olivier et Michel,

Merci pour ces infos.

Cela dit j'ai essayé de revoir ma copie, mais avec la méthode utilisée, le tri par colonne est alphanumérique. A part les dates, avec les autres colonnes, les nombres ne sont pas triés correctement.

On peut évidemment trier le tableau dans la feuille, mais c'est pas terrible comme solution...

A+
 
Re : Listview avec macro pour classer ordre croissant

Bonjour Pierre Olivier , job75 et Michel,

Dans un premier temps, merci à toi Michel pour le lien, il est vrai que je perds souvent mes sujets dans les nombreux messages sur le forum

Par la suite merci à Pierre Oliver et Job75 pour votre aide sur ce fil,

j'ai fait un essai qui fonctionne très bien, maintenant j'essai de le modifier pour que lorsque je clique sur (%) ou autre le classement se face sur ce titre

merci !
 
Re : Listview avec macro pour classer ordre croissant

Bonjou à tous,

j'avais créer une macro de ce type pour excel cela ressemblait a:

Sub Classement()

Dim i As Integer
i = Range("G3")

Range("A8:K1000").Select
Selection.Sort Key1:=Cells(9, i), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom

End Sub

je ne sais pas si il est possible d'écrire pratiquement le même code mais pour le userform
merci
 
Re : Listview avec macro pour classer ordre croissant

Bonjour,

Voir PJ

Tri direct du ListView:

Pour le numérique +/-, il faut ajouter une valeur positive (1000000 e.g.).

Code:
    Case 3
      For i = 1 To ListView1.ListItems.Count
         ListView1.ListItems(i).ListSubItems(c).Text = Format(Val(ListView1.ListItems(i).ListSubItems(c).Text) + 10000, "00000")
      Next i
      ListView1.SortKey = c
      ListView1.SortOrder = lvwAsccending
      ListView1.Sorted = True
      For i = 1 To ListView1.ListItems.Count
       ListView1.ListItems(i).ListSubItems(c).Text = CDbl(ListView1.ListItems(i).ListSubItems(c)) - 10000 & "%"
      Next i


JB
 

Pièces jointes

Dernière édition:
Re : Listview avec macro pour classer ordre croissant

Bonjour Bloomby, le fil, le forum,

Comme je le disais, on peut évidemment trier la feuille, puis redéfinir la ListView (voir le fichier) :

Code:
Dim Flag As Boolean

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Range("A:D").Sort Key1:=Columns(ColumnHeader.Index), Order1:=IIf(Flag, xlDescending, xlAscending), Header:=xlGuess
Flag = Not Flag
ListView1.ListItems.Clear
Call USF 'redéfinit la ListView
End Sub

A noter quil serait sans doute utile de rendre la colonne B numérique en lui appliquant le format personnalisé Standard" HEURES".

Bonne journée.

Edit : bonjour JB
 

Pièces jointes

Dernière édition:
Re : Listview avec macro pour classer ordre croissant

bonjour Job75,
j'ai pris votre solution, par contre j'essai de modifier quelques aspects pour lintégrer votre code dans un autre projet,

dans les fait, le classement dois être modélisé sur la plage C7:F7
mais lorsque les données à classer ne commence pas à A1 le classement ne se fait pas parfaitement.

merci
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

N
  • Question Question
Réponses
5
Affichages
3 K
A
Réponses
9
Affichages
5 K
astroghost13
A
A
Réponses
1
Affichages
2 K
nvitalie
N
B
Réponses
2
Affichages
1 K
brocbroc
B
D
Réponses
19
Affichages
5 K
Daniel13
D
Retour