Rapport de message :*
 

Re: Classe Listview absente des bibliothèques

Titre du sujet : Re: Classe Listview absente des bibliothèques
par Guy le 05/04/2011 22:53:48

Bonjour Daniel,

Le petit bout de code suivant devrait aider ta cause :

Option Explicit ' Requis, indispensable, péremptoire et tutti quanti!

' Pour distinguer les majuscules des minuscules dans le tri
' on posera la directive Option Compare Binary. Lors a > A, etc.
Option Compare Text

'---------------------------------------------------------------------------------------
' Procédure : LvwClients_ColumnClick
' Auteur    : Guy Courville
' Date      : mardi 5 avril 2011
'
' But       : Brouillon 1 de solution pour la Problématique 1 soumise par Danisoaz
'             au forum de MyDearFriend
'
' Référence : http://www.mdf-xlpages.com/modules/ne ... opic_id=768#forumpost4567
'
' Note      : Il se peut que la méthode de tri en bacule sur l'une quelconque
'             des colonnes soit inutile. Il suffira alors de filtrer la valeur
'             de ColumnHeader.SubItemIndex à 1 comme dans les lignes de code
'             commentées du classeur original.
'
'---------------------------------------------------------------------------------------
'
Private Sub LvwClients_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
 
  ' Une variable statique pour garder le dernier ordre de tri.
  ' Comme, fort heureusement, l'énumération ListSortOrderConstants
  ' est définie par :
  '
  ' Public Enum ListSortOrderConstants
  '  lvwAscending
  '  lvwDescending
  ' End Enum
  '
  ' et qu'ainsi définies les constantes symboliques de l'énumération ont
  ' pour valeur entière 0 (lvwAscending) et 1 (lvwDescending) respectivement.
  ' On peut basculer la valeur de OrdreDeTri à chaque appel de la
  ' procédure.
  '
  ' Un clic sur une colonne entraîne un tri dans l'ordre inverse du précédent.
  ' À noter qu'à l'initialisation les données sont dans l'ordre du chargement.
  ' Au premier clic, puisque OrdreDeTri = 0 (valeur par défaut) le tri s'effectuera
  ' selon (0 + 1) Mod 2 = 1, soit lvwDescending.
 
  Static OrdreDeTri As MSComctlLib.ListSortOrderConstants
 
  OrdreDeTri = (OrdreDeTri + 1) Mod 2
 
  ' Pour que le tri s'effectue il faut poser la propriété Sorted à True;
  ' on évitera de poser 1 ou 0, la propriété Sorted est un booléen donc
  ' utilisons un Booléen c'est consistant et plus lisible.
  ' MSDN (Microsoft Software Developer Network
)
  ' object.Sorted [= boolean]
  ' ....
  ' Remarks
  ' For the ListView control, the Sorted property must be set to True for the
  ' settings in the SortOrder and SortKey properties to take effect.
  ' Each time the coordinates of a ListItem change, the Sorted property is set to False.

 
  LvwClients.Sorted = True
 
  LvwClients.SortOrder = OrdreDeTri ' Basculera l'ordre de tri à chaque appel.
 
  ' Ici on utilise la propriété
SubItemIndex
  ' MSDN
  ' Remarks
  ' Subitems are arrays of strings representing the ListItem object's data when
  ' displayed in Report view (note : ce qui est le cas ici.).
  ' The first column header always has a SubItemIndex property set to 0
  ' because the small icon and the ListItem object's text always appear in
  ' the first column and are considered ListItem objects rather than subitems.
  ' The number of column headers dictates the number of subitems.
  ' There is always exactly one more column header than there are subitems.
 
  ' Comme la colonne Code est masquée le SubItemIndex nous sert bien...
  ' À valider et à peaufiner...
  LvwClients.SortKey = ColumnHeader.SubItemIndex
 
End Sub
 

Copie correctement ce truc dans ton formulaire UsfClients  en écrasant l'ancienne procédure.

Il se peut que tu aies à polir quelques coins mais commençons par là. On verra pour la suite.

Je monte un classeur minceur avec quelques lignes de données seulement et je te le transmets aussitôt que j'ai une ou deux minutes.

Cordialement,

Guy