[resolu] [VBA] Cacher check box sous conditions

Cacher check box sous conditions [resolu] [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 02-05-2007 à 10:28:35    

Bonjour à tous,
 
je vous présente mon problème :
j'ai un tableau de données sur 11 colonnes (de la 3 à la 13)
sur la 14 la 15 et la 16 j'ai des checkboxes (pas dans un userform)
je souhaite que ces check box ne soit affiché que s'il y a des données dans toutes les colonnes de la ligne correspondante.
 
1- doit-je activer une macro créer à cet effet ("hidechk()" ) à chaque changement, ou il y a t'il une méthode moins couteuse en tps de calcul?
2-j'ai un problème lors de l'appel de "hidechk()" avec le message suivant :"select method of Checkbox class has failed"
 
voici le code avec lequel je crée mes box (un peu faignant)

Code :
  1. Sub AddCheckBoxes()
  2. Dim i, j As Integer
  3.     Application.ScreenUpdating = False
  4.     'Call erasecheck
  5.     For i = 3 To 12
  6.     For j = 14 To 16
  7.     Cells(i, j).Select
  8.     ActiveSheet.CheckBoxes.Add(Selection.Left, Selection.Top, Selection.Width, Selection.Height).Select
  9.             With Selection
  10.                 .LinkedCell = Cells(i, j).Address
  11.                 .Characters.Text = ""
  12.                 .name = "chk" & i & j
  13.             End With
  14.         Next j
  15.         Next i
  16.     i = 13
  17.     For j = 14 To 16
  18.     Cells(i, j).Select
  19.     ActiveSheet.CheckBoxes.Add(Selection.Left, Selection.Top, Selection.Width, Selection.Height).Select
  20.             With Selection
  21.                 .LinkedCell = Cells(i, j).Address
  22.                 .Characters.Text = "All"
  23.                 .name = "chk" & i & j
  24.             End With
  25.         Next j
  26.        Application.ScreenUpdating = True
  27. End Sub


 
et celui qui me sert à verifier puis à cacher !

Code :
  1. Public Sub hideboxes()
  2. Dim i, j, k As Integer
  3. Dim name As String
  4. Dim cbox As CheckBox
  5. For i = 3 To 12
  6. MsgBox i
  7. visibility = True
  8.     For j = 3 To 13
  9.     If Cells(i, j).Value = "" Then
  10.         visibility = False
  11.     End If
  12.     Next
  13.        For k = 14 To 16
  14.        name = "chk" & i & k
  15.         If visibility = False Then
  16.                 ActiveSheet.CheckBoxes(name).Select
  17.                 Selection.Visible = False
  18.             Else
  19.                 ActiveSheet.CheckBoxes(name).Select
  20.                 Selection.Visible = True
  21.         End If
  22.         Next
  23. Next
  24. End Sub


MsgBox i me sert à verifier à quel moment il plante, je vous le donne dans le mille, il m'affiche "3" puis plus rien...
 
mercid 'avance pour le ocup de main éventuel
 
Benjamin


Message édité par merenptah44 le 03-05-2007 à 15:01:22
Reply

Marsh Posté le 02-05-2007 à 10:28:35   

Reply

Marsh Posté le 02-05-2007 à 14:17:57    

Ton code fonctionne bien chez moi.
Il faut faire attention à ne pas créer plusieurs fois tes checkboxes CK33, etc....
Ton ADD crééà chaque fois les ckxx, alors que ton hide les caches seulement.

Message cité 1 fois
Message édité par Paul Hood le 02-05-2007 à 14:18:10
Reply

Marsh Posté le 02-05-2007 à 14:40:45    

Paul Hood a écrit :

Ton code fonctionne bien chez moi.
Il faut faire attention à ne pas créer plusieurs fois tes checkboxes CK33, etc....
Ton ADD crééà chaque fois les ckxx, alors que ton hide les caches seulement.


et voila je me sens très con ...
j'a itout effacé bien proprement
en réaffichant tout ce qui avait pu être planqué
et là il tourne
 
cette erreur, comme tu le disais, arrive quand il y a deux chkbox du même nom, ou que la check n'existe pas d'ailleurs... pfff moitié pas fin moi...
 
sinon aurais tu une idée pour que j'éxécute la procedure hide_chk() afin qu'il ne me les cache plus quand il ne le doit plus ?
avec un worksheet_change ?
 
merci pour ta réponse au fait


Message édité par merenptah44 le 02-05-2007 à 15:04:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed