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

Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
- - Dernière réponse : cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
- 27 sept. 2014 à 11:16
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

--
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de banana32
Messages postés
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
1
Merci
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

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

jordane45
Messages postés
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
-
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
Commenter la réponse de jordane45
Messages postés
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
0
Merci
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
Commenter la réponse de jordane45
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
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
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
-
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

.
Commenter la réponse de cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
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
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
-
oui c'est control.value qu'il n'aime pas. regarde mes messages suivants.. j'ai modifié avec PRESSED.
Commenter la réponse de cco86260
Messages postés
166
Date d'inscription
dimanche 22 janvier 2012
Dernière intervention
30 juillet 2015
0
Merci
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
23658
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 décembre 2018
-
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
Dernière intervention
30 juillet 2015
-
c'était déjà fait pour le résolu...j'ai retenu la leçon... lol
Commenter la réponse de cco86260
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
0
Merci
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

Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.