trier des dates/heures/min dans un UF

  • Initiateur de la discussion Initiateur de la discussion paul87
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

paul87

XLDnaute Impliqué
bonsoir à tous, bonsoir le forum.
dans un UF j'ai 5 TextBox avec date et heure (dd/mm/yyyy hh:nn)
je souhaiterai arriver à trier du plus ancien au plus récent,...
et afficher le resultat dans des Label..
Je n'y arrive pas!!!
je joint mon fichier de travail...
si quelq'un pouvait m'aiguiller....svp
 

Pièces jointes

Re : trier des dates/heures/min dans un UF

Bonsoir Paul,

Ci-dessous une macro de tri que j'ai adapté pour ton problème. La macro originale est due à je crois à Thierry.

Code:
Private Sub CommandButton1_Click()
    Dim ValMin As Integer, ValSup As Integer
    Dim i As Integer, j As Integer, ii As Integer
    Dim t1 As String, t2 As String
    Dim tab1(5) As Date
    For i = 1 To 5
    tab1(i) = CDate(Controls("Tbx_Date" & i))
    Next i
    ValMin = LBound(tab1)
    ValSup = UBound(tab1)
    For i = ValMin To ValSup
        For j = ValMin + ii To ValSup
            If tab1(i) > tab1(j) Then
                t1 = tab1(j): t2 = tab1(j)
                tab1(j) = tab1(i): tab1(j) = tab1(i)
                tab1(i) = t1: tab1(i) = t2
            End If
        Next j
       ii = ii + 1
    Next i
Me.Lbl_1 = Format(tab1(1), "dd/mm/yyyy hh:nn")
Me.Lbl_2 = Format(tab1(2), "dd/mm/yyyy hh:nn")
Me.Lbl_3 = Format(tab1(3), "dd/mm/yyyy hh:nn")
Me.Lbl_4 = Format(tab1(4), "dd/mm/yyyy hh:nn")
Me.Lbl_5 = Format(tab1(5), "dd/mm/yyyy hh:nn")

End Sub

Tu remplaces simplement ce sous-programme et tout devrait marcher.

Par ailleurs, ce code de tri est très pratique dans beaucoup de cas et permet de trier rapidement un tableau de valeurs.

@+

Gael
 
Re : trier des dates/heures/min dans un UF

bonsoir à tous, bonsoir le forum.
Merci à toi Gael.
avec un peu de travail de transposition, ca va marcher sur mon appli finale
par contre, et j'avais oublié de le préciser au début!!😱
il faut pouvoit trier les dates/heures..meme si les 5 TextBox ne sont pas toutes remplies, cad s'il n'y a que 1 , 2, 3 , 4 dates ou alors les 5
et actuellement si je teste avec seulement moins de 5 dates/heure ca plante..
et j'ai "30/12/1899 00:00" dans les Lbl..
merci par avance pour les conseils..
 
Re : trier des dates/heures/min dans un UF

Bonsoir Paul,

Essaye avec le code suivant:

Code:
Private Sub CommandButton1_Click()
Dim ValMin As Integer, ValSup As Integer
    Dim i As Integer, j As Integer, ii As Integer
    Dim t1 As String, t2 As String
    Dim tab1() As Date
 
    i = 1
 
    ReDim tab1(5)
 
    For j = 1 To 5
    If Controls("Tbx_Date" & i) <> "" Then
    tab1(i) = CDate(Controls("Tbx_Date" & i))
    i = i + 1
    End If
    Next j
 
    ReDim Preserve tab1(i - 1)
 
    ValMin = LBound(tab1)
    ValSup = UBound(tab1)
    For i = ValMin To ValSup
        For j = ValMin + ii To ValSup
            If tab1(i) > tab1(j) Then
                t1 = tab1(j): t2 = tab1(j)
                tab1(j) = tab1(i): tab1(j) = tab1(i)
                tab1(i) = t1: tab1(i) = t2
            End If
        Next j
       ii = ii + 1
    Next i
For i = 1 To UBound(tab1)
Me.Controls("LBL_" & i) = Format(tab1(i), "dd/mm/yyyy hh:nn")
Next i
End Sub

J'ai vérifié chez moi et ça marche.

@+

Gael
 
Re : trier des dates/heures/min dans un UF

bonsoir à tous, bonsoir le forum.
Encore un grand merci à toi Gael.
j'ai fait plein d'essais ...
ça marche presque parfaitement pour le tri....mais pas complétement..
j'ai joint mon fichier de travail...
pour consultation...
merci par avance
 

Pièces jointes

Re : trier des dates/heures/min dans un UF

Bonsoir Paul,

J'ai fait quelques modifs et retesté avec ton nouveau UF et ça a l'air de marcher correctement.

N'oublie pas de bien mettre avant la procédure l'instruction "Option base 1" pour indiquer que le premier élément de chaque table a l'indice 1 et non pas 0.

Nouveau code:

Code:
Option Base 1
Private Sub CommandButton1_Click()
Dim ValMin As Integer, ValSup As Integer
    Dim i As Integer, j As Integer, ii As Integer
    Dim t1 As String, t2 As String
    Dim tab1() As Date, Tabnum() As Integer
    
'Initialisation des variables
    i = 1
    
    ReDim tab1(5)
    ReDim Tabnum(5)
  
'Mémorisation des dates saisies
    For j = 1 To 5
    If Controls("Tbx_Date" & j) <> "" Then
    tab1(i) = CDate(Controls("Tbx_Date" & j)) 'Mémorisation date
    Tabnum(i) = j 'Mémorisation n° emplacement date
    i = i + 1
    End If
    Next j
   
 'Redimensionnement des tables avec le nombre de dates saisies
    ReDim Preserve tab1(i - 1)
    ReDim Preserve Tabnum(i - 1)
    
 'Tri des tables date et N° emplacement
    ValMin = LBound(tab1)
    ValSup = UBound(tab1)
    For i = ValMin To ValSup
        For j = ValMin + ii To ValSup
            If tab1(i) > tab1(j) Then
                t1 = tab1(j): t2 = Tabnum(j)
                tab1(j) = tab1(i): Tabnum(j) = Tabnum(i)
                tab1(i) = t1: Tabnum(i) = t2
            End If
        Next j
       ii = ii + 1
    Next i
'Ecriture des résultats
For i = 1 To UBound(tab1)
Me.Controls("textbox" & i) = Format(tab1(i), "dd/mm/yyyy hh:nn")
Me.Controls("textbox" & i + 5) = Me.Controls("label" & (35 + Tabnum(i)))
Next i
End Sub

@+

Gael
 
Re : trier des dates/heures/min dans un UF

bonsoir à tous, bonsoir le forum.
Merci Gael
apres pas mal de boulot!!!
Je crois que ce coup-ci on touche au but....
j'ai réussi à transposer et adapeter tout le code à mon appli finale...ça marche pour le tri des dates et affichage dans les TextBox concernés !!!!
mais je n'avais pas pensé à un détail d'affichage dans mon appli .😱.les tbx_date...sont affichés par action sur des CheckBox....et c'est le nom de ces CheckBox (caption) qu'il faut que je récupère pour affichage..
c'est ici qu'il faut modifier...
Code:
Me.Controls("textbox" & i + 5) = Me.Controls("label" & (35 + Tabnum(i)))
mais malgré mes essais je n'y arrive pas.!!!!
encore merci
 

Pièces jointes

Re : trier des dates/heures/min dans un UF

Bonsoir Paul,

Je n'y suis pas arrivé directement non plus mais avec une autre solution:

Tu remplaces l'instruction par:

Code:
    Select Case Tabnum(i)
        Case 1
        Me.Controls("textbox" & i + 5) = CheckBox1.Caption
        Case 2
        Me.Controls("textbox" & i + 5) = CheckBox2.Caption
        Case 3
        Me.Controls("textbox" & i + 5) = CheckBox3.Caption
        Case 4
        Me.Controls("textbox" & i + 5) = CheckBox4.Caption
        Case 5
        Me.Controls("textbox" & i + 5) = CheckBox5.Caption
    End Select

et ça marchera très bien.

@+

Gael

PS: je pars demain en WE donc j'espère que tout sera fonctionnel sinon on reprend tout ça lundi
 
Re : trier des dates/heures/min dans un UF

bonsoir à tous, bonsoir le forum.
et encore Merci à toi Gael!!!!
j'ai pas mal bossé pour transposer dans mon appli finale (qui n'a rien à voir avec le fichier joint !!!)
mais ça marche!!!!
Encore un dernier point à modifier et cela sera nickel et terminé.
je souhaiterai pouvoir modifier (par exemple supprimer une selection de CheckBox) sans avoir de message d'erreur, et que l'affichage dans les TextBox soit rafraichit à chaque "click"...cad que si on lance un premier calcul, avec 3 CheckBox de cochés,...si on veut modifier, par exemple refaire le calcul avec 2 CheckBox il reste des infos "inutiles dans les TextBox..
Encore merci par avance!!
 

Pièces jointes

Re : trier des dates/heures/min dans un UF

Bonsoir Paul,

Pour les textbox, il suffit de les remettre à blanc avant le calcul. Il n'y a plus de message d'erreur si l'on ne saisit aucune date et je ne sais pas pourquoi, mais cette fois je suis arrivé à sélectionner le Checkbox.caption directement sans passer par par le Case select.

La procédure est modifiée comme suit:

Code:
Private Sub CommandButton1_Click()
Dim ValMin As Integer, ValSup As Integer
    Dim i As Integer, j As Integer, ii As Integer
    Dim t1 As String, t2 As String
    Dim tab1() As Date, Tabnum() As Integer
    
'Initialisation des variables
    i = 1
    
    ReDim tab1(5)
    ReDim Tabnum(5)
    
'Remise à blanc des résultats
    For j = 1 To 10
    Me.Controls("textbox" & j) = ""
    Next j
    
'Mémorisation des dates saisies
    For j = 1 To 5
    If Controls("Tbx_Date" & j) <> "" Then
    tab1(i) = CDate(Controls("Tbx_Date" & j)) 'Mémorisation date
    Tabnum(i) = j 'Mémorisation n° emplacement date
    i = i + 1
    End If
    Next j
   
   If i = 1 Then Exit Sub 'Aucune date saisie
 'Redimensionnement des tables avec le nombre de dates saisies
    ReDim Preserve tab1(i - 1)
    ReDim Preserve Tabnum(i - 1)
    
 'Tri des tables date et N° emplacement
    ValMin = LBound(tab1)
    ValSup = UBound(tab1)
    For i = ValMin To ValSup
        For j = ValMin + ii To ValSup
            If tab1(i) > tab1(j) Then
                t1 = tab1(j): t2 = Tabnum(j)
                tab1(j) = tab1(i): Tabnum(j) = Tabnum(i)
                tab1(i) = t1: Tabnum(i) = t2
            End If
        Next j
       ii = ii + 1
    Next i
'Ecriture des résultats
For i = 1 To UBound(tab1)
Me.Controls("textbox" & i) = Format(tab1(i), "dd/mm/yyyy hh:nn")
Me.Controls("textbox" & i + 5) = Me.Controls("Checkbox" & Tabnum(i)).Caption
Next i
End Sub

Par ailleurs, je te propose de simplifier un peu les procédures d'initialisation lorsque tu clicques sur une checkbox avec par exemple pour la première:

Code:
Private Sub CheckBox1_Click()
Tbx_Date1 = ""
Tbx_Date1.Visible = CheckBox1.Value
CommandButton2.Visible = CheckBox1.Value
SpinButton1.Visible = CheckBox1.Value
SpinButton2.Visible = CheckBox1.Value
End Sub

A adapter sur les autres.

Dis-moi si tout marche bien maintenant.

@+

Gael
 
Re : trier des dates/heures/min dans un UF

Bonsoir Gael.
bonsoir à tous, bonsoir le forum.
Ca y est !!!
tout est Ok.
c'est vraiment génial!!
Vraiment un trés grand et sincère MERCI à toi pour avoir suivi ce fil ..
Merci pour ta disponibilité et rapidité
Ton aide m'a vraiment été trés précieuse et instructive.

A bientôt sur sur ce FORMIDABLE FORUM 🙂🙂

lorsque je lis certains post ..je crois que j'aurais parfois des solutions aux questions posées, mais je n'ose pas encore poster de réponses...suis pas encore assez sur de moi....
et surtout...vu le niveau des "répondeurs"....je crains de devoir rester encore pas mal de temps au niveau de "questionneur"
 
Re : trier des dates/heures/min dans un UF

Bonsoir paul87, Gael,

Pour saluer Gael, d'un part, et ensuite te dire Paul, qu'il ne faut pas hésiter à répondre, cela va t'aider à t'améliorer.

C'est bon, c'est bien, c'est pas bon, tant pis. Et de loin en loin, la confiance viendra.

A te lire donc.

Bonne soirée.

Jean-Pierre
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

E
Réponses
2
Affichages
837
E
Retour