Masquer colonne via CheckBox (dans ruban) [Résolu]

Signaler
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
-
cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
-
Bonjour à tous,

J'avais bien dis que je reviendrais pour de nouvelles aventures ;-)

Donc, toujours dans mon fichier "Bilan", j'ai créer un ruban perso, il fonctionne, seulement, j'ai placé dans ce ruban 3 cases à cocher, ayant chacune pour fonction de masquer une colonne :

CheckBox1 = colonne E ; CheckBox2 = Colonne F; CheckBox3 = Colonne G

Voici le code de la CheckBox1 :

'Callback for CheckBox1 onAction
Sub hzonemasq(control As IRibbonControl, pressed As Boolean)

If (control.ID = "msqcol1") = True Then
Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = True
Else

If (control.ID = "msqcol1") = False Then
Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = False
End If
End If


'MsgBox control.ID & vbCrLf & pressed
End Sub

Lorsque je clique sur la CheckBox1, la colonne E se masque bien, mais lorsque je décoche, rien ne se passe, elle ne se ré-affiche pas, ou se trouve mon erreur ?

Merci à tous pour votre aide

Bonne journée et bon we,

Christian

--

7 réponses

Salut,

Je n'ai pas les moyens de tester mais la logique voudrait qu'on écrive :

Sub hzonemasq(control As IRibbonControl, pressed As Boolean)
If control.ID = "msqcol1" Then
Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = pressed
End If
End Sub

ou bien :

Sub hzonemasq(control As IRibbonControl, pressed As Boolean)
If control.ID = "msqcol1" Then
Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = Not pressed
End If
End Sub
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
Je viens de lire de la doc sur l'utilisation des checkbox dans le RUBAN.
Comme te l'a conseillé Banana (que je salue au passage).. il faut utiliser aussi le PRESSED pour connaitre la valeur du bouton.

http://silkyroad.developpez.com/excel/callbacks/

L'argument pressed.
Exemple : Sub ____OnAction(control As IRibbonControl, pressed As Boolean)
Cet argument renvoie la valeur Vrai si le contrôle est coché (pour les checkBox) ou si la touche est enfoncée (pour les toggleButton). La valeur Faux est renvoyée dans le cas contraire.

Donc en en mixant mon code et celui de Banana ça donnerait quelque chose du genre :


Sub hzonemasq(control As IRibbonControl, pressed As Boolean)

debug.print "Bouton : " & control.ID
debug.print "pressed = " & pressed 

'On regarde ce que vaut control.ID ....
SELECT CASE control.ID
 CASE "msqcol1"
     debug.print "bouton msqcol1"
      Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = pressed

 CASE "msqcol2"
     debug.print "bouton msqcol2"
     Sheets("Bilan").Columns("F:F").EntireColumn.Hidden = pressed

 CASE else
    debug.print "Autre bouton"

END SELECT
     
  
End Sub

jordane45
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
Tu peux voir le résultat des " DEBUG.PRINT " dans la fenêtre d'execution.
http://boisgontierjacques.free.fr/pages_site/presentation_vba.htm#FenetreExecution
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
Bonjour,

Déjà.. je pense que tu as un souci dans tes Conditions ...
If qqchose = machin = truc ???


Ensuite... pour que tu essaies de comprendre ce qui pourrait bloquer dans ton code... n'hésites pas à y ajouter des DEBUG.PRINT pour savoir si tu rentres bien dans tes différents IF..

Et enfin... Je pense que pour savoir si ta checkbox est cochée...il faut regarder la VALUE de ton bouton...

Bref, le code devrait, je pense, ressembler plus à ça :

Sub hzonemasq(control As IRibbonControl, pressed As Boolean)

'On regarde ce que vaut control.ID ....
SELECT CASE control.ID
 CASE "msqcol1"
     debug.print "bouton msqcol1 => " & control.value 
     If control.value = True Then
        debug.print(" On Masque la colonne E")
       Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = True
     Else
       debug.print(" On Affiche la colonne E")
       Sheets("Bilan").Columns("E:E").EntireColumn.Hidden = False
     End If

 CASE "msqcol2"
     debug.print "bouton msqcol1 => " & control.value 
     If control.value = True Then
        debug.print(" On Masque la colonne F")
       Sheets("Bilan").Columns("F:F").EntireColumn.Hidden = True
     Else
       debug.print(" On Affiche la colonne F")
       Sheets("Bilan").Columns("F:F").EntireColumn.Hidden = False
     End If

 CASE else
    debug.print "Autre bouton"

END SELECT
     
    'MsgBox control.ID & vbCrLf & pressed
End Sub


Avant de poser une question, merci de lire la charte du site.
Cordialement, Jordane
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
Salut Jordane45,

Merci pour ta réponse, je vais tester ça de suite, (j'ai supprimer une bêtise que j'ai écrit...rhooo)

En tous les cas je test et reviens pour te tenir au courant, merci pour l'astuce... je n'ai pas encore toutes les ficelles, mais j'y travail...lol


Merci et bon we

Christian

--
jordane45
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
cependant je crois comprendre qu'avec les cases à cocher il vaux mieux utiliser la fonction "SelectCase" que "If...Then" ?
Ah non aucun rapport.... c'est juste que lorsque tu veux tester UNE VARIABLE qui peut avoir plusieurs Valeurs... ( ici... control.ID peut correspondre à ton bouton 1 ou ton bouton 2 ou ....) il est plus simple d'utiliser le SELECT CASE.
Cela évite de faire des IF /ELSE en masse....

http://fr.openclassrooms.com/informatique/cours/analysez-des-donnees-avec-excel/les-conditions-18

http://msdn.microsoft.com/fr-fr/library/cy37t14y.aspx

.
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
Je viens de tester et il me dit méthode ou propriété non gerer par cet objet :

Voici la ligne pointée :
Debug.Print "bouton msqcol1 => " & control.Value



Donc je cherche...

Merci
--
jordane45
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
oui c'est control.value qu'il n'aime pas. regarde mes messages suivants.. j'ai modifié avec PRESSED.
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
Extra ... tout fonctionne parfaitement, je prend note de cette nouvelle leçon :), un jour je serais bon et c'est moi qui aiderais les autres (soyez pas pressé quand même y a encore du travail), Je te remercie, je vais regarder le lien de banana, avec assistant ruban, d'ailleur, fonctionne aussi sous 2013 avec un petit bug... comment lui signaler ?

En tout cas merci et bon we, profites en bien...

Christian

--
jordane45
Messages postés
27337
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 janvier 2020
322
Le tuto dont je t'ai mis le lien n'est pas de Banana... c'est celui de SILKYROAD .. du site developpez.net (rien à voir avec nous...codes-sources )

Pour ma part.. c'est avec ses tutos que j'ai appris le VBA ....
Tu as tous ses tutos à cette adresse : http://silkyroad.developpez.com/
Tu y trouveras aussi un lien pour le contacter par mp. => http://www.developpez.net/forums/private.php?do=newpm&u=70508 ... mais il te faut d'abord te créer un compte sur leur site pour y accéder.


PS :
Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Statut
Membre
Dernière intervention
30 juillet 2015
2
c'était déjà fait pour le résolu...j'ai retenu la leçon... lol
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
219
Bonjour,
essayer ceci :
Private Sub CheckBox1_Click()
toto CheckBox1
End Sub

Private Sub CheckBox2_Click()
toto CheckBox2
End Sub

Private Sub CheckBox3_Click()
toto CheckBox3
End Sub

Private Sub toto(c As Object)
Dim co As Range
Set co = Columns(Val(Right(c.Name, 1) + 4))
If c.Value Then
co.Hidden = True
Else
co.Hidden = False
End If
End Sub
Nota : on aurait pu créer un groupe de contrôles, mais pas vraiment utile pour seulement 3 checkboxes