XL 2016 Conserver la valeur d'une Chekbox

Eric4709

XLDnaute Nouveau
Bonjour à tous,

Je me tourne de nouveau vers la communauté pour m'aider sur un problème de chekbox.

J'ai un Userform qui contient plusieurs Chekbox permettant à l'utilisateur d'afficher ou de masquer des colonnes en fonction de son besoin.

Une fois que l'utilisateur à fait son choix (coché = affiché; décoché = masqué) je souhaite pouvoir enregistrer ses choix et lors de l'ouverture suivante du Userform les chekbox qui étaient cochées apparaissent toujours cochées et inversement pour les non cochées.

Voici un bout de mon code actuel

VB:
'==================================== Module Commande =========================================

Private Sub CheckBox1_Click()
Dim NoCol As Integer
NoCol = Application.Match("Commande client", Range("5:5"), 0)    ' recherche de la bonne colonne
If CheckBox1 = True Then
    Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = False
Else
If CheckBox1 = False Then
Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = True
End If
End If
End Sub

Private Sub CheckBox2_Click()
Dim NoCol As Integer
NoCol = Application.Match("Engagement Juridique", Range("5:5"), 0)    ' recherche de la bonne colonne
If CheckBox2 = True Then
    Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = False
Else
If CheckBox2 = False Then
Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = True
End If
End If
End Sub

'===================================== Module Livraison =========================================

Private Sub CheckBox3_Click()
Dim NoCol As Integer
NoCol = Application.Match("Quantité livrée", Range("5:5"), 0)    ' recherche de la bonne colonne
If CheckBox3 = True Then
    Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = False
Else
If CheckBox3 = False Then
Sheets("Suivi des Livraisons").Columns(NoCol).EntireColumn.Hidden = True
End If
End If
End Sub


'===================================== Boutons=========================================

Private Sub CommandButton1_Click()
 End
End Sub

Private Sub CommandButton2_Click()
    Dim TS As control
        For Each TS In Personnalisation_Colonnes.Controls
        If Left$(TS.name, 8) = "CheckBox" Then TS.Value = True
    Next
End Sub

Private Sub CommandButton3_Click()
    Dim TDS As control
        For Each TDS In Personnalisation_Colonnes.Controls
        If Left$(TDS.name, 8) = "CheckBox" Then TDS.Value = False
    Next
End Sub


Merci pour votre aide :)
 
Solution
Bonjour.
Si ma formulation par LOt.ListColumns( etc. ne vous plait pas, vous pouvez aussi l'écrire comme ça :
VB:
'==================================== Module Commande =========================================

Private Sub CheckBox1_Click()
   [Tableau1[Commande client]].EntireColumn.Hidden = Not CheckBox1.Value
   End Sub

Private Sub CheckBox2_Click()
   [Tableau1[Engagement Juridique]].EntireColumn.Hidden = Not CheckBox2.Value
   End Sub

'===================================== Module Livraison =========================================

Private Sub CheckBox3_Click()
   [Tableau1[Quantité livrée]].EntireColumn.Hidden = Not CheckBox3.Value
   End Sub
Par ailleurs vous pouvez aussi ajouter cette procédure :
Code:
Private Sub...

Eric4709

XLDnaute Nouveau
Bonsoir à tous,

Et bien j'aurai pas imaginé que mon poste déchaine autant les foules :)

A vrai dire mon fichier fait pas moins de 280 colonnes. Je sais que ça fait beaucoup, mais les collaborateurs utilises en moyenne 150 colonnes mais pas tous les mêmes d'où la nécessité de leur laissé le choix de l'affichage.

Modeste geedee J'aime beaucoup ta solution, seulement comment ramener la valeur "vrai / faux" de la chekbox dans une nouvelle feuille ?

JE joins un fichier test qui reprend toutes les colonnes disponibles pour les collaborateurs.

Encore merci pour toute cette aide
 

Pièces jointes

  • Test_OPRA.xlsx
    19 KB · Affichages: 11

Modeste geedee

XLDnaute Barbatruc
Modeste geedee J'aime beaucoup ta solution, seulement comment ramener la valeur "vrai / faux" de la chekbox dans une nouvelle feuille ?
le controlsource étant lié à une plage nommée
sa valeur est accessible depuis n'importe quelle feuille
MsgBox "Case cochée : " & Iff([CHK_2]=true,"OUI","NON")

????
tu joins un fichier .xlsx donc sans macro
au début tu parles de Userform
nous n'avons aucune idée de l'organisation de ton classeur original
. feuilles ???
. formules
. macros
. tables de références
. listes
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Si ma formulation par LOt.ListColumns( etc. ne vous plait pas, vous pouvez aussi l'écrire comme ça :
VB:
'==================================== Module Commande =========================================

Private Sub CheckBox1_Click()
   [Tableau1[Commande client]].EntireColumn.Hidden = Not CheckBox1.Value
   End Sub

Private Sub CheckBox2_Click()
   [Tableau1[Engagement Juridique]].EntireColumn.Hidden = Not CheckBox2.Value
   End Sub

'===================================== Module Livraison =========================================

Private Sub CheckBox3_Click()
   [Tableau1[Quantité livrée]].EntireColumn.Hidden = Not CheckBox3.Value
   End Sub
Par ailleurs vous pouvez aussi ajouter cette procédure :
Code:
Private Sub UserForm_Initialize()
   CheckBox1.Value = Not [Tableau1[Commande client]].EntireColumn.Hidden
   CheckBox2.Value = Not [Tableau1[Engagement Juridique]].EntireColumn.Hidden
   CheckBox3.Value = Not [Tableau1[Quantité livrée]].EntireColumn.Hidden
   End Sub
 

Eric4709

XLDnaute Nouveau
Bonjour.
Si ma formulation par LOt.ListColumns( etc. ne vous plait pas, vous pouvez aussi l'écrire comme ça :
VB:
'==================================== Module Commande =========================================

Private Sub CheckBox1_Click()
   [Tableau1[Commande client]].EntireColumn.Hidden = Not CheckBox1.Value
   End Sub

Private Sub CheckBox2_Click()
   [Tableau1[Engagement Juridique]].EntireColumn.Hidden = Not CheckBox2.Value
   End Sub

'===================================== Module Livraison =========================================

Private Sub CheckBox3_Click()
   [Tableau1[Quantité livrée]].EntireColumn.Hidden = Not CheckBox3.Value
   End Sub
Par ailleurs vous pouvez aussi ajouter cette procédure :
Code:
Private Sub UserForm_Initialize()
   CheckBox1.Value = Not [Tableau1[Commande client]].EntireColumn.Hidden
   CheckBox2.Value = Not [Tableau1[Engagement Juridique]].EntireColumn.Hidden
   CheckBox3.Value = Not [Tableau1[Quantité livrée]].EntireColumn.Hidden
   End Sub
Cette solution est vraiment super, me reste lus qu'à paramétrer les 277 colonnes restantes :)
Merci beaucoup pour vos réponses.
 

Discussions similaires

Réponses
3
Affichages
124