Listbox spéciale

davidp

XLDnaute Occasionnel
Bonjour le forum,


je pensais avoir fini un projet mais je dois rajouter une option que je ne maitrise pas.

voila ,j'ai une listbox que je veux alimenter avec une plage de A7 à G43 (là pas de problème grace à votre aide), par contre il faudrait alimenter la listbox uniquement avec les lignes qui ont des cellules pleines dans la colonne D.

De plus, actuellement le command button 1 supprime la ligne complete sélectionnée, il faudrait que celui ci efface uniquement les données des colonnes D,E,F,G de la ligne sélectionnée.


Un grand merci d'avance à qui se penchera sur mon problème. Si ce n'est pas possible , ce n'est pas grave .


Bonne soirée à tous

DAVID
 

Pièces jointes

  • LISTBOXPROG.zip
    12.1 KB · Affichages: 36

davidp

XLDnaute Occasionnel
Re : Listbox spéciale

Bonsoir CBERNARDT et BRUNOM45,

Désolé pour le retard ,

grace à vos 2 fichiers j'ai trouvé mon bonheur , le paramêtrage de largeur des colonnes est trés pratique car il est difficile dans certains cas d'afficher l'ensemble des données.(j'ai réussi grace à vous à l'adapter à mon projet)

Un grand MERCI et à bientôt

DAVID
 

davidp

XLDnaute Occasionnel
Re : Listbox spéciale

Rebonjour le forum,


j'ai une nouvelle fois besoin de votre aide, dans la version finale ,l'application de BRUNO fonctionne mais je ne sais comment rajouter le parametrage des largeurs de colonne dans la listbox.

Merci d'avance et espère ne pas vous embêter

NB: La version de Bernard ,fonctionne habituellement ,mais dans mon fichier final ,il y a un souci ....mystere. (mais je sais que c'est de ma faute..).

Le code de Bernard est le suivant :

Dim Sht As Worksheet, Lig As Long

Private Sub CommandButton1_Click()
' Définit la feuille de la BdD
Set Sht = Sheets("boulangerie")
' Récupère la référence de la ligne (colonne 8)
Lig = Val(Me.ListBox1.Column(8))
For Col = 4 To 7
Sht.Cells(Lig, Col).ClearContents
Next Col
Set Sht = Nothing
Call UserForm_Initialize
End Sub

Private Sub UserForm_Initialize()
Dim Col As Integer, DerLig As Long
DerLig = ActiveSheet.Range("A" & Application.Rows.Count).End(xlUp).Row
' Définit la feuille de la BdD
Set Sht = Sheets("boulangerie")
'
Me.ListBox1.Clear
Me.ListBox1.ColumnCount = 8
' Pour chaque ligne de la BdD
For Lig = 7 To DerLig
If Sht.Range("D" & Lig) <> "" Then
Me.ListBox1.AddItem Sht.Cells(Lig, 1).Value
For Col = 2 To 7
Me.ListBox1.Column(Col - 1, ListBox1.ListCount - 1) = Sht.Cells(Lig, Col).Value
Next Col
' Penser à ajouter en colonne masquée,
' la ligne sur laquelle se trouve les données
Me.ListBox1.Column(Col, ListBox1.ListCount - 1) = Lig
End If
Next Lig
Set Sht = Nothing
End Sub

Merci d'avance

DAVID
 

davidp

XLDnaute Occasionnel
Re : Listbox spéciale

j'ai oublié le fichier, désolé

Bonne soirée
 

Pièces jointes

  • DavidP_ListBoxPROGaveccolonne.zip
    13.8 KB · Affichages: 19
  • DavidP_ListBoxPROGaveccolonne.zip
    13.8 KB · Affichages: 21
  • DavidP_ListBoxPROGaveccolonne.zip
    13.8 KB · Affichages: 21

bqtr

XLDnaute Accro
Re : Listbox spéciale

Bonsoir David, Bruno, Bernard

Une autre façon de faire:

La largeur des colonnes de la listbox et des labels s'ajuste automatiquement à la largeur des colonnes de la feuille. La largeur du userform elle s'ajuste à la largeur de la listbox.

A+
 

Pièces jointes

  • DavidP_ListBoxPROGaveccolonne.zip
    15.9 KB · Affichages: 52
  • DavidP_ListBoxPROGaveccolonne.zip
    15.9 KB · Affichages: 57
  • DavidP_ListBoxPROGaveccolonne.zip
    15.9 KB · Affichages: 55

davidp

XLDnaute Occasionnel
Re : Listbox spéciale

Bonjour Cbernard ,BQtr,Bruno M45,


Grace à vous , la fonction fonctionne dans mon vrai fichier , c'est super .

Les options que vous avez développez (listbox+ largeur colonne+ label)sont superbes.

Chapeau bas et un GRAND MERCI

A bientôt

DAVID
 

CBernardT

XLDnaute Barbatruc
Re : Listbox spéciale

Bonjour davidp, BQtr,Bruno M45 et le forum,

Bravo BQtr, pour ce code qui aligne la largeur des titres de colonnes et les colonnes à l'importance du texte à y inscrire.

Deux questions sur le code :

1- Pourquoi ne pas utiliser With.....End with au lieu de Set....?

2- Pourquoi mettre Me pour userform1 dans "Me.LisBox1" alors que l'on est dans le module de Userform1 ?

C'est simplement pour faire avancer le Smilblick :):)

Cordialement

Bernard
 

bqtr

XLDnaute Accro
Re : Listbox spéciale

Re, bonjour Bernard,

L'astuce pour la largeur des colonnes d'une listbox, je l'ai trouvée dans un bouquin sur le VBA. (Excel 2002 & VBA, le guide du développeur de J.W) Après c'est facile de l'appliquer pour les labels.

Pour ta 1ère question, on peut très bien utiliser le With/End with.
Pour la deuxième, effectivement les Me ne servent à rien, sauf le dernier qui est indispensable, il se réfère au Userform lui même. (Me.Width = PosLbl + 10)

Le code remanié :
Code:
Private Sub UserForm_Initialize()

Dim Col As Integer, LargCol As String, k As Byte, PosLbl As Single
  
With Sheets("boulangerie")
   .Activate
   PosLbl = 5.5
   LargCol = ""
        With ListBox1
            .Clear
            .ColumnCount = 8
               For Lig = 7 To Range("A" & Application.Rows.Count).End(xlUp).Row
                  If Range("D" & Lig) <> "" Then
                     .AddItem Cells(Lig, 1).Value
                        For Col = 2 To 7
                          .Column(Col - 1, .ListCount - 1) = Cells(Lig, Col).Value
                        Next Col
                     .Column(Col, .ListCount - 1) = Lig
                  End If
               Next Lig
                  For k = 1 To .ColumnCount - 1
                       LargCol = LargCol & Columns(k).Width & ";"
                       Controls("Label" & k).Width = Columns(k).Width
                       Controls("Label" & k).Left = PosLbl
                       PosLbl = PosLbl + Columns(k).Width + 1
                       Controls("Label" & k).TextAlign = 1
                  Next k
            .ColumnWidths = LargCol
            .ListIndex = 0
            .Width = PosLbl - 6
        End With
End With
Me.Width = PosLbl + 10
 
End Sub


Bon après midi
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 333
Membres
103 188
dernier inscrit
evebar