ListBox Colonnes à masquer

  • Initiateur de la discussion Initiateur de la discussion Jeremy011991
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

Jeremy011991

Guest
Bonjour,

Je vous explique ma situation.

J'ai créé un tableau d'une 40aine de colonne, regroupant des infos sur des clients. Ma feuille excel est vouée à être utilisée par des utilisateurs qui auront le choix des colonnes à imprimer.

J'ai donc créé un UserForm, contenant 2 ListBox. L'une récupérant les titres de mes colonnes, et l'autre servant à basculer les titres voulus par l'utilisateur (à la manière d'un assistant de formulaire sous Access).

Cependant, j'aimerai masquer les colonnes qui n'ont pas été selectionnées dans ma Liste2...
Ou si possible, masquer toutes les colonnes, et n'afficher que celles selectionnées dans ma Liste2...

Merci à vous...
 

Pièces jointes

Dernière modification par un modérateur:
Re : ListBox Colonnes à masquer

Bonjour Jeremy, bonjour le forum,

Puisque tu es nouveau parmi nous je te recommande vivement de lire la
Lien supprimé qui donne tous les bons plans pour obtenir de l'aide rapidement...
Dans ton cas, le fichier exemple manque cruellement...
 
Re : ListBox Colonnes à masquer

Bonjour Jeremy011991, Robert, le forum,

Bienvenue sur XLD Jeremy011991! 😀

Dans ton cas, le fichier exemple manque cruellement...
+1. En effet, le fichier que tu proposes éclaircit énormément ta demande. Sans ce fichier, cela aurait été impossible de te répondre...🙄

Ci-joint une proposition avec quelques améliorations:
  • Ajouter et Retirer les titres de colonnes avec BOUTONS
  • Ajouter et Retirer les titres de colonnes avec DOUBLE CLIC
  • Masquer dans la "Feuil1" les colonnes sélectionnées dans la Liste2

A noter qu'il te faut bien transférer tes valeurs de colonnes (qui sont cachées) d'une listbox à l'autre pour être sûr que tu les auras dans ta "Liste2" pour les masquer à la fin de ta sélection...

Bonne journée 🙂

VB:
'Récupération données des titres de colonnes
Private Sub UserForm_Initialize()
Dim Cell As Range
' Pour les colonnes noms
    With Liste1
        .ColumnCount = 2        '2 colonnes dans la ListBox
        .ColumnWidths = "190;0"    'dont la deuxième cachée
        '.BoundColumn = 2        'La propriété "Value" renverra la valeur de la colonne cachée
        For Each Cell In Rows(2).SpecialCells(xlCellTypeConstants, 3)
            .AddItem Cell.Text                          '1ère colonne : les prénoms
            .List(.ListCount - 1, 1) = Cell.Column      '2ème colonne : les numéros de colonnes correspondantes
        Next Cell
        .ListIndex = 0
    End With
    
    With Liste2
        .ColumnCount = 2
        .ColumnWidths = "190;0"
    End With
        
End Sub
'------------------------------------------------------------------------
'Ajouter de Colonne 1 vers Colonne 2 avec BOUTON
Private Sub Ajouter_Click()
    If Liste1.ListIndex <> -1 Then
        Liste2.AddItem Liste1.List(Liste1.ListIndex, 0)
        Liste2.List(Liste2.ListCount - 1, 1) = Liste1.List(Liste1.ListIndex, 1)
        Liste1.RemoveItem Liste1.ListIndex
    End If
End Sub
'------------------------------------------------------------------------
'Ajouter de Colonne 1 vers Colonne 2 avec DOUBLE CLIC
Private Sub Liste1_Dblclick(ByVal Cancel As MSForms.ReturnBoolean)
    If Liste1.ListIndex <> -1 Then
        Liste2.AddItem Liste1.List(Liste1.ListIndex, 0)
        Liste2.List(Liste2.ListCount - 1, 1) = Liste1.List(Liste1.ListIndex, 1)
        Liste1.RemoveItem Liste1.ListIndex
    End If
End Sub
'------------------------------------------------------------------------
'Retirer de Colonne 2 vers Colonne 1 avec DOUBLE CLIC
Private Sub Liste2_Dblclick(ByVal Cancel As MSForms.ReturnBoolean)
    If Liste2.ListIndex <> -1 Then
        Liste1.AddItem Liste2.List(Liste2.ListIndex, 0)
        Liste1.List(Liste1.ListCount - 1, 1) = Liste2.List(Liste2.ListIndex, 1)
        Liste2.RemoveItem (Liste2.ListIndex)
    End If
End Sub
'------------------------------------------------------------------------
'Retirer de Colonne 2 vers Colonne 1 avec BOUTON
Private Sub Retirer_Click()
    If Liste2.ListIndex <> -1 Then
        Liste1.AddItem Liste2.List(Liste2.ListIndex, 0)
        Liste1.List(Liste1.ListCount - 1, 1) = Liste2.List(Liste2.ListIndex, 1)
        Liste2.RemoveItem (Liste2.ListIndex)
    End If
End Sub
'------------------------------------------------------------------------
'Vider Liste2 avec le BOUTON
Private Sub Nettoyer_Click()
For i = 0 To Liste2.ListCount - 1
    Liste1.AddItem Liste2.List(i, 0)
    Liste1.List(Liste1.ListCount - 1, 1) = Liste2.List(i, 1)
Next i
    Liste2.Clear
End Sub
'------------------------------------------------------------------------
'Masquer les colonnes listées dans la liste2
Private Sub Masquer_Click()

    'ici on démasque tout d'abord toutes les colonnes pour annuler la sélection précédente
    Worksheets("Feuil1").Columns("A:Z").EntireColumn.Hidden = False

If Liste2.ListCount <> 0 Then
    
    For i = 0 To Liste2.ListCount - 1
        Worksheets("Feuil1").Columns(CInt(Liste2.List(i, 1))).EntireColumn.Hidden = True
    Next i
    
End If

Unload Me
End Sub
 

Pièces jointes

Dernière édition:
Re : ListBox Colonnes à masquer

Bonjour le fil, bonjour le forum,

En pièce jointe ton fichier modifié. Tu sélectionnes las la liste unique les colonnes à afficher puis tu valides sur le bouton Valider ou tu sors avec le bouton ...
Le code :

Code:
Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
'Récupération données des titres de colonnes'
Dim Cell As Range

'proprétés de la listbox "Liste1" : ColumnCount = 2 , ColumnsWhitdths = ,0Pts, ColumnsBound = 1,MultiSelect = 1...
With Liste1
    For Each Cell In Rows(2).SpecialCells(xlCellTypeConstants, 3)
        .AddItem Cell.Text                          '1ère colonne : les prénoms
        .List(.ListCount - 1, 1) = Cell.Column      '2ème colonne : les numéros de colonnes correspondantes
    Next Cell
    .ListIndex = 0
End With
End Sub

Private Sub CommandButton3_Click() 'bouton "Suivant"
With Me.Liste1 'prend en compte la listbox "Liste1"
    For x = 0 To .ListCount - 1 'boucle sur tous les éléments
        'si l'élément est sélectionné sa colonne est affichée
        If .Selected(x) = True Then Sheets("Feuil1").Columns(CInt(.List(x, 1))).Hidden = False
    Next x 'prochain élément de la boucle
End With 'fi de la prise en compte de le listbox "Liste1"
Sheets("Feuil1").Range("A6").Select
Unload Me 'vide et ferme l'UserForm
End Sub


Private Sub bton_Click() 'bouton "Sortir"
Unload Me 'vide et ferme l'UserForm
End Sub
Le fichier :
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

V
Réponses
0
Affichages
1 K
VBAProject
V
Y
Réponses
7
Affichages
1 K
Y
K
Réponses
0
Affichages
3 K
K
L
Réponses
4
Affichages
2 K
L
A
Réponses
3
Affichages
1 K
Angèle95
A
F
Réponses
5
Affichages
7 K
fraille
F
M
Réponses
1
Affichages
7 K
sousou
S
Retour