triage dans une listview

Dennnisss

XLDnaute Occasionnel
Bonjour a tous

J'ai un code que l'intervenant chalet53 m'a aider a ameliorer mon userform , il va tres bien , mais ou je cherche encore a modifier c'est que ce code trie les colonne 1 , 2 , 3, 4, 5 alors je cherche a ameliorer le triage sur la colonne 16 de la listview j'ai tenter de modifier son code helas sans succes alors je me remet a vous les acros pour modifier mon code je vous envoie ce code par ecrit et aussi sous forme de pieces jointes

voici ce code

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
ListView1.Sorted = False
form = ""
ListView1.SortKey = ColumnHeader.Index - 1
Col = ColumnHeader.Index - 1

If Col = 2 Then form = "000" Else If (Col = 4 Or Col = 5) Then form = "00.00" 'colonne mois
If Col = 16 Then form = "000"


If form <> "" Then
For i = 1 To ListView1.ListItems.Count
ListView1.ListItems(i).ListSubItems(Col).Text = _
Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), form)
Next i
End If
If ListView1.SortOrder = lvwAscending Then
ListView1.SortOrder = lvwDescending
Else
ListView1.SortOrder = lvwAscending
End If
ListView1.Sorted = True

End Sub

La ligne en rouge c'est ce que j'ai tenter
alors bonne journee a vous et merci de votre aide

dennnisss:confused:
 

Pièces jointes

  • triage dans listview.zip
    167.9 KB · Affichages: 63
C

Compte Supprimé 979

Guest
Re : triage dans une listview

Bonjour Dennnisss, Chale53 ;)

Sachant que tu as un décalage de colonne avec un Listview (la colonne 1 = 0)
Voici le code avec un petit plus :)

VB:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  Dim Col As Integer, Form As String
 
  ListView1.Sorted = False
  Form = ""
  ListView1.SortKey = ColumnHeader.Index - 1
  Col = ColumnHeader.Index - 1
  If Col = 2 Then Form = "000" Else If (Col = 4 Or Col = 5) Then Form = "00.00"  'colonne mois
  If Col = 15 Then Form = "00;(00)"
  If Form <> "" Then
    For i = 1 To ListView1.ListItems.Count
      ListView1.ListItems(i).ListSubItems(Col).Text = _
      Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
    Next i
  End If
  If ListView1.SortOrder = lvwAscending Then
    ListView1.SortOrder = lvwDescending
  Else
    ListView1.SortOrder = lvwAscending
  End If
  ListView1.Sorted = True
  ' Après le tri Remettre les données en forme d'origine
  If Form <> "" Then
    For i = 1 To ListView1.ListItems.Count
      Select Case Col
        Case 0
          Form = "dd mmm yyyy"
        Case 2
          Form = "hh:mm"
        Case 15
          Form = "0"
      End Select
      ListView1.ListItems(i).ListSubItems(Col).Text = _
      Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
    Next i
  End If
End Sub

Edit : Chalet53 ... je croyais que tu etais en déplacement :eek:
A+
 
Dernière modification par un modérateur:

Dennnisss

XLDnaute Occasionnel
Re : triage dans une listview

Bonjour chalet53 et bruno

Oui chalet j'avais envoyer une reponse sur le net et une sur tes mesages personnels pour te remercier de ton bon code et j'avais mentionner aussi que sur mon dossier principal j'avais 1200 entrees ou fiche et que sur mon programme principal il arretait de trier a 999 il ne triait pas au-dessus je t'avais envoyer un message personnel pour te demander de l'aide mais il faut croire que je n'ai pas fait sa correct , alors merci a toi j'espere que ce message va bien se rendre car votre aide est sensas et tres apprecier

Pour ce qui est du code de bruno j'ai fait un test avec son code moi j'ai des erreur qui se produit exemple sur Case 2 qui est des entrees en Kilometre et lorsque que l'on clic pour trier cette colonne il se transforme en heures alors je verifie ci les case ne sont pas melees entre les colonnes

alors merci a vous deux je retour dans mes devoirs et mille fois merci a toi chalet53
dennnisss
 

Dennnisss

XLDnaute Occasionnel
Re : triage dans une listview

Salut bruno et chalet

je viens de transposer le code sur mon programme principal et comme prevu si je clique sur la premiere colonne de trie soit les fiches il trie jusqu'a 999 et le reste devient encore en trie voici une exemple de la facon qu'il trie

999 jusqu'a 122 tous va bien

123
122
1208
1207
1206
1205
1204
1203
1202
1201
120
1199
ect.......

donc il ne semble plus reconnaitre la quatrieme valeur du chiffre , vous remarquerai que le chiffre 1209 n'apparait pas car il n'a pas encore de fiche d'entree sur ce chiffre j'ai tenter de creer une Case 0 avec le Form "0000" et cela n'a pas regler mon probleme
donc je m'en remet encore a vous les acros

bonne journee dennnisss :)
 

Dennnisss

XLDnaute Occasionnel
Re : triage dans une listview

Salut bruno

Oui j'avais deja essayer ce test qui n'avais pas fonctionner je l'avais essayer a 4 zero a 5 zero et il ne triait pas correct, alors j'ai refait un autre dossiers avec mon programme principal avec des entrees au-dessus de 1000 , ce qui me destabilise hier quand j'avais envoyer sur le forum j'avais mis des exemples au-dessus de 1000 et sur le test de votre code il le fait tres bien mais il ne veut pas le faire sur mon programme principal a moi
alors j'ai refait un autre petit programme a partir du mien et je vous l'envoie sur le fil avec le code de bruno qu'auparavant m'avais transmit avec une correction
dans mon programme principal la colonne des fiches est en format numerique et sans decimal et le chiffre dans la colonne des fiches ce genere seul lorsque j'utiliser un userform appeler Ajouter une fiche

