XL 2016 Recherche intuitive et affichage plage discontinue dans listbox

KTM

XLDnaute Impliqué
Bonsoir Cher Forum
Je voudrais rechercher et afficher dans mon listbox les données de ma plage .
Mais les colonnes a afficher sont discontinues.
Mon code pour la recherche intuitive dans mon textbox n'affiche pas correctement la dernière colonne.
Aidez moi à bien paramétrer ma macro.
Merci.
 

Pièces jointes

  • RechI.xlsm
    319.8 KB · Affichages: 11

cp4

XLDnaute Barbatruc
Bonsoir Cher Forum
Je voudrais rechercher et afficher dans mon listbox les données de ma plage .
Mais les colonnes a afficher sont discontinues.
Mon code pour la recherche intuitive dans mon textbox n'affiche pas correctement la dernière colonne.
Aidez moi à bien paramétrer ma macro.
Merci.
Bonjour,

Au lieu de faire une gymnastique pour récupérer certaines colonnes, à mon avis il est préférable de prendre toutes les données dans un tableau et l'injecter dans la Listbox.
Il suffira de mettre la largeur des colonnes non désirées à 0.
à voir ton fichier en retour si ça te convient ainsi.

Bonne soirée.
 

Pièces jointes

  • RechI_v1.xlsm
    342 KB · Affichages: 22

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour KTM, bonjour le forum,

Je ne comprends pas les variables qui ne servent à rien ou en doublons... Ton code modifié :

VB:
Private tbl
Private tbase
Private sh As Worksheet

Private Sub UserForm_Initialize()
Dim DL As Long, Coll As Long, I As Long, K

Me.StartUpPosition = 0
Me.Top = 0
Me.Left = Application.UsableWidth - Me.Width
Set sh = Sheets("Grille_de_Dispensation")
DL = sh.Range("A" & Rows.Count).End(xlUp).Row
sh.Range("A2:N" & DL).Font.Size = 12
entetes.Column = Application.Transpose(sh.Range("A1:N1").Value)
tbase = sh.Range("A2:N" & DL).Value
Dim tbl: ReDim tbl(1 To UBound(tbase), 1 To 12)
Coll = 0
For Each K In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14)
Coll = Coll + 1
   For I = 1 To UBound(tbase): tbl(I, Coll) = tbase(I, K): Next I
Next K
Coll = 2
For I = 1 To UBound(tbase): tbl(I, Coll) = Format(CDate(tbase(I, 2)), "mmm yy"): Next I
ListBox2.List = tbl
End Sub

Private Sub TextBox1_Change()
Dim T(), I&, A&, C&

With TextBox1
    If .Value = "" Then ListBox2.List = tbase: Exit Sub
    For I = 1 To UBound(tbase)
        If tbase(I, 1) Like .Value & "*" Then
            A = A + 1: ReDim Preserve T(1 To 14, 1 To A)
            For C = 1 To 13: T(C, A) = tbase(I, C): Next
            T(14, A) = tbase(I, 14)
        End If
    Next
     If A > 0 Then
        If A = 1 Then
            ListBox2.Column = Application.Transpose(T)
        Else
            ListBox2.List = Application.Transpose(T)
        End If
    Else: ListBox2.Clear
    End If
End With
End Sub

[Édition]
Bonjour Cp4, nos posts ses sont croisés...
 

KTM

XLDnaute Impliqué
Bonjour,

Au lieu de faire une gymnastique pour récupérer certaines colonnes, à mon avis il est préférable de prendre toutes les données dans un tableau et l'injecter dans la Listbox.
Il suffira de mettre la largeur des colonnes non désirées à 0.
à voir ton fichier en retour si ça te convient ainsi.

Bonne soirée.
Merci ça marche mais je voudrais que la colonne Mois conserve dans le listbox le même format que dans ma plage de données.
Merci d'y corriger ce détail.
 

KTM

XLDnaute Impliqué
Bonjour KTM, bonjour le forum,

Je ne comprends pas les variables qui ne servent à rien ou en doublons... Ton code modifié :

VB:
Private tbl
Private tbase
Private sh As Worksheet

Private Sub UserForm_Initialize()
Dim DL As Long, Coll As Long, I As Long, K

Me.StartUpPosition = 0
Me.Top = 0
Me.Left = Application.UsableWidth - Me.Width
Set sh = Sheets("Grille_de_Dispensation")
DL = sh.Range("A" & Rows.Count).End(xlUp).Row
sh.Range("A2:N" & DL).Font.Size = 12
entetes.Column = Application.Transpose(sh.Range("A1:N1").Value)
tbase = sh.Range("A2:N" & DL).Value
Dim tbl: ReDim tbl(1 To UBound(tbase), 1 To 12)
Coll = 0
For Each K In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 14)
Coll = Coll + 1
   For I = 1 To UBound(tbase): tbl(I, Coll) = tbase(I, K): Next I
Next K
Coll = 2
For I = 1 To UBound(tbase): tbl(I, Coll) = Format(CDate(tbase(I, 2)), "mmm yy"): Next I
ListBox2.List = tbl
End Sub

Private Sub TextBox1_Change()
Dim T(), I&, A&, C&

With TextBox1
    If .Value = "" Then ListBox2.List = tbase: Exit Sub
    For I = 1 To UBound(tbase)
        If tbase(I, 1) Like .Value & "*" Then
            A = A + 1: ReDim Preserve T(1 To 14, 1 To A)
            For C = 1 To 13: T(C, A) = tbase(I, C): Next
            T(14, A) = tbase(I, 14)
        End If
    Next
     If A > 0 Then
        If A = 1 Then
            ListBox2.Column = Application.Transpose(T)
        Else
            ListBox2.List = Application.Transpose(T)
        End If
    Else: ListBox2.Clear
    End If
End With
End Sub

[Édition]
Bonjour Cp4, nos posts ses sont croisés...
Merci mais ça fonctionne pas
 

cp4

XLDnaute Barbatruc
Merci ça marche mais je voudrais que la colonne Mois conserve dans le listbox le même format que dans ma plage de données.
Merci d'y corriger ce détail.
code à remplacer
VB:
Private Sub UserForm_Initialize()
Dim dl As Long, i As Long

Me.StartUpPosition = 0
Me.Top = 0
Me.Left = Application.UsableWidth - Me.Width
dl = Sheets("Grille_de_Dispensation").Range("A" & Rows.Count).End(xlUp).Row
With Sheets("Grille_de_Dispensation")
        .Range("A2:N" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Font.Size = 12
        entetes.Column = Application.Transpose(.[A1:N1].Value)
        
       Set sh = Sheets("Grille_de_Dispensation")
       tbase = sh.Range("A2:N" & dl).Value
'mise en forme colonne Mois Listbox
For i = 1 To UBound(tbase)
tbase(i, 2) = Format(tbase(i, 2), "mmm-yy")
Next i

entetes.ColumnCount = 15
entetes.ColumnWidths = "90;60;65;50;30;40;40;50;30;50;50;0;0;50;0"
ListBox2.ColumnCount = 15
ListBox2.ColumnWidths = "90;60;65;50;30;40;40;50;30;50;50;0;0;50;0"
                        
ListBox2.List = tbase

End With
End Sub
 

KTM

XLDnaute Impliqué
code à remplacer
VB:
Private Sub UserForm_Initialize()
Dim dl As Long, i As Long

Me.StartUpPosition = 0
Me.Top = 0
Me.Left = Application.UsableWidth - Me.Width
dl = Sheets("Grille_de_Dispensation").Range("A" & Rows.Count).End(xlUp).Row
With Sheets("Grille_de_Dispensation")
        .Range("A2:N" & .Range("A" & Rows.Count).End(xlUp).Row + 1).Font.Size = 12
        entetes.Column = Application.Transpose(.[A1:N1].Value)
       
       Set sh = Sheets("Grille_de_Dispensation")
       tbase = sh.Range("A2:N" & dl).Value
'mise en forme colonne Mois Listbox
For i = 1 To UBound(tbase)
tbase(i, 2) = Format(tbase(i, 2), "mmm-yy")
Next i

entetes.ColumnCount = 15
entetes.ColumnWidths = "90;60;65;50;30;40;40;50;30;50;50;0;0;50;0"
ListBox2.ColumnCount = 15
ListBox2.ColumnWidths = "90;60;65;50;30;40;40;50;30;50;50;0;0;50;0"
                       
ListBox2.List = tbase

End With
End Sub
Merci Infiniment !!
 

Discussions similaires

Réponses
16
Affichages
627

Statistiques des forums

Discussions
314 636
Messages
2 111 457
Membres
111 144
dernier inscrit
shura_77