begin process at 2012 02 12 17:42:15
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > TRI SIMULTANÉ DES PLUSIEURS COLONNES DANS UN MSFLEXGRID

TRI SIMULTANÉ DES PLUSIEURS COLONNES DANS UN MSFLEXGRID


 Information sur la source

Note :
8,25 / 10 - par 4 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :01/05/2005 Vu / téléchargé :8 190 / 1 016

Auteur : Bob06

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Voila, comme le dit le titre, un petit code qui permet de trier en même temps plusieurs colonnes dans un MSFlexGrid.
J'avais besoin d'une méthode pour un tri de ce type dans un MSFlexGrid, il y a quelques jours, et j'avais demandé  de l'aide sur le site à ce sujet, mais les  nombreuses réponses que j'ai obtenues (et je remercie encore leurs auteurs) ne m'ont pas permis de résoudre mon problème.
Alors je me suis creusé un peu la tête et en m'aidant des réponses reçues, j'ai trouver ceci.

Source

  • Private Sub Form_Load()
  • '**** J'ai piocher quelques lignes de code à droite et à gauche dans le site ****
  • '**** et je remercie tous leur auteurs (ils se reconnaitront)pour leur aide. ****
  • Dim I As Integer
  • 'Le MSFlexGrid1 comprend 3 colonnes
  • 'Initialisation des Colonnes
  • 'Dimension
  • 'La 3ième colonne est à 0 (pour être invisible, car finalement on n'en a pas besoin)
  • MsFlexGrid1.ColWidth(0) = 2500
  • MsFlexGrid1.ColWidth(1) = 1500
  • MsFlexGrid1.ColAlignment(1) = flexAlignCenterCenter
  • MsFlexGrid1.ColWidth(2) = 0'Titre des colonnes 0 et 1
  • MsFlexGrid1.Row = 0
  • MsFlexGrid1.Col = 0
  • MsFlexGrid1.Text = "Prénoms"
  • MsFlexGrid1.Col = 1
  • MsFlexGrid1.Text = "Date"
  • 'Initialisation de la MSFlexGrid1
  • For I = 1 To 11 ' Ajoute 10 éléments.
  • MsFlexGrid1.Rows = 11
  • MsFlexGrid1.AddItem ""
  • 'MsFlexGrid1.Col = 0
  • MsFlexGrid1.TextMatrix(I, 0) = SomeName(I) 'Prénoms
  • MsFlexGrid1.TextMatrix(I, 1) = SomeDate(I) 'Dates
  • Next I
  • Label1 = "A l'ouverture de la feuille les prénoms et les dates sont dans le désordre."
  • End Sub
  • Private Function SomeName(I As Integer) As String
  • 'Liste des prénoms
  • Select Case I
  • Case 1
  • SomeName = "Pierre"
  • Case 2
  • SomeName = "Paul"
  • Case 3
  • SomeName = "Pierre"
  • Case 4
  • SomeName = "Jacques"
  • Case 5
  • SomeName = "Paul"
  • Case 6
  • SomeName = "Bob"
  • Case 7
  • SomeName = "Nathalie"
  • Case 8
  • SomeName = "Edwige"
  • Case 9
  • SomeName = "Nathalie"
  • Case 10
  • SomeName = "Pierre"
  • Case 11
  • SomeName = "Bob"
  • End Select
  • End Function
  • Private Function SomeDate(I As Integer) As String
  • 'Liste des dates
  • Select Case I
  • Case 1
  • SomeDate = "12/10/1982"
  • Case 2
  • SomeDate = "15/07/1995"
  • Case 3
  • SomeDate = "08/05/1975"
  • Case 4
  • SomeDate = "13/06/1998"
  • Case 5
  • SomeDate = "30/11/1989"
  • Case 6
  • SomeDate = "24/05/1981"
  • Case 7
  • SomeDate = "04/04/1977"
  • Case 8
  • SomeDate = "19/06/1981"
  • Case 9
  • SomeDate = "06/09/1995"
  • Case 10
  • SomeDate = "28/06/1985"
  • Case 11
  • SomeDate = "26/03/1990"
  • End Select
  • End Function
  • Private Sub Option1_Click()
  • 'Trie la colonne 0 (les prénoms)
  • MsFlexGrid1.Col = 0
  • MsFlexGrid1.Sort = flexSortStringAscending
  • Label1 = "Les prénoms sont bien dans l'ordre alphabetique, mais les dates pour les doublons" & _
  • " ne sont pas dans l'ordre ascendant (ou descendant, suivant le code)."
  • End Sub
  • Private Sub Option2_Click()
  • 'Trie la colonne 1 (les dates)
  • On Error Resume Next
  • 'Passe en revue les lignes de la colonne
  • MsFlexGrid1.Col = 1
  • For I = 1 To MsFlexGrid1.Rows - 1
  • MsFlexGrid1.Row = I
  • 'Transforme dans un premier temps, la chaîne de texte en une date
  • 'que l'on transforme ensuite en Long
  • MsFlexGrid1.Text = CLng(DateValue(MsFlexGrid1.Text))
  • Next
  • 'On trie la colonne
  • MsFlexGrid1.Sort = flexSortNumericAscending
  • 'Affiche à nouveau les dates dans la colonne
  • For I = 1 To MsFlexGrid1.Rows - 1
  • MsFlexGrid1.Row = I
  • MsFlexGrid1.Text = CDate(MsFlexGrid1.Text) 'On retransforme le text en date
  • Next
  • Label1 = "les dates sont bien dans l'ordre ascendant, mais les prénoms ne sont plus dans l'ordre alphabetique"
  • End Sub
  • Private Sub Option3_Click()
  • 'Remplissage et trie la colonne 2 (celle qui est invisible)
  • On Error Resume Next
  • For I = 1 To MsFlexGrid1.Rows - 1
  • MsFlexGrid1.Row = I
  • MsFlexGrid1.Col = 2
  • 'On définit le text pour chaque ligne de la colonne 2,
  • 'qui comprend le text de la colonne 0 auquel on ajoute
  • 'le text de la colonne 1 (transformé en date (DateValue) puis en long (CLng))
  • 'puis le nombre ainsi obtenu en chaine de caractères (Str$)
  • MsFlexGrid1.Text = Trim(MsFlexGrid1.TextMatrix(I, 0)) + Str$(CLng(DateValue(MsFlexGrid1.TextMatrix(I, 1))))
  • Next
  • 'On trie la colonne 2
  • MsFlexGrid1.Col = 2
  • MsFlexGrid1.Sort = flexSortStringAscending
  • Label1 = "Et voila ! Les prénoms sont dans l'ordre alphabetique et les date sont " & _
  • "dans l'ordre ascendant pour les prénoms en double (voir en triple)."
  • End Sub
Private Sub Form_Load()

'**** J'ai piocher quelques lignes de code à droite et à gauche dans le site ****
'**** et je remercie tous leur auteurs (ils se reconnaitront)pour leur aide. ****

Dim I As Integer
'Le MSFlexGrid1 comprend 3 colonnes
'Initialisation des Colonnes
'Dimension 
'La 3ième colonne est à 0 (pour être invisible, car finalement on n'en a pas besoin)
MsFlexGrid1.ColWidth(0) = 2500
MsFlexGrid1.ColWidth(1) = 1500
MsFlexGrid1.ColAlignment(1) = flexAlignCenterCenter
MsFlexGrid1.ColWidth(2) = 0'Titre des colonnes 0 et 1
MsFlexGrid1.Row = 0
MsFlexGrid1.Col = 0
MsFlexGrid1.Text = "Prénoms"
MsFlexGrid1.Col = 1
MsFlexGrid1.Text = "Date"
'Initialisation de la MSFlexGrid1
For I = 1 To 11 ' Ajoute 10 éléments.
    MsFlexGrid1.Rows = 11
    MsFlexGrid1.AddItem ""
    'MsFlexGrid1.Col = 0
    MsFlexGrid1.TextMatrix(I, 0) = SomeName(I) 'Prénoms
    MsFlexGrid1.TextMatrix(I, 1) = SomeDate(I) 'Dates
Next I
Label1 = "A l'ouverture de la feuille les prénoms et les dates sont dans le désordre."
End Sub
Private Function SomeName(I As Integer) As String
'Liste des prénoms
Select Case I
Case 1
SomeName = "Pierre"
Case 2
SomeName = "Paul"
Case 3
SomeName = "Pierre"
Case 4
SomeName = "Jacques"
Case 5
SomeName = "Paul"
Case 6
SomeName = "Bob"
Case 7
SomeName = "Nathalie"
Case 8
SomeName = "Edwige"
Case 9
SomeName = "Nathalie"
Case 10
SomeName = "Pierre"
Case 11
SomeName = "Bob"
End Select
End Function

Private Function SomeDate(I As Integer) As String
'Liste des dates
Select Case I
Case 1
SomeDate = "12/10/1982"
Case 2
SomeDate = "15/07/1995"
Case 3
SomeDate = "08/05/1975"
Case 4
SomeDate = "13/06/1998"
Case 5
SomeDate = "30/11/1989"
Case 6
SomeDate = "24/05/1981"
Case 7
SomeDate = "04/04/1977"
Case 8
SomeDate = "19/06/1981"
Case 9
SomeDate = "06/09/1995"
Case 10
SomeDate = "28/06/1985"
Case 11
SomeDate = "26/03/1990"
End Select
End Function

Private Sub Option1_Click()
'Trie la colonne 0 (les prénoms)
MsFlexGrid1.Col = 0
MsFlexGrid1.Sort = flexSortStringAscending
Label1 = "Les prénoms sont bien dans l'ordre alphabetique, mais les dates pour les doublons" & _
" ne sont pas dans l'ordre ascendant (ou descendant, suivant le code)."
End Sub

Private Sub Option2_Click()
'Trie la colonne 1 (les dates)
On Error Resume Next
'Passe en revue les lignes de la colonne
MsFlexGrid1.Col = 1
For I = 1 To MsFlexGrid1.Rows - 1
    MsFlexGrid1.Row = I
    'Transforme dans un premier temps, la chaîne de texte en une date
    'que l'on transforme ensuite en Long
    MsFlexGrid1.Text = CLng(DateValue(MsFlexGrid1.Text))
Next
'On trie la colonne
MsFlexGrid1.Sort = flexSortNumericAscending
'Affiche à nouveau les dates dans la colonne
For I = 1 To MsFlexGrid1.Rows - 1
    MsFlexGrid1.Row = I
    MsFlexGrid1.Text = CDate(MsFlexGrid1.Text) 'On retransforme le text en date
Next
Label1 = "les dates sont bien dans l'ordre ascendant, mais les prénoms ne sont plus dans l'ordre alphabetique"
End Sub

Private Sub Option3_Click()
'Remplissage et trie la colonne 2 (celle qui est invisible)
On Error Resume Next
For I = 1 To MsFlexGrid1.Rows - 1
    MsFlexGrid1.Row = I
    MsFlexGrid1.Col = 2
    'On définit le text pour chaque ligne de la colonne 2,
    'qui comprend le text de la colonne 0 auquel on ajoute
    'le text de la colonne 1 (transformé en date (DateValue) puis en long (CLng))
    'puis le nombre ainsi obtenu en chaine de caractères (Str$)
    MsFlexGrid1.Text = Trim(MsFlexGrid1.TextMatrix(I, 0)) + Str$(CLng(DateValue(MsFlexGrid1.TextMatrix(I, 1))))
Next
'On trie la colonne 2
MsFlexGrid1.Col = 2
MsFlexGrid1.Sort = flexSortStringAscending
Label1 = "Et voila ! Les prénoms sont dans l'ordre alphabetique et les date sont " & _
"dans l'ordre ascendant pour les prénoms en double (voir en triple)."
End Sub

 Conclusion

Dans cet exemple le tri se fait sur 2 colonnes, mais rien n'empèche de le faire sur un nombre plus grand.
Soyez indulgent sur la forme du code, je suis débutant, mais j'espère que celà pourra aider quelqu'un....
J'ai commenté au mieux le code. et si il y a plus simple, faite moi un petit signe
merci
Bob06

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip TEXTBOX EN NUMÉRIQUE par 320C
Source avec Zip DÉCIMAL TO HEXDECIMAL par loulou27200
SOUS-TITRES : INCRÉMENTATION DE TOUTES LES CHAÎNES DE CARACT... par ALMIRA
Source avec Zip Source avec une capture EVALUER UN NOMBRE D'OBJETS AVEC UNE BALANCE ET DEUX ÉCHANTIL... par lexsty
Source avec Zip Source avec une capture PETIT LOGICIEL DE DEVIS SANS BD par lololilizozo

Commentaires et avis

Commentaire de PROGRAMMIX le 01/05/2005 13:45:35

Effectivement, il fallait y penser.

9/10

Commentaire de yannn le 01/05/2005 15:48:20

Quel composant faut il rajouter pour utiliser un MsFlexGrid ?

Commentaire de Bob06 le 02/05/2005 14:49:55

Il faut utiliser
Microsoft hierarchical Flexgrid Control 6.0 (OLEDB)

Commentaire de lemings le 24/06/2005 13:47:16

merçi

Commentaire de drissou le 14/05/2006 23:22:04

salut je viens de tomber sur ton prog de tri.
Super, bien pensé..
je vais noter 9 aussi.
Il serait peut être intéressant , pour que cela soit 'transparent' pour le programmeur, de créer à la volée la colonne ui servira de tri, en fin de tableau,de taille 0 bien sur, de faire sytématiquement le transfert des ddonnées dans cette colonne , trier et ensuit suppirmer la colonne..
Drissou

Commentaire de Bob06 le 15/05/2006 10:03:51

Oui, c'est une idée a creuser..., il y a certainement plus simple. Mais, quand a suprimer la colonne.... celle-ci étant invisible, elle ne gêne pas beaucoup, et en cas de suppression de la colonne en fin de tri, il faudrait la recréer à chaque fois que l'on ajoute des données. Un peu compliqué. De plus si on veut modifier le tri (par nom, date, nombre etc...)sur un nombre de colonne plus grand, à l'aide de boutons options ou autres, sa disponibilité permanente est bien utile.
Bob06

Commentaire de petiflamand le 03/12/2006 10:19:30

Bonjour , je vient de trouver ce code de tri pour msflexgrid
Mais je ne comprend pas pourquoi si on trie des nombres du genre
01 25 35 02 10 09 13 53
il donne
01 10 02 09 13 25 35 53
et pas
01 02 09 10 13 25 35 53
il trie en binaire et pas numeriquement
??????

Commentaire de Bob06 le 04/12/2006 09:24:33

Bonjour petiflamand
Simplement parce que ce code classe des dates dans un ordre ascendant (ou descendant).
Pour classer des nombres, il faut modifier les procédures Private Sub Option2_Click() et Private Sub Option3_Click()

Commentaire de DIYADO le 04/06/2007 19:07:00

Merci Bob06,
Ton code m'a bcp aidé. Moi je l'utilise sur click de l'entête de colonne et c'est très efficace dans mon pti projet de classe.
A+

Commentaire de plecoq le 26/01/2008 16:47:31

très bon code - merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales