XL 2010 transfert listbox avec critère

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour
J'avais réussi le 1er jet de transfert de la feuille data ( juste col C & D ) vers l'autre feuille dans la listbox , mais là il faudrait ne transférer que les DAta du jour (col A)
Que modifier dans mon code ?
merci
 

Pièces jointes

  • test_list select.xlsm
    28.2 KB · Affichages: 7

ChTi160

XLDnaute Barbatruc
Bonjour Hervé
Bonjour le Fil
Si dans un premier temps tu transférais les données des colonnes C&D via une boucle
Il te suffit de faire un test sur la colonne A de la nature de la date.
Si en colonne A la date est égale à La date du jour alors je récupère les données des colonnes C&D
Je poste depuis mon téléphone
Cela me permet de te saluer.
Bonne fin de journée
Cordialement
Jean marie
 

laurent950

XLDnaute Barbatruc
Bonjour,

Exemple avec votre fichier avec la ListBox1 avec Transfert une colonne
puis créer une ListBox2 sur votre fichier, pour suite de l'exemple avec Transfert 2 colonnes

VB:
Private Sub CommandButton1_Click()
' Variable
    Dim PL As Range
    Dim dlg As Long
  
' ListeBox1
    Dim TV As Variant

' ListeBox2
    Dim lignes As Variant
    Dim colonnes As Variant

' Base de Colonne A à D
    dlg = Range("A1000").End(xlUp).Row
Set PL = Sheets("data").Range("A2:D" & dlg)

' ListeBox1 = Colonne A
    TV = Application.Index(PL.Value, , 1)
    Worksheets("Resultat").ListBox1.List = TV
    TV = Empty

' A créer pour exemple (Avec 2 colonnes "3 = C et 4 = D")
' ListeBox2 = Colonne C et D
    lignes = Evaluate("row(" & PL.Row & ":" & PL.Rows.Count & ")") ' Ligne 2 = PL.Row  et Derniere Lignes "20" = PL.Rows.Count (19)
    colonnes = Array(3, 4) ' Colonne 3 = C et 4 = D
    Worksheets("Resultat").ListBox2.ColumnCount = UBound(colonnes) + 1 ' Nombres de colonne de la Listebox2
    TV = Application.Index(PL.Value, lignes, colonnes) ' Récupération des données
    Worksheets("Resultat").ListBox2.List = TV ' Transfert dans la listeBox
    lignes = Empty: colonnes = Empty: TV = Empty
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Si dans un premier temps tu transférais les données des colonnes C&D via une boucle
Il te suffit de faire un test sur la colonne A de la nature de la date.
Si en colonne A la date est égale à La date du jour alors je récupère les données des colonnes C&D
Salut Jean Marie
Oui c'est ça l'idée , la plage complète transférée dans ListBox Ok j'ai fait, mais avec le critère sélectif date jour je vois pas comment faire simplement ? tu as une piste ?
Chez Laurent je ne vois nul part une comparaison des data avec la date du jour .... ???
 

job75

XLDnaute Barbatruc
Bonjour à tous,
VB:
Private Sub CommandButton1_Click()
Dim n&, o As Object, tablo, liste(), i&
n = Application.CountIf([A:A], Date)
Set o = Sheets("resultat").OLEObjects("ListBox1").Object
o.Clear
If n = 0 Then Exit Sub
tablo = [A1].CurrentRegion.Resize(, 4)
ReDim liste(1 To n, 1 To 2)
n = 0
For i = 2 To UBound(tablo)
    If tablo(i, 1) = Date Then n = n + 1: liste(n, 1) = tablo(i, 3): liste(n, 2) = tablo(i, 4)
Next
'---restitution---
o.List = liste
Sheets("resultat").Activate 'facultatif
End Sub
A+
 

Pièces jointes

  • test_list select.xlsm
    29.8 KB · Affichages: 5

ChTi160

XLDnaute Barbatruc
Re
Bonsoir le Fil
J'avais réussi a faire cela sur l'ordi de mon épouse Lol
tableau Structuré "t_BDD"
Jean marie
Edit : j'ai modifié le Fichier car erreur d'incrémentation.......
 

Pièces jointes

  • test_list select Chti160.xlsm
    31.2 KB · Affichages: 1
Dernière édition:

laurent950

XLDnaute Barbatruc
Bonsoir a tous,

toujours dans le même principe en récupérant les lignes des dates d'aujourd'hui.

La ListBox1 existe sur votre fichier Excel en Poste #1 mais Il faut créer une ListBox2 sur votre fichier Excel toujours en Poste #1 pour l'exemple.

VB:
Private Sub CommandButton1_Click()
' Variable
    Dim PL As Range
    Dim dlg As Long
    Dim calend As Date
    Dim i As Long

' Date Aujourd'hui
    calend = Format(Now, "dd/mm/yyyy")
 
' ListeBox1
    Dim TV() As Variant
    ReDim TV(1 To 1)

' ListeBox2
    Dim lignes() As Variant
    ReDim lignes(1 To 1, 1 To 1)
    Dim colonnes As Variant

' Base de Colonne A à D
    dlg = Range("A1000").End(xlUp).Row
Set PL = Sheets("data").Range("A2:D" & dlg)

' Boucle avec condition pour la date du jour avec la variable Range : Application.Index(PL.Value, , 1)
' Qui contient la colonne A toutes les lignes
' Date du Jour = calend
' Stock dans une variable tableau ci-dessous.
' lignes = Tableau 2 D soit 1 lignes et Plusieurs colonnes / ---->> lignes(1 To 1, 1 To 1)
    For i = LBound(Application.Index(PL.Value, , 1)) To UBound(Application.Index(PL.Value, , 1))
'       Condition si c'est la date du jour enregistrer dans le tableau 2 D
        If Application.Index(PL.Value, , 1)(i, 1) = calend Then
            ' Valeurs
            TV(UBound(TV)) = Application.Index(PL.Value, , 1)(i, 1)
            ReDim Preserve TV(1 To UBound(TV) + 1)
            ' Ligne
            lignes(1, UBound(lignes, 2)) = i
            ReDim Preserve lignes(1 To 1, 1 To UBound(lignes, 2) + 1)
        End If
    Next i
    ' lignes = suprime la derniére colonnes vide.
        ReDim Preserve lignes(1 To 1, 1 To UBound(lignes, 2) - 1)
    ' 'lignes = Transpose le Tableau 2 D en Plusieurs x lignes sur 1 seule colonne
        lignes = Application.Transpose(lignes)
     
' Resultat pour ListeBox1 en relation avec les dates d'aujourd'hui
' ListeBox1 = Colonne A
    Worksheets("Resultat").ListBox1.List = TV

' Résultat pour la ListeBox2 avec les dates d'aujourd'hui pour les 2 colonnes "3 = C et 4 = D"
' Pour les dates d'aujourd'hui
'
' A créer pour exemple = La ListeBox2
' ListeBox2 = Colonne C et D
'   PM ce tableau lignes a était transposé avec Application.Transpose(Ici le tableau = Lignes) ' Les Lignes des dates d'aujourd'hui
    colonnes = Array(3, 4) ' les Colonne 3 = C et 4 = D
    Worksheets("Resultat").ListBox2.ColumnCount = UBound(colonnes) + 1 ' Nombres de colonne de la Listebox2 soit 2 colonnes (C et D)
    TV = Application.Index(PL.Value, lignes, colonnes) ' Récupération des données dans la variable tableau TV
    Worksheets("Resultat").ListBox2.List = TV ' Transfert du tableay TV dans la listeBox3

'   Decharge les variables
    Set PL = Nothing: dlg = Empty: calend = Empty
    i = Empty
    Erase lignes: colonnes = Empty: Erase TV
End Sub
 

job75

XLDnaute Barbatruc
Autre manière de faire, très voisine de celle du post #6 :
VB:
Private Sub CommandButton1_Click()
Dim n&, o As OLEObject, tablo, liste(), i&
n = Application.CountIf([A:A], Date)
Set o = Sheets("resultat").OLEObjects("ListBox1")
o.Object.Clear
If n = 0 Then Exit Sub
tablo = [A1].CurrentRegion.Resize(, 4)
ReDim liste(1 To n, 1 To 2)
n = 0
For i = 2 To UBound(tablo)
    If tablo(i, 1) = Date Then n = n + 1: liste(n, 1) = tablo(i, 3): liste(n, 2) = tablo(i, 4)
Next
'---restitution---
o.Object.List = liste
o.Parent.Activate 'facultatif
End Sub
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir à vous tous et merci
Bon sans polémiquer , j'en reviens pas ? Gérard m'a fait un truc SIMPLE ..! 😀;)

Je viens juste de regarder vite fait ; j'analyserai tout vos codes demain
je cherche toujours à faire au plus simple
Vraiment merci à vous tous , c'est comme dab ... super les anciens !!
Bonne soirée à vous
 

laurent950

XLDnaute Barbatruc
Bonsoir Hervé,

avec une fonction de boigontier (adapté a votre Poste #1)

VB:
Private Sub CommandButton1_Click()
' Variable
        dlg = Range("A1000").End(xlUp).Row
        Set PL = Sheets("data").Range("A2:D" & dlg)
        Tbl1 = PL.Value
        clé = Format(Now, "dd/mm/yyyy"): colclé = 1: colRécup = Array(3, 4)
        Tbl = SupArrayCléCol(Tbl1, clé, colclé, colRécup)
        Worksheets("Resultat").ListBox1.ColumnCount = UBound(Tbl, 2) + 1
        Worksheets("Resultat").ListBox1.List = Tbl
End Sub
' ********************************************************************************* '
Function SupArrayCléCol(Tbl, clé, colclé, colRécup)
  n = 0
  For i = LBound(Tbl, 1) To UBound(Tbl, 1)
    If Tbl(i, colclé) = CDate((clé)) Then n = n + 1
  Next i
  j = 0
  Dim Tbl2(): ReDim Tbl2(1 To n, LBound(colRécup) To UBound(colRécup))
  For i = LBound(Tbl, 1) To UBound(Tbl, 1)
    If Tbl(i, colclé) = CDate(clé) Then
      j = j + 1
      For k = LBound(colRécup) To UBound(colRécup): Tbl2(j, k) = Tbl(i, colRécup(k)): Next k
     End If
   Next i
  SupArrayCléCol = Tbl2
End Function
 

Discussions similaires

Statistiques des forums

Discussions
314 629
Messages
2 111 351
Membres
111 111
dernier inscrit
houndemint