Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Listbox en fonction d'une date se produisant dans l'année

ced91300

XLDnaute Occasionnel
Bonjour à tous,

j'ai une Listbox qui recherche et affiche les lignes d'une feuille dont les dates en colonne D se produisent dans l'année (le vba fonctionne).
en revanche, j'ai besoin en + la même chose sur 3 autres ListBox dont :
une ListeBox pour le mois de l'année en cours
une ListeBox se produisant dans les 30 jour à venir
une ListeBox des dates dépassées

Mon fichier joint .
merci beaucoup
Cordialement
Cédric
 

Pièces jointes

  • ESSAI_CED.xlsm
    28.6 KB · Affichages: 6

Gégé-45550

XLDnaute Accro
Bonsoir,
Comme ça ?
Cordialement,
 

Pièces jointes

  • ESSAI_CED.xlsm
    38.1 KB · Affichages: 2

job75

XLDnaute Barbatruc
Bonjour ced91300, Gégé-45550,

Une autre solution qui n'introduit pas de lignes vides dans les ListBox :
VB:
Private Sub UserForm_Initialize()
Dim tablo, tabannee(), tabmois(), tabjours(), tabpasses(), i&, dat, n1&, j%, n2&, n3&, n4&
    tablo = [totoH] 'tableau structuré
    For i = 1 To UBound(tablo)
        dat = tablo(i, 4)
        If IsDate(dat) Then
            dat = CDate(dat)
            If Year(dat) = Year(Date) Then
                ReDim Preserve tabannee(3, n1) 'base 0
                For j = 0 To 3: tabannee(j, n1) = tablo(i, j + 1): Next j
                n1 = n1 + 1
            End If
            If Year(dat) = Year(Date) And Month(dat) = Month(Date) Then
                ReDim Preserve tabmois(3, n2) 'base 0
                For j = 0 To 3: tabmois(j, n2) = tablo(i, j + 1): Next j
                n2 = n2 + 1
            End If
            If dat >= Date And dat <= Date + 30 Then
                ReDim Preserve tabjours(3, n3) 'base 0
                For j = 0 To 3: tabjours(j, n3) = tablo(i, j + 1): Next j
                n3 = n3 + 1
            End If
            If dat < Date Then
                ReDim Preserve tabpasses(3, n4) 'base 0
                For j = 0 To 3: tabpasses(j, n4) = tablo(i, j + 1): Next j
                n4 = n4 + 1
            End If
        End If
    Next i
    '---restitutions---
    If n1 = 1 Then
        annee.AddItem ""
        For j = 0 To 3: annee.List(0, j) = tabannee(j, 0): Next j
    Else
        annee.List = Application.Transpose(tabannee) 'Transpose est limitée à 65536 lignes
    End If
    If n2 = 1 Then
        mois.AddItem ""
        For j = 0 To 3: mois.List(0, j) = tabmois(j, 0): Next j
    Else
        mois.List = Application.Transpose(tabmois)
    End If
    If n3 = 1 Then
        jours.AddItem ""
        For j = 0 To 3: jours.List(0, j) = tabjours(j, 0): Next j
    Else
        jours.List = Application.Transpose(tabjours)
    End If
    If n4 = 1 Then
        passes.AddItem ""
        For j = 0 To 3: passes.List(0, j) = tabpasses(j, 0): Next j
    Else
        passes.List = Application.Transpose(tabpasses)
    End If
End Sub
A+
 

Pièces jointes

  • ESSAI_CED(1).xlsm
    28.2 KB · Affichages: 4

ced91300

XLDnaute Occasionnel
Bonsoir Job75

Merci à toi également Job75, les deux solutions sont nickel pour moi
Cordialement
Cédric
 

job75

XLDnaute Barbatruc
Bonjour ced91300, le forum,

@ChTi160 sur un autre fil m'a rappelé l'utilisation de la propriété .Column des ListBox, merci.

Ici c'est bien plus simple :
VB:
    '---restitutions---
    annee.Column = tabannee
    mois.Column = tabmois
    jours.Column = tabjours
    passes.Column = tabpasses
A+
 

Pièces jointes

  • ESSAI_CED(2).xlsm
    27.7 KB · Affichages: 3

Discussions similaires

Réponses
21
Affichages
2 K
Réponses
16
Affichages
728
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…