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
Salut à tous,
De retour après maintes bricoles moi aussi .

J'ai galéré toute une journée pour résoudre le problème du symbole décimal selon que le point ou la virgule soit choisi dans les options systèmes et/ou dans les options Excel .
Pas trouvé de solution miracle avec les mises en format proposés par excel ( texte, standard, personnalisé ).
Tout avait l'air de fonctionner correctement tant qu'on ne touche pas aux paramètres systèmes, ce qui est saisi alors dans un mode est mal retranscrit dans l'autre mode, des virgules ou points restent, disparaissent et reviennent. A en devenir fou . :eek:
Surtout pour la référence 156.010, le zéro final a tendance à se faire la malle .:mad:

Bon, ce que j'ai fait pour résoudre/contourner le problème :
J'ai utilisé la bonne vieille méthode de dire directement à Excel que le nombre saisi est en fait une chaine de caractères en le faisant débuter par l'apostrophe (ah que de souvenirs .. )
J'ai donc modifié toutes les références conformément.
Eh bien, tout semble fonctionner correctement .

Ci-joint ma dernière vision de la chose, seule la partie Entrée est traitée , il y a le calendrier de patricktoulon intégré et adapté .
A vous de me dire les erreurs que je n'ai pas trouvées ... ;)

@cp4
Il semblerait que tu ais diantrement avancé , je n'ai pas eu le temps de dépiauter ton fichier, mais je vais m'y atteler dès demain ...

Bonne nuit... o_O
 

patricktoulon

XLDnaute Barbatruc
Bonjour
cp4
Je tiens à te remercier d'avoir amélioré le calendrier de PatrickToulon. Tu avais deviné pourquoi je ne l'avais pas intégré dans mon fichier (date du jour).
Je t'avoue ne pas avoir tout compris (codage). Je t'en serai gré de commenté tes codes.

je suis curieux quelle amélioration aurait il pu apporter
d'autant plus que cette "amélioration"( qui n'en est certainement pas une)aurait du être proposé dans la discussion de la ressource pour qu'elle profite a tous et ne soit pas perdu dans une discussion qui n'a rien a voir avec un calendrier

mon calendrier donne les dates du 01/01/année au 31/12/année il fonctionne très bien il n'y a pas d'amélioration possible ou nécessaire
je souhaiterais bien voir ces soit disant améliorations ;)

j'apprécie d'autant moins car la plus part du temps on vient me demander de corriger un code que j'ai fait alors que c'est un code qui a été touché par pierre paul jacques et qui ne correspond plus a ce que j'ai fait au départ et la plus part du temps c'est la raison des bugs
donc je veux bien voir ce calendrier dans quel état vous me l'avez mis

pour info il a été testé par plus de 1500 personnes sur exploitation différentes et je n'ai pas eu de retours sur d’éventuelle coquille ou bug depuis la version 4.1

edit:
pour info j'ai regardé dans le fichier du post 158 et c'est pas mon calendrier
et je n'ai qu'une chose a dire ;)
quand on sait pas manipuler les api windows on s'abstient ;)d'autant plus que je vois vraiment pas qu'est ce que ça viens faire la
résultat après ouverture du calendrier un grand écran noir pendant quelque secondes et recup par windows
Capture.JPG

ma conclusion ce calendrier je ne sais pas de qui il est mais tu peux le jeter a la poubelle ;)

edit 2
pour info mon calendrier c'est celui la
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour Damien
Bonjour le Fil, le Forum

Je ne comprends toujours pas comment travailler sur ce fichier ?
Questions : j'ai regardé les Fichiers proposés aux post #5 et #158
Pourrais-tu me dire quelles doivent être les Colonnes Présentent dans les différentes feuille "Config" ,"Stock Congel " , Stock Petit Congel , etc .
Quel est le format des Références lors de leur acquisition dans la feuille "Config"
ne peut ton imaginer les transformer , en références parlantes , logiques d'après un tableau prédéfinit
Ex : "CUISSE V. DJT SCIAGE" ===> CVDS-156001 (pour exemple)
Comment sont affectés les Quantités, Emplacements (Cadres) , les diverses Dates etc etc car absent dans "Config" ?
merci par avance
Bonne Journée
Prenez soin de vous
Jean marie
 

patricktoulon

XLDnaute Barbatruc
re
oui je me souviens tres bien de ce calendrier que j'avais coder en 2 minutes reprenant l'apparence du calendrier de fanfan38

mais je n'y ai jamais mis d'api elle sont inutile

pour placer un userform au niveau d'une cellule ou un ctrl ActivX (textbox) dans un userform reprends dans mon calendrier 4.1 dans les ressources les deux subs et tout ira bien ;)

textbox
VB:
Private Sub placementUF(Obj As Object)
    If Not Obj Is Nothing Then
        Dim Lft As Double, Rgt As Double, top As Double, Bot As Double, P As Object, PInsWidth As Double, PInsHeight As Double
        Dim K As Double, Zom As Double, Ombre As Double, EcX As Double, OpWin As Long
        OpWin = Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1)))    'number version system
        If OpWin = 6 Or Int(Val(Application.Version)) < 15 Then EcX = 2: Ombre = 2 Else EcX = 0: Ombre = 0     'ecart cadre
        Lft = Obj.left: top = Obj.top: Set P = Obj.Parent    ' Normalement Page, Frame ou UserForm
        Do
            PInsWidth = P.InsideWidth: PInsHeight = P.InsideHeight    ' Le Page en est pourvu, mais pas le Multipage.
            If TypeOf P Is MSForms.Page Then Set P = P.Parent    ' Prend le Multipage, car le Page est sans positionnement.
            K = (P.Width - PInsWidth) / 2: Lft = (Lft + P.left + K): top = (top + P.top + P.Height - K - PInsHeight)
            If Not (TypeOf P Is MSForms.Frame Or TypeOf P Is MSForms.MultiPage) Then Exit Do
            Set P = P.Parent
        Loop
        Me.left = Lft + EcX + Ombre + ((Obj.Width / 2) * Px)    ' a gauche en top
        Me.top = top + 2 + Ombre + ((Obj.Height / 2) * Py)
    End If
End Sub

range
VB:
Private Function placementRange(Obj As Object)
    If Obj Is Nothing Then Exit Function
    Dim Z#, EcX#, L1#, T1#, C#, R#, Vr As Range, Hx#, Wx#, Ok As Boolean, Op&, PtoPx#, i&
    With ActiveWindow
        PtoPx = (.ActivePane.PointsToScreenPixelsX(72) - .ActivePane.PointsToScreenPixelsX(0)) / 72    'coeff point to pixel

        Op = Int(Val(Mid(Application.OperatingSystem, InStrRev(Application.OperatingSystem, " ") + 1)))    'number version system

        'exit si la cellule injecté n'est pas vible a l'ecran
        For i = 1 To .Panes.Count: Ok = IIf(Not Intersect(.Panes(i).VisibleRange, Obj) Is Nothing, True, Ok): Next
        If Ok = False Then Beep: MsgBox " cette cellule n'est pas visible a l'ecran": Exit Function

        Z = (ActiveWindow.Zoom / 100): Set Vr = .VisibleRange    'Coeff zoom ,  rangevisible partie mobile
        EcX = 4 And Op = 6 And Int(Val(Application.Version)) < 16  'ecart cadre

        L1 = (.ActivePane.PointsToScreenPixelsX(Int(Obj.left)) / PtoPx) * Z + EcX    'placement partie mobile
        T1 = .ActivePane.PointsToScreenPixelsY(Int(Obj.top)) / PtoPx * Z + EcX

        With .Panes(1).VisibleRange: C = .Cells(.Cells.Count).Column: R = .Cells(.Cells.Count).Row: End With    'limite splitrow et splitcolumn

        If .SplitRow > 0 Then  'placement  dans le splitrow
            If Obj.Row < R + 1 And .ScrollRow > R Then T1 = ((.ActivePane.PointsToScreenPixelsY(Vr.Cells(1).top) / PtoPx) * Z) - (Range(Obj, Cells(R, 1)).Height * Z) + EcX
        End If

        If .SplitColumn > 0 Then    'placement  dans le splitcolumn
            If Obj.Column < C + 1 And .ScrollColumn > C Then L1 = ((.ActivePane.PointsToScreenPixelsX(Vr.Cells(1).left) / PtoPx) * Z) - (Range(Obj, Cells(1, C)).Width * Z) + EcX
        End If
    End With

    'option de placement :
    Wx = (Obj.Width / 2) * Z * Px
    Hx = (Obj.Height / 2) * Z * Py
    L1 = L1 + (Wx)
    T1 = T1 + (Hx)
    With Me: .left = L1: .top = T1: End With
End Function

voila ;) et les api poubelle
 

patricktoulon

XLDnaute Barbatruc
button2 =bouton droite de la souris
button1= bouton gauche de la souris
button 4 = click sur roulette souris ( pas le roller de la souris )
pour le clic gauche donc change 2 pour 1 et c'est tout ;)

une chose a savoir
dans toute application windows tu constatera que click droite = question/ menu et click gauche= appliquer/ selection

je l'ai conçu pour que même un débutant s'en sorte
en commentaire en haut de module calendar tu a des exemples pour mémoire
demain tu le réimporte dans un autre fichier tu aura les exemple pour te guider sur son utilisation
c'est pas beau la vie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
de rien
tu t'en souviendra tout ce qui brille n'est pas d'or
les api doivent être utilisées quand elle sont maîtrisées ;)
la moindre erreur peut être fatale ,ce qui a été le cas quand j'ai testé ton fichier 158 initial
tout simplement par ce que toutes les situations (contexte ) n'ont pas été prises en compte
 

patricktoulon

XLDnaute Barbatruc
re
ca me parait correcte
mais les erreur ne venaient pas des déclarations mais du raisonnement lui meme
ce que tu va faire avec les api sur ton pc ne va pas forcement fonctionner chez moi ou même le résultat peut être différent car tu n'aura pas envisagé toutes les possibilité de contexte

par exemple chez moi j'ai le pc sur tv 107 cm en dpi 120 alors ton calcul pixel bye!!bye!!!
 

fanch55

XLDnaute Barbatruc
Salut à tous,

@patricktoulon

Salut patrick, l'userform Calendar1 est celui que tu as proposé à Fanfan38, discussion à laquelle j'avais participé.
( je n'avais alors pas connaissance de celui que tu m'avais adressé en Conversation privée par la suite) .
Je ne m'en suis pas caché, je t'ai cité , faut pas te fâcher . ;)

Celui fourni pour FanFan ne fonctionnait que pour une cellule et ne gérait pas la position.
Je l'ai donc adapté pour :
  1. - gérer la position du calendrier dans un userform
    (j'ai par ailleurs suivi le même cheminement que toi sans Api)
    La textbox (ou combobox) lui est indiquée juste pour déterminer le top et le left.
  2. - mettre ce que je veux dans le Caption
  3. - placer le focus sur le bouton correspondant à la date de la textbox, ce qui me permet de quitter l'userform juste en faisant Entrée si la première date affichée me convient (pas de déplacement à effectuer ni de clic souris)
  4. - pouvoir donner en entrée une date calculée sans forcément la recevoir en retour .
Ce calendrier fonctionne correctement s'il est appelé avec les paramètres adéquats,
sinon il produira l'erreur sur l'instruction Me.left = GetLeft(RefBox), car la textbox origine n'a pas été renseignée et que je n'ai pas mis toutes les vérifications nécessaires pour un développement rapide en mode Draft.
Séquence d'appel :
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

Ceci dit, j'ai récupéré ton dernier module, je n'ai pas de préférences particulières,
la dernière mouture est bien plus riche quoique plus imposante visuellement (mais ceci explique celà). :p

Il fonctionne impeccablement, me reste plus qu'à voir comment adapter les points 2 à 4.

@cp4
En plus du double Click, tu peux utiliser la méthode "Enter" du textbox pour afficher le calendrier.
Je vais commenter mon code, j'avais mis la priorité sur le développement. :)
 

Discussions similaires

Statistiques des forums

Discussions
312 208
Messages
2 086 257
Membres
103 167
dernier inscrit
miriame