XL 2019 Filtre avec Textbox

duplaly

XLDnaute Occasionnel
Bonjour
Je joins mon fichier pour avoir un peu d'aide. J'aimerais pouvoir filtrer la feuille database selon la date inscrite dans le textbox1 qui est dans l'userform. Appel du userform dans la page Contrôle.
Votre aide serait appréciée!
 

Pièces jointes

  • Filter.xlsm
    220.4 KB · Affichages: 42

Jacky67

XLDnaute Barbatruc
bien vu jacky
correction car datepart(ww deconne alors evaluate
donc remplacer
VB:
Controls(.Tag).Caption = DatePart("ww", DateSerial(Calendar.Cbyear.Value, Calendar.Cbmonth.ListIndex + 1, A), IIf(region = 0, vbSunday, vbMonday))
par ça
VB:
 Controls(.Tag).Caption = Evaluate("= ISOWEEKNUM(" & CLng(DateSerial(Calendar.Cbyear.Value, Calendar.Cbmonth.ListIndex + 1, A)) & ")")
Au risque de faire monter la tension :oops: :mad::oops:;)
N'est plus compatible toute version d'Excel
Mon vieux Excel (2007) n'en veut pas, il ne connait pas ISO.....Truc Machin..
Mais ne te casse pas la tête, si cela fonctionne sur les versions plus récente.

Une suggestion, la propriété "ListRows" du contrôle "Cbmonth" pourrait passer de 8 à 12 pour éviter l'ascenseur.
 

patricktoulon

XLDnaute Barbatruc
et oui je suis en train de chercher dans mes archive dossier dates j'avais deja trouvé une macro pour les isoweek sur 2007 mais comme j'ai changé pour 2013 j'ai plus regardé ces trucs

le list row oui si tu veux normalement dans la version télechargeable c'est fait (je crois)
je cherche pour iso ;)
 

patricktoulon

XLDnaute Barbatruc
Tiens met toi la de coté ça peut servir c'est kado ;)
LA fonction
VB:
Function ISOWEEK2007(dat As Date, Optional region = 1): ISOWEEK2007 = DatePart("ww", dat - Weekday(Date, IIf(region = 0, 2, 1)) + 4, 2, 2): End Function
et pour la tester
VB:
Sub test()
    MsgBox ISOWEEK2007(CDate("01/01/2021"), 0)    'EN  US
    MsgBox ISOWEEK2007(CDate("01/01/2021"), 1)    'EN  FR
    MsgBox ISOWEEK2007(CDate("01/01/2021"))       'EN  FR
End Sub

et pour la formule c'est pareil
pour une date en US c'est =ISOWEEK2007(A2;0)
pour une date en FR c'est =ISOWEEK2007(A2;1)

c'est beau la vie non?
 

Jacky67

XLDnaute Barbatruc
Tiens met toi la de coté ça peut servir c'est kado ;)
LA fonction
VB:
Function ISOWEEK2007(dat As Date, Optional region = 1): ISOWEEK2007 = DatePart("ww", dat - Weekday(Date, IIf(region = 0, 2, 1)) + 4, 2, 2): End Function
et pour la formule c'est pareil
pour une date en US c'est =ISOWEEK2007(A2;0)
pour une date en FR c'est =ISOWEEK2007(A2;1)

c'est beau la vie non?
Heu..!!
01/01/20 donne 52

Perso, j'utilise celle-ci pour le N° de semaine iso fr
VB:
Function NumSem(dDate As Date) As Integer
    Dim T As Long
    T = DateSerial(Year(dDate + (8 - Weekday(dDate)) Mod 7 - 3), 1, 1)
    NumSem = (dDate - T - 3 + (Weekday(T) + 1) Mod 7) \ 7 + 1
End Function
Dans une cellule
=NumSem(A2)
et
=NO.SEMAINE() pour les US
 

patricktoulon

XLDnaute Barbatruc
ok elle est bonne
sinon tu a celle la aussi
VB:
Sub test()
    MsgBox ISOWEEK2007US(CDate("01/01/2021"))
End Sub


Function ISOWEEK2007US(dat As Date)
    Dim X&
    X = CLng(dat)
    ISOWEEK2007US = Evaluate("= TRUNC((" & X & "-WEEKDAY(" & X & ",2)+11-DATE(YEAR(" & X & "-WEEKDAY(" & X & " ,2)+4),1,1))/7)")
End Function
 

duplaly

XLDnaute Occasionnel
Bonjour
Merci pour le support donné à ma demande.
J'avance très bien dans mon projet.
J'aimerais afficher le calendrier en faisant un clic droit seulement sur les colonnes A-C-E.
Comment modifier le code?

Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True

If Target(1).Row = 1 Or Target.Columns.Count > 1 Then Exit Sub

Select Case Target.Column

Case 1: Target = Calendar.ShowX(Target(1), 2, 0, 0): ' region = 0 ou "US" Etats Unis

Case 2: Target = Calendar.ShowX(Target(1), 2, 0, 1): ' region = 1 ou "FR" France

Case 3: Target = Calendar.ShowX(Target(1), 2, 0, 2): ' region = 2 ou "CA" Canada

Case Else: Target = Calendar.ShowX(Target(1), 0, 2): 'automatique region

End Select

'Unload Calendar
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
Option Explicit

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
if not intersect(target,[A:C])is nothing and target.count=1 then
Target = Calendar.ShowX(Target, 2, 0, 1): ' region = 1 ou "FR" France
Cancel = True
end if
End Sub
 

duplaly

XLDnaute Occasionnel
Bonjour
En travaillant avec le calendrier, je viens de réaliser qu'il y a une erreur pour les semaines.
il est disposé du lundi au dimanche alors qu'il doit être du dimanche au samedi si on veut que les # de semaines fonctionnent.
Est-ce possible pour toi de corriger le calendrier pour moi?
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
du dimanche au samedi c'est pour le mode us

pour le mode fr c'est du lundi au dimanche

c'est a toi de le déterminer dans l'appel

appel français
.cells(1)=Calendar.ShowX(.Cells(1), 2, 0, 1)
1604034029185.png



appel US
.cells(1)= Calendar.ShowX(.Cells(1), 2, 0, 0)

1604033887567.png
 

Jacky67

XLDnaute Barbatruc
Re...
Suggestion dans la dernière version :rolleyes:
Paques=Pâques
Fete du travail=Fête du travail
Pentecote=Pentecôte
Asomption=Assomption

Et si tu n'es pas fâché avec les Alsaciens/Mosellans
Ils ont 2 jours de congé supplémentaire.
Vendredi Saint ==>Pâques -2
Saint Etienne==> Noël+1
Mais Chut!!, si le Ministre du moment s'en rend compte, il sera capable de les supprimer.;)
Tu pourrais mettre en commentaire et les Alsaciens/Mosellans valideront.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
tiens jacky en attendant que la MSJ soit dispo
VB:
Case 1
        If Weekday(DateSerial(Calendar.Cbyear, Calendar.Cbmonth.ListIndex + 1, ctrlJ.Caption), vbMonday) > 5 Then férié = RGB(200, 150, 150)
        Select Case True   ' Francais,French
        Case dat = CDate("01/01/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Nouvel an"                   '  nouvel an       fixe
        Case dat = CDate("01/05/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "fête du travail"             '  fete du travail fixe
        Case dat = paques: férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Pâques"                                              '  paques ok        calculée
        Case dat = paques + 39: férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Ascension"                                      '  ascension        calculée
        Case dat = paques + 49: férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Pentecôte"                                      '  pentecote        calculée
        Case dat = paques + 50: férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Lundi de Pentecote"                                      '  pentecote        calculée
        Case dat = CDate("08/05/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Fête de la victoire 1945"    '  Victoire 1945    fixe
        Case dat = CDate("14/07/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Fête Nationale"              '  fete nationale   fixe
        Case dat = CDate("15/08/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Assomption"                  '  Assomption       fixe
        Case dat = CDate("01/11/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Toussaint"                   '  Toussaint        fixe
        Case dat = CDate("11/11/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "Armistice 1918"              '  Armistice 1918   fixe
        Case dat = CDate("25/12/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "NOEL"                        '  noel             fixe
        Case dat = paques + 2: férié = RGB(255, 230, 0): ctrlJ.ControlTipText = "(Alsace)Vendredi saint"                          ' (Alsace)Vendredi saint" calculée
        Case dat = CDate("26/12/" & Cbyear.Value): férié = RGB(255, 200, 0): ctrlJ.ControlTipText = "(Alsace) Saint Etienne"      ' (Alsace) Saint Etienne fixe"
;)
 

Discussions similaires

Réponses
16
Affichages
445

Statistiques des forums

Discussions
312 038
Messages
2 084 824
Membres
102 681
dernier inscrit
racsam77