kuiu
Messages postés19Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention 9 avril 2006
-
23 août 2005 à 12:39
kuiu
Messages postés19Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention 9 avril 2006
-
25 août 2005 à 03:10
MSFlexgrid
Classification
J'ai
une MSFlexgrid avec 3 colonnes e une dizaine de lignes.
Ces
lignes sont remplies une a une avec un bouton par des données
venant de TextBox, MaskEdBox e ListBox.
La
1º colonne correspond a un date, Format 23-08-05
La
2º colonne ce sont des heures , Format 07:52:06
La
3º c'est du texte, Hbvhigui
Avec
FlexGrid.Sort = 1.....a 9 , je peux faire des classements; cependant
ceux ci prennent en compte seulement la 3º colonne.
Je
veux classer mes lignes en ordre croissant de date et heure.
Une
solution ,mais que je ne veux pas utiliser, serait de traiter la
classification avec Excel et ensuite passer les lignes dans
MSFlexgrid; mais cela tournerait l'application dépendante de
Excel ce que je ne désire pas.
kuiu
Messages postés19Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention 9 avril 2006 23 août 2005 à 17:06
Je
vous remercie pour vos réponses; j'ai fait quelques essais
mais je n'ai pas obtenu les résultats désirés.
Premièrement
je rectifie, le format des dates est 23-08-2005 et non 23-08-05.
Utilisant
" Descending " mes résultats sont montrés
du haut vers le bas de ma grille, ( ce qu'il me faut ) avec
" ascending " ils viennent du bas vers le haut.
J'ai essayé les différentes alternatives de 1 a 8 et
Col 1 ou Col 0 et sans Col ( de là c' est le texte qui
joue).
Quand
ils viennent du haut ils sont du type: par exemple décroissant
en dates.
Pour
les dates il y a un problème lorsque je change de mois, je
crois qu'il s'agit du format de celles ci, qui reprend les premiers
chiffres pour la classification, je crois qu'il faudra que je
transforme en notation américaine car j'ai 25-08-05 ,
24-08-05, 23-08-05, 08-09-05,
Ci
dessous pour éventuellement faciliter, une copie d'une partie du programe pour l'introduction des
données dans le FlexGrid.
'Numeração
das linhas a preencher, 0 = linha dos titulos
Dim
Ln As Byte
Private
Sub CmdAdTar_Click()
Ln
= Ln + 1
If
Ln > 7 Then
MsgBox
" A selecão é de no maximo 7 tarefas",
vbCritical + vbOKOnly, "Limite de tarefas permitidas"
Exit
Sub
End
If
If
LstOpc.Selected(0) Xor LstOpc.Selected(1) _
Xor
LstOpc.Selected(2) Xor LstOpc.Selected(3) _
Xor
LstOpc.Selected(4) Xor LstOpc.Selected(5) _
Xor
LstOpc.Selected(6) Xor LstOpc.Selected(7) _
Xor
LstOpc.Selected(8) Then
GridTar.Col
= 0
GridTar.Row
= Ln
GridTar.Text
= TxtData.Text
GridTar.Col
= 1
GridTar.Row
= Ln
GridTar.Text
= MaskHora.Text
GridTar.Col
= 2
GridTar.Row
= Ln
GridTar.Text
= LstOpc.Text
Cal.Visible
= True
MsgBox
" Confirmar a data do dia ou inserir uma data futura.",
vbOKOnly + vbInformation, "Seleção de data"
LstOpc.Visible
= False
CmdAdTar.Enabled
= False
Else
MsgBox
"Selecionar uma tarefa em sequencia hóraria.",
vbCritical + vbOKOnly, "Seleção indefinida"
kuiu
Messages postés19Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention 9 avril 2006 25 août 2005 à 03:10
Bonsoir
ou pour certains probablement bonjour, car en fait mon horaire est
celui de la France 05h00.
J'ai
analysé un petit peu de plus prêt le problème de
la classification et je l'ai résolu a pratiquement 99,99%.
En
fait quand on demande a MSFlexGrid d'interpréter et de classer
des dates,il ne comprend rien du tout; c'est tout comme si l'on
m'adressait la parole en anglais ou en chinois. Ses paramètres,
constantes, etc.. lui permette seulement d'interpréter des
mots et des valeurs numériques dans les cas 3 et 4.
La
solution est donc de convertir les dates et les heures en numéros
pour que la FlexGrid puissent les interpreter et les classer bien
sur avec ses limitations.
Pour
cela j'ai regroupé dans une seule colonnes les dates et les
heures, séparées par un espace et ainsi faire un tir
unique. Deux tris séparés avec des fusions seraient
plus jolis mais plus compliqués et ne sont pas dans me
nécessités.
J'utilise
une colonne invisible pour les calculs de conversion et ensuite je
fais le tri.
J
'obtient un classement du haut vers le bas en ordre décroissant;
j'aurai préféré en odre croissant mais la, une
fois de plus FlexGrid ne collabore pas beaucoup; ce doit être
possible; c'est a étudier mais comme on dit " Não
gosto de descascar um abacaxi " ( je n'aime pas d'éplucher
un ananas ) et je laisse cela pour les puristes et les spécialistes
" cada macaco no seu galho " ( chaque singe sur
sa branche).
J'ai
dis plus haut 99,99% car il y a parfois des erreurs au niveau de la
seconde; mais qui dans le cas de l'application que je prétends
ne sont pas significatives; c'est le cas par exemple:
25-08-2005
22:22:20
25-08-2005
22:22:21
25-08-2005
22:22:22
22:22:22
donne une erreur de classement; cela doit être du a
l'interprétation de la variable Double.
Ci
dessous une partie du programme relatif au classement.
Pour
mieux comprendre, La MSFlexG a pour nom GridTar cela devrait être
FlexTar, mais j'ai profité d'autres lignes de programme que
j'avais et je n'ai pas changé le nom; manque de temps et
paresse.
'Numeração das linhas a preencher, 0 = linha dos titulos.
Dim Ln As Byte
'Indice da linha a apagar.
Dim I As Byte
'Conversor de datas.
Dim Co As Double
Private Sub CmdAdTar_Click()
Ln = Ln + 1
If Ln > 7 Then
MsgBox " A selecão é de no maximo 7 tarefas", vbCritical + vbOKOnly, "Limite de tarefas permitidas"
Exit Sub
End If
If LstOpc.Selected(0) Xor LstOpc.Selected(1) _
Xor LstOpc.Selected(2) Xor LstOpc.Selected(3) _
Xor LstOpc.Selected(4) Xor LstOpc.Selected(5) _
Xor LstOpc.Selected(6) Xor LstOpc.Selected(7) _
Xor LstOpc.Selected(8) Then
GridTar.Col = 0
GridTar.Row = Ln
GridTar.Text = TxtData.Text & " " & MaskHora.Text
GridTar.Col = 1
GridTar.Row = Ln
GridTar.Text = LstOpc.Text
Cal.Visible = True
MsgBox " Confirmar a data do dia ou inserir uma data futura.", vbOKOnly + vbInformation, "Seleção de data"
LstOpc.Visible = False
CmdAdTar.Enabled = False
Else
MsgBox "Selecionar uma tarefa em sequencia hóraria.", vbCritical + vbOKOnly, "Seleção indefinida"
'Zera a numeração das linhas.
Ln = 0
CmdAdTar.Enabled = True
End If
'Chupacabra invisvel, Largura = 0.
GridTar.ColWidth(3) = 2400
'Cálculo da conversão.
Co = DateValue(GridTar.TextMatrix(Ln, 0)) + TimeValue(GridTar.TextMatrix(Ln, 0))