Listbox ne s'alimente qu'avec feuille Active

cathodique

XLDnaute Barbatruc
Bonjour :),

J'ai voulu essayé le concept d'UserInterfaceOnly. Mais je suis confronté à une difficulté.

Dans l'userform, J'ai mis une Listbox qui est alimentée à partir de la feuille "Ref".

Lorsque je lance l'userform en étant sur la feuille Ref, la listbox est alimentée.

Mais en le lançant à partir de la feuille "Menu" via le bouton, elle est vide.

Je ne parviens à trouver mon erreur. Merci de m'aider.

Bon dimanche.;)

ps: il s'agit de l'userform Produit
 

Pièces jointes

  • Suivi prix articles - Copie.xlsm
    42.2 KB · Affichages: 23

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Les avantages de la présentation Tableau:
-Pas besoin de spécifier la feuille
-Le tableau s'grandit automatiquement en hauteur & largeur)
-Si on ajoute une ligne, les formules sont recopiées

Pour visualiser les entête de colonnes d'une listBox.

Code:
Dim NomTableau, Nbcol
Private Sub UserForm_Initialize()
   NomTableau = "Tableau2"
   Dim Ws As Worksheet, dl As Long, Tb()
'   .Unprotect 1234
   Tb = Range(NomTableau).Value
'   .Protect 1234
   Nbcol = UBound(Tb, 2)
   Me.ListBox1.List = Tb
   Me.ListBox1.ColumnCount = Nbcol
   EnTeteListBox
'  '''''''''''''''''''''''''''''''''''''''''''''''''''
   Me.ComboBox1.List = Array("L", "KG", "U")
End Sub

Code:
 Sub EnTeteListBox()
   colVisu = Array(1, 2, 3, 4, 5, 6, 7)   ' colonnes à visualiser
   x = Me.ListBox1.Left + 8
   Y = Me.ListBox1.Top - 20
   For c = 1 To Nbcol
     Pos = Application.Match(c, colVisu, 0)
     If Not IsError(Pos) Then
       k = c
       Set Lab = Me.Controls.Add("Forms.Label.1")
       Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
       Lab.Top = Y
       Lab.Left = x
       Lab.Height = 24
       Lab.Width = Range(NomTableau).Columns(c).Width * 1#
       x = x + Range(NomTableau).Columns(c).Width * 1
       tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
     Else
       x = x + 0
       tempcol = tempcol & 0 & ";"
     End If
   Next c
   Me.ListBox1.ColumnWidths = tempcol
End Sub

Affichage de colonnes discontinues dans une ListBox:

http://boisgontierjacques.free.fr/fichiers/Formulaire/ListBoxMultiColonnesDiscTableau.xls

JB
 

Pièces jointes

  • Copie de Suivi prix articles - Copie-1.xlsm
    45.6 KB · Affichages: 29
Dernière édition:

cathodique

XLDnaute Barbatruc
Re

Chez moi, j'ai bien les entêtes dans la ListBox avec le code* ci-dessous
(*code de test simple,non finalisé)
VB:
Private Sub UserForm_Initialize()
Dim WS As Worksheet, Source$
Set WS = Sheets("Ref")
Source = WS.[A1].Parent.Name & "!" & WS.Range("A2", WS.Cells(Rows.Count, "G").End(xlUp)).Address
With ListBox1
.Clear
.ColumnHeads = True: .ColumnCount = 7: .RowSource = Source
End With
End Sub
Merci beaucoup. En effet, ça fonctionne bien.
 

cathodique

XLDnaute Barbatruc
Bonjour,

Pour visualiser les entête de colonnes d'une listBox.

Code:
Dim NomTableau, Nbcol
Private Sub UserForm_Initialize()
   NomTableau = "Tableau2"
   Dim Ws As Worksheet, dl As Long, Tb()
'   .Unprotect 1234
   Tb = Range(NomTableau).Value
'   .Protect 1234
   Nbcol = UBound(Tb, 2)
   Me.ListBox1.List = Tb
   Me.ListBox1.ColumnCount = Nbcol
   EnTeteListBox
'  '''''''''''''''''''''''''''''''''''''''''''''''''''
   Me.ComboBox1.List = Array("L", "KG", "U")
End Sub
Code:
 Sub EnTeteListBox()
   colVisu = Array(1, 2, 3, 4, 5, 6, 7)   ' colonnes à visualiser
   x = Me.ListBox1.Left + 8
   Y = Me.ListBox1.Top - 20
   For c = 1 To Nbcol
     Pos = Application.Match(c, colVisu, 0)
     If Not IsError(Pos) Then
       k = c
       Set Lab = Me.Controls.Add("Forms.Label.1")
       Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
       Lab.Top = Y
       Lab.Left = x
       Lab.Height = 24
       Lab.Width = Range(NomTableau).Columns(c).Width * 1#
       x = x + Range(NomTableau).Columns(c).Width * 1
       tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
     Else
       x = x + 0
       tempcol = tempcol & 0 & ";"
     End If
   Next c
   Me.ListBox1.ColumnWidths = tempcol
End Sub



JB

Y a pas photo, c'est parfait exactement le résultat espéré.
Merci beaucoup. ça va vraiment me permettre d'avancer.

Bonne fin d'après midi à toutes et à tous.
 

cathodique

XLDnaute Barbatruc
@BOISGONTIER : Très très gentil de ta part. Mais je voudrais tout de même comprendre ces 3 lignes ci-dessous. Notamment, la multiplication pourquoi le 1 seul et le 1#, quelle différence?

VB:
Lab.Width = Range(NomTableau).Columns(c).Width * 1#
       x = x + Range(NomTableau).Columns(c).Width * 1
       tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"
Avec mes remerciements anticipés.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
>Lab.Width = Range(NomTableau).Columns(c).Width * 1#
x = x + Range(NomTableau).Columns(c).Width * 1
tempcol = tempcol & Range(NomTableau).Columns(c).Width * 1# & ";"

On donne aux colonnes de la ListBox la largeur des colonnes du tableau.
1 est un facteur d'ajustement. Le # est ajouté par VB (double précision)

Pour visualiser une ListBox avec des colonnes discontinues:

Code:
Dim NomTableau, ColVisu()
Private Sub UserForm_Initialize()
    NomTableau = "Tableau1"
    ColVisu = Array(1, 2, 4, 7)          ' colonnes à visualiser
    TblBD = Range(NomTableau).Value
    '-- en têtes de colonne ListBox
    Me.ListBox1.ColumnCount = UBound(ColVisu) + 1
    EnteteListBox
    Dim Tbl: ReDim Tbl(1 To UBound(TblBD), 1 To UBound(ColVisu) + 1)
    j = 0
    For Each k In ColVisu
        j = j + 1
        For i = 1 To UBound(TblBD)
           Tbl(i, j) = TblBD(i, k)
        Next i
    Next k
    ListBox1.List = Tbl
End Sub


Sub EnteteListBox()
    x = Me.ListBox1.Left + 8
    Y = Me.ListBox1.Top - 12
    For Each c In ColVisu
      Set Lab = Me.Controls.Add("Forms.Label.1")
      Lab.Caption = Range(NomTableau).Offset(-1).Item(1, c)
      Lab.Top = Y
      Lab.Left = x
      Lab.Height = 24
      Lab.Width = Range(NomTableau).Columns(c).Width * 1#
      x = x + Range(NomTableau).Columns(c).Width * 1
      tempCol = tempCol & Range(NomTableau).Columns(c).Width * 1# & ";"
    Next
    tempCol = Left(tempCol, Len(tempCol) - 1)
    Me.ListBox1.ColumnWidths = tempCol
End Sub

JB
 

Pièces jointes

  • ListBoxMultiColonnesDiscTableau.xls
    93.5 KB · Affichages: 19
Dernière édition:

Si...

XLDnaute Barbatruc
Bon_jour
Bonjour,
Les avantages de la présentation Tableau:
-Pas besoin de spécifier la feuille
-Le tableau s'grandit automatiquement en hauteur & largeur)
-Si on ajoute une ligne, les formules sont recopiées
Merci JB :).
Que c'est difficile de faire passer des nouveautés (encore qu'avant on disposait de l'outil Table) !

Une fois de plus
je propose une solution avec l'outil Tableau !

Nota : il ya encore beaucoup à faire dans ce fichier.
 

Pièces jointes

  • Usf _ Tableau.xlsm
    45.8 KB · Affichages: 28

cathodique

XLDnaute Barbatruc
@BOISGONTIER : tous mes remerciements pour tes explications. Là, j'ai compris que l'on ajuste la largeur des colonnes de la listbox par rapport à la largeur des colonnes de la feuille. Pour la suite de mon petit projet, je ne maîtrise pas la manipulation des tableaux structurés d'excel en vba. Je t'avoue que j'hésite à l'utiliser. Je vais devoir mis mettre sérieusement.

Encore merci. Bonne soirée.
 

cathodique

XLDnaute Barbatruc
Bon_jour

Merci JB :).
Que c'est difficile de faire passer des nouveautés (encore qu'avant on disposait de l'outil Table) !

Une fois de plus
je propose une solution avec l'outil Tableau !

Nota : il ya encore beaucoup à faire dans ce fichier.
Bonsoir Si...:),
J'avoue qu'avec un tableau classique ça me va et m'intéresse. Cependant, ton code plante en cliquant sur l'entête de colonne dans la listbox.
Alors que faire dans ce cas, pour éviter ce plantage.

Encore merci.;)

Bonne soirée.
 

Si...

XLDnaute Barbatruc
Re
Bonsoir Si...:),
J'avoue qu'avec un tableau classique ça me va et m'intéresse. Cependant...
Tu peux continuer à rouler en "deuche" mais je préfère "Zoé". Bien sûr, tout dépend de l'usage que l'on veut en faire.:cool:
Pour ceux qui ne sauraient comment éviter le message d'erreur, il suffit d'ajouter un simple test dans la macro Private Sub Lt_Mo… : If l < 0 Then Exit Sub

Nota : l < 0 correspond à l = -1 (ancienne version que l'on trouve dans les macros proposées)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Voici un problème récurrent d'affichage dans une ListBox où sont filtrés les enregistrements et les colonnes affichées.
Il n'utilise pas la présentation Tableau mais est facilement adaptable (il y a 2 instructions à supprimer)

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormFiltreListboxEntete.xls

Des entêtes simples mais qui ne fonctionnent que pour des ListBox issus de Ranges mais pas d'Arrays():

http://boisgontierjacques.free.fr/fichiers/Formulaire/ListboxEnteteSimple.xls
http://boisgontierjacques.free.fr/fichiers/Formulaire/ListboxEnteteSimpleTableau.xls


jb
 

Pièces jointes

  • FormFiltreListboxEntete.xls
    200 KB · Affichages: 27
Dernière édition:

cathodique

XLDnaute Barbatruc
Re

Tu peux continuer à rouler en "deuche" mais je préfère "Zoé". Bien sûr, tout dépend de l'usage que l'on veut en faire.:cool:
Pour ceux qui ne sauraient comment éviter le message d'erreur, il suffit d'ajouter un simple test dans la macro Private Sub Lt_Mo… : If l < 0 Then Exit Sub

Nota : l < 0 correspond à l = -1 (ancienne version que l'on trouve dans les macros proposées)
Bonjour Si...;),
Je suis pas encore équipé de détecteur de radar, alors je me contente de la "Deuche".
Merci beaucoup pour ton aide et ton astuce.
Bonne journée.:D
 

cathodique

XLDnaute Barbatruc
Voici un problème récurrent d'affichage dans une ListBox où sont filtrés les enregistrements et les colonnes affichées.
Il n'utilise pas la présentation Tableau mais est facilement adaptable (il y a 2 instructions à supprimer)

http://boisgontierjacques.free.fr/fichiers/Formulaire/FormFiltreListboxEntete.xls

jb
Bonjour JB:),
Merci beaucoup. Je me mets aux tableaux structurés car il semble qu'ils sont très pratiques.
ça va me prendre un peu de temps, pour gagner en efficacité.

Bonne journée.:D
 

Discussions similaires

Réponses
3
Affichages
533
Réponses
4
Affichages
689
Réponses
0
Affichages
589

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata