Sauvegarder et récupérer SortKey et SortOrder dans une ListView

Résolu
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014 - 3 mars 2013 à 18:05
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 4 mars 2013 à 18:53
Bonjour,

J'utilise un contrôle Listview dans un programme qui contient plusieurs colonnes.
Je n'ai aucun problème pour trier les colonnes (par un click sur une colonne), ni en ordre ascendant ni descendant. Je sais aussi les déplacer. Tout ceci est expliqué correctement dans MSDN.
Par contre, lorsque j'ai trié mon contrôle sur la troisième colonne (par exemple, et dans l'ordre descendant), je voudrais sauvegarder l'ordre de tri pour le récupérer lors de l'accès suivant au programme. (Je pense pour ceux qui l'utilisent, à Winzip, si on trie sur la colonne "Chemin", la fois suivante, c'est cette colonne qui est triée).
En sortie de programme, je sauvegarde dans un fichier de paramètres les valeurs de :
ListView.Sorted
ListView.SortOrder
ListView.SortKey

Quand j'entre à nouveau dans le programme, je récupère ces données, et après l'initialisation de mon contrôle, j'essaie de les récupérer en lisant mon fichier :

ListView.Sorted = x
ListView.SortOrder = y
ListView.SortKey = z

Mais rien n'y fait, ma liste reste toujours triée sur la première colonne, et dans l'ordre ascendant.

Merci à celles et ceux qui sauront m'aider, et à charge de revanche.


mcoppa

13 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 18:53
Bien. Content pour toi. Ce sujet est donc à libérer (un clic sur le tag réponse acceptée)

PS : tu dois maintenant mieux comprendre mes messages insistants (dans les deux discussions ouvertes) relatifs à la nécessité de montrer le code utilisé.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mars 2013 à 18:39
Bonjour,
C'est bien, d'avoir enfin ouvert une discussion ad-hoc,
Mais tu ne réponds toujours pas à l'essentiel. Ppour mémoire :
puisque tu ne nous parles :
- ni de dans quoi et avec quel code tu les enregistres !
- ni de l'évènement utilisé pour la récupération, ni du code utilisé pour la récupération !

Tu nous dis pourtant bien :
En sortie de programme, je sauvegarde dans un fichier de paramètres les valeurs de :
ListView.Sorted
ListView.SortOrder
ListView.SortKey

Quand j'entre à nouveau dans le programme, je récupère ces données, et après l'initialisation de mon contrôle, j'essaie de les récupérer en lisant mon fichier :

Ce sont ces codes, que nous avons besoin de voir pour t'aider.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014
3 mars 2013 à 19:35
Je ne comprend toujours pas la question. Mais puis que tu sembles y tenir, je vais l'expliciter un peu plus.
Je suis donc en VB6 et j'ai un TYPE

Type TListe
CHK As Integer ' 0, rien = sélection unique, 1 multisélection, 2 cases à cocher
CPT As Long ' nombre d'éléments total de la liste
Elt As Long ' élément sélectionné
KEY As Integer ' clé en cours (colonne tri)
MAX As Long ' nombre d'éléments maxi de la liste
NBC As Integer ' nombre de colonnes
SRT As Integer ' 0 tri ascend, 1 descend
End Type

Les éléments CPT et Elt sont mis à jour lors du remplissage ou de l'initialisation de la liste et des sélections effectuées. MAX et NBC ne servent pas ici (ils sont statiques), mais dans d'autres programmes.

Lorsque je clique sur une colonne pour trier, j'appelle une procédure et j'enregistre les variables dans ce TYPE :

Public Sub VListColumnClic(Lst As Control, Vlst As TListe, Img As Object, ByVal ColumnHeader As MSComctlLib.ColumnHeader)
Dim clmX As ColumnHeader, Dum As Integer

Vlst.KEY = Lst.SortKey
For Dum = 1 To Lst.ColumnHeaders.Count
Set clmX = Lst.ColumnHeaders.Item(Dum)
clmX.Icon = 0
Next
Set clmX = Lst.ColumnHeaders.Item(ColumnHeader.Index)
' Inverse éventuellement l'ordre de tri
Lst.SortKey = ColumnHeader.Index - 1
If Lst.SortKey = Vlst.KEY Then
Lst.SortOrder = -(-Lst.SortOrder Xor -1)
End If
clmX.Icon = Img.ListImages((Lst.SortOrder + 1)).KEY
Vlst.KEY = Lst.SortKey
Vlst.SRT = Lst.SortOrder

end sub

Je sors donc de la procédure avec la clé de tri, et l'ordre ascendant montant ou descendant dans mes variables Vlst.Key et Vles.SortOrder.

Lors du FormUnload, j'ouvre un fichier de paramètres :

Private Sub Form_Unload(Cancel As Integer)
Dim Dum as integer, Nprm As Integer, Fprm As String, ChmPrg as String
Dim Vlst as Tliste

ChmPrg = CurDir
Fprm = ChmPrg & "\OuDonc.prm"
Nprm = FreeFile

Open Fprm For Binary Access Write As #Nprm
Put #Nprm, , Vlst
Close #Nprm

Quand j'entre de nouveau dans le programme, j'initialise ma ListView normalement, puis j'essaie de lui envoyer mes paramètres de tri :

Private Sub Form_Load()
Dim Dum as Integer, Nprm As Integer, Fprm As String, Vlst as Tliste
' Récupération des paramètres
ChmPrg = CurDir
Fprm = ChmPrg & "\OuDonc.prm"
if Dir(Fprm) <> "" then
Nprm = FreeFile
Open Fprm For Binary Access Read As #Nprm
Get #Nprm, , Vlst
Close #Nprm
else
Vlst.KEY = 1
Vlst.SRT = 0
end if

.
.
.
.
.

' Initialisation de la ListView avec des sous-programmes
VListColumnFont "MS Sans Serif", 10

' Initialisation des largeurs de colonnes
VListColumnWidth tbl(1, 2), String$(20, "X")
VListColumnWidth tbl(2, 2), String$(50, "X")
VListColumnWidth tbl(3, 2), String$(12, "X")
VListColumnWidth tbl(4, 2), String$(12, "X")
VListColumnWidth tbl(5, 2), String$(7, "X")

VListInit ListView1, Vlst, ImageList1, OrgListViewLeft, OrgListViewTop, OrgListViewWidth, OrgListViewHeight, tbl$()
VListFont ListView1, "Courier new", 10

' puis essai de récupérer les sauvegardes
ListView1.Sorted = True
ListView1.SortOrder = Vlst.SRT
ListView1.SortKey = Vlst.KEY


Et là, quelque soit les valeurs, la liste est toujours triée sur la colonne 1 et dans l'ordre ascendant.

Voilà, je crois que tu sais tout maintenant.


mcoppa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 05:27
Bon...
Tu vois ?
Je ne comprend toujours pas la question. Mais puis que tu sembles y tenir, je vais l'expliciter un peu plus.

Ton erreur est bel et bien dans ton code.
Je ne vais, dans ce code, pas plus loin que cela ===>>
Ta structure Vlst est vide (tout à 0) lporsque tu ouvres le fichier pour y écrire !
Et pour cause :
Vlst ne contient rien dans ta procédure Form_Load puisque tu y déclares :
Dim Vlst as Tliste 

Et tu aurais dû avoir le réflexe d'un simple msgbox Vlst.Key (ou autre membre) juste avant l'ouverture en écriture. Tu aurais vu que toujours 0 et tu aurais gagné beaucoup de temps. C'est bel et bien le code écrit en vue de l'enregistrement qui est fautif.
Je me suis arrêté à celle faute-là, dans l'examen de ton code.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014
4 mars 2013 à 09:27
Bonjour,

Non, en fait, je ne le déclare pas à cet endroit (je l'ai ajouté là pour montrer simplement qu'il est déclaré, tu as raison, dans ce cas, il serait vide), mais dans une procédure partagée :

Public FTMP%, FileToFind As String
Public Vlst As TListe
Public Btton_Attrib As Boolean

D'ailleurs dans le FormUnload, ainsi que dans le FormLoad, je le teste, et les valeurs y sont bien.

ListView1.Sorted = True
ListView1.SortOrder = VLST.SRT
ListView1.SortKey = VLST.KEY

Debug.Print ListView1.SortKey
Debug.Print ListView1.SortOrder


mcoppa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 09:58
Prends l'habitude (c'est important) de montrer ton vrai code. Cela évite de ""travailler" sur ce qui n'est pas exactement écrit dans ton appli.
Mets-le, indenté, entre balises code (3ème icône en partant de la droite)
J'en continuerai ensuite l'examen.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 10:04
J'appelle par ailleurs d'ores et déjà ton attention sur le fait qu'il n'est pas très judicieux d'utiliser l'évènement Load, qui intervient lors du chargement.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014
4 mars 2013 à 10:56
J'essaie seulement de simplifier afin que ce soit lisible, car je suis quelques fois un peu tordu !
J'utilise l'évènement Load, car c'est bien lors du chargement que je veux récupérer mes données précédentes. Que faut-il utiliser ?
De toute façon, quel que soit l'endroit où je teste mes valeurs SortKey et SortOrder, je trouve bien les valeurs.
Je te donne ci-dessous mon code entier pour les évènements en question.


Private Sub Form_Load()
Dim Dum As Integer, Nprm As Integer, Fprm As String


' Récupération des paramètres
ChmPrg = CurDir
Fprm = ChmPrg & "\OuDonc.prm"
Caption = "Ou donc, " & Format(Date, "dddd dd mmmm yyyy")

'GoTo Suite
If Dir(Fprm) <> "" Then
Nprm = FreeFile
Open Fprm For Binary Access Read As #Nprm
Get #Nprm, , Prm
Close #Nprm
'(Prm.Gauche, Prm.Haut, Prm.Large, Prm.Hauteur)
Option2(1).Value = Prm.TypeList
XLST.KEY = Prm.CleTri
XLST.SRT = Prm.SensTri
'XLST.CLM = Prm.clmX
DontResize = True
Label3.Top = Prm.Label3Top
Me.Left = Prm.Gauche
Me.Top = Prm.Haut
Me.Width = Prm.Large
Me.Height = Prm.Hauteur
Call Placer
DontResize = False
Call Form_Resize
ChmExeZip = Prm.ChmExeZip
ChmZip = Prm.ChmZip
NomZip = Prm.NomZip
Else
Suite:
Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
XLST.KEY = 1
XLST.SRT = 0
End If

'Si le fichier des erreurs existe, il faut le détruire.
If Dir(CurDir + "\Ou.log") <> "" Then Kill CurDir + "\Ou.log"

' Poser la feuille
' Définition de la ListView
XLST.MAX = 999999999
XLST.NBC = 5
For Dum% = 0 To 1
If Option2(Dum%).Value = True Then
XLST.CHK = Dum% + 1
Exit For
End If
Next

Label3.Caption = "ABCD"
'OrgListViewLeft = Label3.Width
OrgListViewLeft = Frame1.Left
OrgListViewTop = Label3.Height
OrgListViewWidth = Width - 2 * (OrgListViewLeft)
OrgListViewHeight = Height - OrgListViewTop - (Height - Label3.Top)

' on place les Command3
Dim Vum&
Vum = Command3(1).Top - Command3(0).Top
Command3(0).Top = Command1(0).Top
Command3(0).Left = Command1(0).Left
For Dum = 1 To Command3.Count - 1
Command3(Dum).Top = Command3(Dum - 1).Top + Vum
Command3(Dum).Left = Command1(0).Left
Next



ReDim tbl$(XLST.NBC, 2)
tbl(1, 1) = "Fichiers"
tbl(2, 1) = "Chemin"
tbl(3, 1) = "Longueur"
tbl(4, 1) = "Date"
tbl(5, 1) = "Heure"


' Dimensionnement des colonnes
' on va utiliser les propriétés AutoSize de l'étiquette invisible
' VfBox.ColomnsWidth, pour dimensionner, les colonnes

VListColumnFont "MS Sans Serif", 10
VListColumnWidth tbl(1, 2), String$(20, "X")

VListColumnWidth tbl(2, 2), String$(50, "X")
VListColumnWidth tbl(3, 2), String$(12, "X")
VListColumnWidth tbl(4, 2), String$(12, "X")
VListColumnWidth tbl(5, 2), String$(7, "X")

VListInit ListView1, XLST, ImageList1, OrgListViewLeft, OrgListViewTop, OrgListViewWidth, OrgListViewHeight, tbl$()
VListFont ListView1, "Courier new", 10

'*-*-
ListView1.Sorted = True
ListView1.SortOrder = XLST.SRT
ListView1.SortKey = XLST.KEY
'*-*-
Debug.Print ListView1.SortKey
Debug.Print ListView1.SortOrder

.
.
.
end sub


Ci-après, entête du module principal :


Option Explicit

Type TPrm
Gauche As Long
Haut As Long
Large As Long
Hauteur As Long
TypeList As Integer
CleTri As Integer
SensTri As Integer
Label1Left As Long
Label3Top As Long
Label41Left As Long
label42Left As Long
Label4Top As Long
Label2Left As Long
Check1Top As Long
Check1Left As Long
Check3Top As Long
Check4Top As Long
Command1Top As Long
Command1Left As Long
Command2Left As Long
Combo1Top As Long
Frame1Top As Long
Option2Top As Long
ChmExeZip As String ' Chemin et nom du programme de Compression (program files\Winzip\Winzip32.exe
ChmZip As String ' Chemin du dernier fichier Zip enregistré
NomZip As String ' Nom du dernier fichier enregistré
End Type

Public OldFormWidth As Long
Public OldFormHeight As Long
Public OldListView1Height As Long
Public OldListView1Width As Long
Public OrgListViewLeft As Long
Public OrgListViewTop As Long
Public OrgListViewWidth As Long
Public OrgListViewHeight As Long

Public ChmExeZip As String
Public ChmZip As String
Public NomZip As String
Public ChmPrg As String ' Chemin du programme OuDonc

Public Attributs(7) As String
Public AttrPpal As Integer
Public AttrSecd As Integer
Public Racine As String ' c'est la racine de la recherche
Public DateToFind As String

Public FTMP%, FileToFind As String
Public XLST As TListe
Public Btton_Attrib As Boolean
Public TblCheck1() As Integer
Public TblOpt1() As Integer
Public TblCheck3 As Integer
Public Prm As TPrm
Public DontResize As Boolean
Public FteFichier As Boolean
Public SelectAll As Boolean ' drapeau selection tout ou rien


Entête du module partagé :

Option Explicit
Type TListe
CHK As Integer ' 0, rien = sélection unique, 1 multisélection, 2 cases à cocher
CPT As Long ' nombre d'éléments total
Elt As Long ' élément sélectionné
KEY As Integer ' clé en cours (colonne tri)
MAX As Long ' nombre d'éléments maxi de la liste
NBC As Integer ' nombre de colonnes
SRT As Integer ' 0 tri ascend, 1 descend
End Type

Public Type LV_ITEM
Mask As Long
Index As Long
SubItem As Long
State As Long
StateMask As Long
Text As String
TextMax As Long
Icon As Long
Param As Long
Indent As Long
End Type


Cette fois, tu as tout.

mcoppa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 11:06
Il t'avait pourtant été demandé de :
Mets-le, indenté, entre balises code (3ème icône en partant de la droite)

Tel que présenté, ton code donne le torticolis à qui voudrait l'analyser.
Bon. On va procéder autrement, je vais vite fait bien fait isoler, dans une petite appli demo que je vais faire, ce qu'il faut isoler. Tu verras, analyseras et adapteras, hein ...
A tout de suite
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 11:16
Voilà ===>> exemple bâclé, simple, testé ===>>> marche bienh
A toi d'en tirer la moelle et de l'utiliser ===>>

Dans un module .bas :
Type TListe
  CHK As Integer ' 0, rien = sélection unique, 1 multisélection, 2 cases à cocher
  CPT As Long ' nombre d'éléments total de la liste
  Elt As Long ' élément sélectionné
  KEY As Integer ' clé en cours (colonne tri)
  MAX As Long ' nombre d'éléments maxi de la liste
  NBC As Integer ' nombre de colonnes
  SRT As Integer ' 0 tri ascend, 1 descend
End Type
Public titi As TListe



Dans ton Form, avec une listview nommée ListView1 (en lvwreport) :
 
Private Sub Form_Activate()
   ListView1.ColumnHeaders.Add , , "Nom", ListView1.Width / 3
    ListView1.ColumnHeaders.Add , , "prénom ID", ListView1.Width / 3, lvwColumnCenter
    ListView1.ColumnHeaders.Add , , "date de naissance", ListView1.Width / 3
    Randomize
    Dim itmX As ListItem
    For i = 1 To 10
       Set itmX = ListView1.ListItems.Add(, , Chr(Int((10 * Rnd) + 64)))
       itmX.SubItems(1) = Chr(Int((10 * Rnd) + 64))
       itmX.SubItems(2) = Chr(Int((10 * Rnd) + 64))
    Next
    If Dir("d:\lst.txt") <> "" Then
      Open "d:\lst.txt" For Random As #1 Len = Len(titi)
        Get #1, 1, titi
        MsgBox titi.KEY & vbCrLf & titi.SRT
      Close #1
      ListView1.Sorted = True
      ListView1.SortKey = Val(titi.KEY)
      ListView1.SortOrder = Val(titi.SRT)
   End If
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  titi.KEY = 2
  titi.SRT = lvwDescending
  Open "d:\lst.txt" For Random As #1 Len = Len(titi)
    Put #1, 1, titi
   Close #1
End Sub


Bien sûr : choisis donc ton fichier à toi, pour sauvegarder.
Voilà.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014
4 mars 2013 à 11:37
Ok, je recommence, je n'avais pas compris ce qu'étaient les balises code, quant à l'indenté j'espère que ça va passer avec ces balises, sinon en copier-collé, je n'y arrivais pas.
Private Sub Form_Load()
Dim Dum As Integer, Nprm As Integer, Fprm As String

' Récupération des paramètres
ChmPrg = CurDir
Fprm = ChmPrg & "\OuDonc.prm"
Caption = "Ou donc, " & Format(Date, "dddd dd mmmm yyyy")

'GoTo Suite
If Dir(Fprm) <> "" Then
    Nprm = FreeFile
    Open Fprm For Binary Access Read As #Nprm
        Get #Nprm, , Prm
    Close #Nprm
    '(Prm.Gauche, Prm.Haut, Prm.Large, Prm.Hauteur)
    Option2(1).Value = Prm.TypeList
    XLST.KEY = Prm.CleTri
    XLST.SRT = Prm.SensTri
    'XLST.CLM = Prm.clmX
    DontResize = True
    Label3.Top = Prm.Label3Top
    Me.Left = Prm.Gauche
    Me.Top = Prm.Haut
    Me.Width = Prm.Large
    Me.Height = Prm.Hauteur
    Call Placer
    DontResize = False
    Call Form_Resize
    ChmExeZip = Prm.ChmExeZip
    ChmZip = Prm.ChmZip
    NomZip = Prm.NomZip
Else
Suite:
    Move (Screen.Width - Width) / 2, (Screen.Height - Height) / 2
    XLST.KEY = 1
    XLST.SRT = 0
End If

'Si le fichier des erreurs existe, il faut le détruire.
If Dir(CurDir + "\Ou.log") <> "" Then Kill CurDir + "\Ou.log"

' Poser la feuille la feuille
' Définition de la ListView
XLST.MAX = 999999999
XLST.NBC = 5
For Dum% = 0 To 1
    If Option2(Dum%).Value = True Then
        XLST.CHK = Dum% + 1
        Exit For
    End If
Next

Label3.Caption = "ABCD"
'OrgListViewLeft = Label3.Width
OrgListViewLeft = Frame1.Left
OrgListViewTop = Label3.Height
OrgListViewWidth = Width - 2 * (OrgListViewLeft)
OrgListViewHeight = Height - OrgListViewTop - (Height - Label3.Top)

' on place les Command3
Dim Vum&
Vum = Command3(1).Top - Command3(0).Top
Command3(0).Top = Command1(0).Top
Command3(0).Left = Command1(0).Left
For Dum = 1 To Command3.Count - 1
     Command3(Dum).Top = Command3(Dum - 1).Top + Vum
     Command3(Dum).Left = Command1(0).Left
Next



ReDim tbl$(XLST.NBC, 2)
tbl(1, 1) = "Fichiers"
tbl(2, 1) = "Chemin"
tbl(3, 1) = "Longueur"
tbl(4, 1) = "Date"
tbl(5, 1) = "Heure"


' Dimensionnement des colonnes
' on va utiliser les propriétés AutoSize de l'étiquette invisible
' VfBox.ColomnsWidth, pour dimensionner, les colonnes

VListColumnFont "MS Sans Serif", 10
VListColumnWidth tbl(1, 2), String$(20, "X")

VListColumnWidth tbl(2, 2), String$(50, "X")
VListColumnWidth tbl(3, 2), String$(12, "X")
VListColumnWidth tbl(4, 2), String$(12, "X")
VListColumnWidth tbl(5, 2), String$(7, "X")

VListInit ListView1, XLST, ImageList1, OrgListViewLeft, OrgListViewTop, OrgListViewWidth, OrgListViewHeight, tbl$()
VListFont ListView1, "Courier new", 10

'*-*-
    ListView1.Sorted = True
    ListView1.SortOrder = XLST.SRT
    ListView1.SortKey = XLST.KEY
'*-*-
Debug.Print ListView1.SortKey
Debug.Print ListView1.SortOrder
.
.
.
end sub


Ci-après, entête du module principal

Option Explicit

Type TPrm
    Gauche As Long
    Haut As Long
    Large As Long
    Hauteur As Long
    TypeList As Integer
    CleTri As Integer
    SensTri As Integer
    Label1Left As Long
    Label3Top As Long
    Label41Left As Long
    label42Left As Long
    Label4Top As Long
    Label2Left As Long
    Check1Top As Long
    Check1Left As Long
    Check3Top As Long
    Check4Top As Long
    Command1Top As Long
    Command1Left As Long
    Command2Left As Long
    Combo1Top As Long
    Frame1Top As Long
    Option2Top As Long
    ChmExeZip As String         ' Chemin et nom du programme de Compression (program files\Winzip\Winzip32.exe
    ChmZip As String            ' Chemin du dernier fichier Zip enregistré
    NomZip As String            ' Nom du dernier fichier enregistré
    
End Type

Public OldFormWidth As Long
Public OldFormHeight As Long
Public OldListView1Height As Long
Public OldListView1Width As Long
Public OrgListViewLeft As Long
Public OrgListViewTop As Long
Public OrgListViewWidth As Long
Public OrgListViewHeight As Long

Public ChmExeZip As String
Public ChmZip As String
Public NomZip As String
Public ChmPrg As String         ' Chemin du programme OuDonc

Public Attributs(7) As String
Public AttrPpal As Integer
Public AttrSecd As Integer
Public Racine As String                 ' c'est la racine de la recherche
Public DateToFind As String

Public FTMP%, FileToFind As String
Public XLST As TListe
Public Btton_Attrib As Boolean
Public TblCheck1() As Integer
Public TblOpt1() As Integer
Public TblCheck3 As Integer
Public Prm As TPrm
Public DontResize As Boolean
Public FteFichier As Boolean
Public SelectAll As Boolean             ' drapeau selection tout ou rien


Entête du module partagé :

Option Explicit
Type TListe
    CHK As Integer  ' 0, rien = sélection unique, 1 multisélection, 2 cases à cocher
    CPT As Long     ' nombre d'éléments total
    Elt As Long     ' élément sélectionné
    KEY As Integer  ' clé en cours (colonne tri)
    MAX As Long     ' nombre d'éléments maxi de la liste
    NBC As Integer  ' nombre de colonnes
    SRT As Integer  ' 0 tri ascend, 1 descend
End Type

Public Type LV_ITEM
   Mask As Long
   Index As Long
   SubItem As Long
   State As Long
   StateMask As Long
   Text As String
   TextMax As Long
   Icon As Long
   Param As Long
   Indent As Long
End Type



J'espère que cette fois c'est plus clair.

mcoppa
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
4 mars 2013 à 11:44
Bon. Mais c'est maintenant devenu inutile, après la petite démo que je t'ai faite plus haut.
Tu y as à la fois l'essentiel (la moelle), la méthode et la preuve de ce que l'enregistrement et la reprise (et sa bonne exécution) se passent bien.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_mcoppa Messages postés 40 Date d'inscription jeudi 8 avril 2004 Statut Membre Dernière intervention 25 juillet 2014
4 mars 2013 à 18:33
Ok, merci. Excuse-moi de répondre si tard, j'ai eu des empêchements.
En fait, mon code fonctionnait, mais je n'avais pas modifié l'affichage des entêtes de colonnes qui était réalisé pendant l'initialisation, et je me fixais dessus pour dire que ça restait trié sur la première clé.


mcoppa
0
Rejoignez-nous