les code de cette ajout sont

Private Sub UserForm_Initialize()
Ajouter.TextBox1.SetFocus
TextBox1.SelStart = 0
TextBox1.SelLength = Len(TextBox1.Value)
TextBox12.Value = Format(0, "#,##0.00 $") '****
TextBox1 = Format(Now, "DD MMMM YYYY")
With Sheets("Entree")
Label19.Caption = .Range("A65536").End(xlUp).Value + 1
End With
End Sub

Private Sub CommandButton1_Click()
Dim cellule As Range
Dim dl1 As Long ' dernière ligne
TextBox1.SetFocus
Dim nomfeuille1 As String
nomfeuille1 = "Entree"
With Sheets(nomfeuille1)
dl1 = .Cells(.Rows.Count, 2).End(xlUp).Row + 1

For Each cellule In .Range("a2:a" & dl1)
If TextBox1.Value = cellule Then
Beep
Call MsgBox("Le date : " & TextBox1.Value _
& vbCrLf & "existe déja " _
& vbCrLf & "Ligne n° :" & cellule.Row _
& vbCrLf & "Numéro :" & cellule.Offset(0, 1).Value _
& vbCrLf & "" _
& vbCrLf & "" _
, vbInformation, "Doublons")

Exit Sub
End If

Next cellule

Application.ScreenUpdating = False
X = MsgBox(" ATTENTION Avez-vous des corrections alors je vais sauvergarder cette facture ", vbQuestion + vbOKCancel, "Nouvelle saison")
If X <> vbCancel Then
With TextBox1
.WordWrap = True
.MultiLine = True
End With

With Feuil2

.Range("A1").Value = Val(Label19.Caption) 'Numero de la fiche
.Range("B1").Value = TextBox1 'Date de la randonnee

je ne vous envoie pas toutes la formule juste la partie essentiel du code

alors j'envoie le petit programme qui me cause beaucoup de soucie
bonne journee
dennnisss:confused:
 

Pièces jointes

  • triage listview(suite).zip
    253.9 KB · Affichages: 78
C

Compte Supprimé 979

Guest
Re : triage dans une listview

Salut Dennnisss,

Pour le tri, remplace ton code par celui-là ;)
VB:
Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
  Dim Col As Integer, Form As String
  ListView1.Sorted = False
  Form = ""
  ListView1.SortKey = ColumnHeader.Index - 1
  Col = ColumnHeader.Index - 1
  ' Selon la colonne on applique un certain format aux valeurs
  Select Case Col
    Case 0
      Form = "00000"
    Case 1
      Form = "0"
    Case 2
      Form = "000"
    Case 4, 5
      Form = "00.00"
    Case 15
      Form = "00;(00)"
  End Select
  ' Si on a appliquer un format
  If Form <> "" Then
    ' Pour chaque ligne de la ListView
    For i = 1 To ListView1.ListItems.Count
      ' Selon la colonne on applique le format déterminé
      Select Case Col
        Case 0
          ' La 1ère colonne n'est pas une sous liste dans une LV
          ListView1.ListItems(i).Text = Format(CDec(ListView1.ListItems(i).Text), Form)
        Case 1
          ' Les dates sont à traiter différemment avec CDate()
          ListView1.ListItems(i).ListSubItems(Col).Text = _
            Format(CDec(CDate(ListView1.ListItems(i).ListSubItems(Col).Text)), Form)
        Case Else
          ' Pour les autres pas de soucis particulier
          ListView1.ListItems(i).ListSubItems(Col).Text = _
            Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
      End Select
    Next i
  End If
  ' Trier la Listview
  If ListView1.SortOrder = lvwAscending Then
    ListView1.SortOrder = lvwDescending
  Else
    ListView1.SortOrder = lvwAscending
  End If
  ListView1.Sorted = True
  ' Après le tri Remettre les données en forme d'origine
  If Form <> "" Then
    For i = 1 To ListView1.ListItems.Count
      Select Case Col
      Case 0
        Form = "#000"
      Case 1
        Form = "dd mmm yyyy"
      Case 3
        Form = "hh:mm"
      Case 4
        Form = "0"
      Case 5
        Form = "0"
      Case 15
        Form = "0"
      End Select
      If Col = 0 Then
        ' La 1ère colonne n'est pas une sous liste dans une LV
        ListView1.ListItems(i).Text = Format(CDec(ListView1.ListItems(i).Text), Form)
      Else
        ListView1.ListItems(i).ListSubItems(Col).Text = _
          Format(CDec(ListView1.ListItems(i).ListSubItems(Col).Text), Form)
      End If
    Next i
  End If
End Sub

A+
 

Dennnisss

XLDnaute Occasionnel
Re : triage dans une listview

salut bruno45

je viens juste de prendre connaissance de ton code
et il va a merveille ca alors c'est sensationnel je suis tres content et je peut simplement dire merci a des gens qui sont a 6 heures
de decallage de mon fuseau horaire vous avez fait un boulot extraordinnaire toi et chalet 53

alors merci de votre aide et a+

un gros merci dennnnisss
 

Discussions similaires

Statistiques des forums

Discussions
312 178
Messages
2 085 980
Membres
103 079
dernier inscrit
sle