Masquer colonne via CheckBox (dans ruban)

Résolu
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre Dernière intervention 30 juillet 2015 - 27 sept. 2014 à 10:01
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre 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

--

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
1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 sept. 2014 à 10:47
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

1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 sept. 2014 à 10:50
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
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié par jordane45 le 27/09/2014 à 10:24
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
0
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre Dernière intervention 30 juillet 2015 2
Modifié par cco86260 le 27/09/2014 à 10:36
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

--
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 sept. 2014 à 10:36
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

.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre Dernière intervention 30 juillet 2015 2
27 sept. 2014 à 10:40
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
--
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 sept. 2014 à 10:51
oui c'est control.value qu'il n'aime pas. regarde mes messages suivants.. j'ai modifié avec PRESSED.
0
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre Dernière intervention 30 juillet 2015 2
Modifié par cco86260 le 27/09/2014 à 11:09
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

--
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
27 sept. 2014 à 11:13
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
0
cco86260 Messages postés 166 Date d'inscription dimanche 22 janvier 2012 Statut Membre Dernière intervention 30 juillet 2015 2
27 sept. 2014 à 11:16
c'était déjà fait pour le résolu...j'ai retenu la leçon... lol
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
27 sept. 2014 à 11:15
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

0
Rejoignez-nous