Autres Trier une listbox par date

Damien281211

XLDnaute Occasionnel
Bonjour a tous
Je vous explique mon soucis
J'effectue une recherche via un formulaire ans une textbox. grâce à une recherche avancée je charge uniquement certaine ligne de ma base de données en fonction d'une reference précise.
Mes données se chargent dans une listbox.
Je souhaiterais savoir si sest possible de trier celle-ci par date chronologique ou alors trier ma colonne de tableau de recherche avancée?
Comment faire l'une ou l'autre ?
Merci d'avance
 

fanch55

XLDnaute Barbatruc
@patricktoulon
Je sais que tu codes plus vite que ton ombre ;),
mais prend le temps de regarder ce que j'ai fait sur ce calendrier qui est le tien pour Fanfan38
Appel à partir d'un userform :
VB:
    With Calendar1
        Set .RefBox = Me.TextBox_dlc
        .Caption = "DLC"
        Select Case True
            Case IsDate(Me.TextBox_dlc):            .RefDate = Me.TextBox_dlc
            Case IsDate(Me.TextBox_date_congel):    .RefDate = DateAdd("m", 6, Me.TextBox_date_congel)
            Case Else:                              .RefDate = DateAdd("m", 6, Date)
        End Select
        .Show
        If IsDate(.Resultat.Value) Then TextBox_dlc = CDate(.Resultat.Value)
    End With
    Unload Calendar1
 

Pièces jointes

  • Calendar1.zip
    1.7 KB · Affichages: 6
Dernière édition:

fanch55

XLDnaute Barbatruc
@patricktoulon
1586276323197.png


Erreur quand on ferme le calendrier sans passer par un bouton jour ....
 

patricktoulon

XLDnaute Barbatruc
oui je l'ai pas fait ca j'ai fait vite
re
voila change la fonction et le query close
VB:
Public Function DValue(objx As Object) As Variant
    With Calendar1
        If TypeName(objx) = "Range" Then placementRange objx Else placementUF objx
        Me.Resultat = objx.Value
        Set Me.obj = objx
        Me.startupposition = 0: Me.Show
        If Trim(Me.Resultat.Value) = "" Then DValue = " ": Exit Function
        If Not IsDate(Trim(Me.Resultat.Value)) Then DValue = Trim(Me.Resultat.Value): Exit Function
        DValue = CDate(Me.Resultat.Value)
        Unload Calendar1
    End With
End Function

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = 0 Then Cancel = True: Calendar1.Resultat.Value = Calendar1.obj.Value: Me.Hide
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
oui car si tu le met pas tu unload donc vide resultat
essai de comprendre que quand la fonction Dvalue est appelée c'est une fonction qui est appellée dans un module classe userform et non un object userform
le but c'est que ca soit la fonction "DValue " qui se charge de tout
  1. le paramétrage
  2. l'enrichissement des variables
  3. le show
  4. la récup de résultat
  5. le unload

essaie tu verra par toi même ;)
il faut bien comprendre cette notion de module classe et d'object userform
 

patricktoulon

XLDnaute Barbatruc
pour etre plus clair si tu saisi pas la nuance
quand je fait
TextBox1 = Calendar1.DValue(TextBox1)
je fait en fait
TextBox1 = Module(Calendar1).DValue(TextBox1)
et non
TextBox1 = userforms("Calendar1").DValue(TextBox1)

l'erreur c'est par ce que tu a mis le userform1 en non modal
mais qu'est ce vous avez a détruire un truc qui fonctionne
prends le étudie le , comprends le fonctionnement , pose des questions , avant de vouloir modifier quoi que ce soit
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Je sais très bien ce qu'est une classe, même si c'est une pseudo classe en tant qu'userform .
ce que je ne comprend pas, c'est que dans le premier fichier envoyé, l'userform s'auto décharge et dans le deuxième avec les modifs , non ....
 

patricktoulon

XLDnaute Barbatruc
si il s'auto décharge dans le premier aussi
arrete de le triturer tu n'a pas les bases visiblement pour en comprendre le principe

tout dois se faire par la fonction "ShowX" pour le premier et "Dvalue" pour le 2d


j'explique
on lance la fonction
VB:
Public Function DValue(objx As Object) As Variant
    With Calendar1
        If TypeName(objx) = "Range" Then placementRange objx Else placementUF objx
        Me.Resultat = objx.Value
        Set Me.obj = objx
        Me.startupposition = 0: Me.Show
       'ELLE S'ARRETE ICI MOMENTANEMENTCAR LE SHOW EST MODAL

DANS LE RESULTAT CHANGE JE HIDE
DONC LA FONCTION REPREND donc SON COUR
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 237
Membres
103 162
dernier inscrit
fcfg