XL 2010 Disparition de bouton ActiveX à la fermeture

Douwors

XLDnaute Nouveau
Bonjour à tous !

Je suis novice en VBA, et je rencontre un problème auquel je n'ai trouvé aucune solution malgré mes longues recherches sur le forum. Je ne peux malheureusement pas vous fournir le fichier qui est confidentiel, je vais donc tenter d'être le plus claire possible :

J'ai créé un fichier Excel 2010, dans lequel une macro me permet de faire apparaître / disparaître les lignes en fonction d'un clic sur un bouton ActiveX. Tout fonctionne très bien, le code utilisé est le suivant :

"
VB:
Private Sub CodeLot_Click()
      
    Worksheets("Feuil1").Unprotect
    
    If CodeLot.Value = True Then
        Rows("X:X").Activate
        Selection.EntireRow.Hidden = False
    Else
        Rows("X:X").Activate
        Selection.EntireRow.Hidden = True
    End If
    
    Range("AX:BX").Activate
    
    Worksheets("Feuil1").Protect
    
End Sub
"

Je voudrais ajouter des menus déroulant dans les parties qui sont masquées lorsque le bouton ActiveX n'est pas coché. Pour cela, j'utilise le bouton "Zone de liste déroulante" avec le contrôle ActiveX (la validation des données n'est pas possible car elle induit un beug lors de l'ajout dans le logiciel auquel le document est destiné, et le contrôle de formulaire reste apparent lorsque les lignes sont masquées).

Malheureusement, lorsque j'enregistre le document avec les lignes masquées, la liste déroulante disparaît. D'après mes recherches, il s'agit d'un beug d'Excel 2010 qui fait rétrécir le menu jusqu'à lui donner la forme d'un point.

J'ai tenté le code suivant trouvé sur un forum mais rien n'y fait :

Code:
Sub mémoriser(ComboBox2)
Dim Ctrl As Object
Lig = 2
For Each Ctrl In ActiveSheet.Shapes
Sheets("Feuil1").Cells(Lig, 1) = Ctrl.Name
Sheets("Feuil1").Cells(Lig, 3) = Ctrl.Top
Sheets("Feuil1").Cells(Lig, 4) = Ctrl.Height
Lig = Lig + 1
Next Ctrl
End Sub

Sub restituer(ComboBox2)
Dim Ctrl As Object
Lig = 2
With Sheets("Feuil1")
While .Cells(Lig, 1) <> ""
ActiveSheet.Shapes(.Cells(Lig, 1)).Top = .Cells(Lig, 3)
ActiveSheet.Shapes(.Cells(Lig, 1)).Height = .Cells(Lig, 4)
Lig = Lig + 1
Wend
End With

End Sub

Auriez vous une solution ?

Merci par avance !
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Douwors (bienvenue sur le forum)

Douwors
Une suggestion en passant
Plutôt qu'un CommandButton, tu peux utiliser un ToggleButton
Cela simplifie ton code
VB:
Private Sub ToggleButton1_Click()
'ToggleButton cliqué-> les lignes sont masquées
'ToggleButton décliqué-> les lignes sont affichées
Rows("10:15").Hidden = ToggleButton1
End Sub

Sinon pour le reste, joins un fichier exemple

NB:
On ne joint jamais le fichier original, on créé un fichier exemple simplifié avec des données fictives qui sert juste à illustrer la problématique rencontrée.

PS: Si tu préfères utiliser un CommandButton, tu peux aussi simplifier
(voir ci-dessous)
VB:
Private Sub CommandButton1_Click()
Rows("10:15").Hidden = Not Rows("10:15").Hidden
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 036
Messages
2 084 812
Membres
102 676
dernier inscrit
LN6