2 votes

boucler les boutons de commande de la feuille de calcul et changer la visibilité

J'essaie d'écrire un code pour rendre visible un certain nombre de boutons en fonction de la valeur d'une cellule

J'ai 10 boutons de commande qui sont tous invisibles et je veux afficher seulement le premier x x est la valeur de la cellule "A1" dans "Sheet1" (de 1 à 10) Les noms des boutons de commande sont les noms par défaut (Bouton de commande 4, Bouton de commande 5, ... , Bouton de commande 13).

Note : Je travaille avec une feuille de calcul et non un formulaire utilisateur.

Voici mon code, mais j'ai besoin de quelque chose de plus court et de plus pro et efficace.

Private Sub CommandButton15_Click()
    Dim i As Long
    Dim CommandButton() As Variant

    Application.ScreenUpdating = False

    CommandButton = Array("CommandButton4", "CommandButton5", "CommandButton6", "CommandButton7",     "CommandButton8", "CommandButton9", "CommandButton10", "CommandButton11", "CommandButton12", "CommandButton13")

    For i = LBound(CommandButton) To LBound(CommandButton) + Sheet1.Range("A1").Value - 1

        Sheet1.Shapes(CommandButton(i)).Visible = True

    Next i

    Application.ScreenUpdating = True

End Sub

Besoin d'aide

2voto

MiVoth Points 788

Comme indiqué dans le commentaire, vous devriez renommer vos boutons. Cela rend les choses plus faciles.

Vous pouvez par exemple les nommer "btn1", "btn2", "btn3" .... Votre code est correct et je ne vois pas d'erreurs majeures. Je ne sais pas si vous voulez ajouter de nouveaux boutons plus tard.

Si c'est le cas, je recommanderais quelque chose de plus générique. Si vous renommez les boutons en "btn1"... alors vous pourriez utiliser quelque chose comme ceci :

Private Sub CommandButton15_Click()
Dim btn As OLEObject, name As String, i As Long
i = Sheets(1).Range("A1").Value + 1
For Each btn In ActiveSheet.OLEObjects
    name = btn.name
    If btn.OLEType = xlButtonOnly And InStr(name, "btn") = 1 Then
        If Int(Right(name, Len(name) - 3)) < i Then
            btn.Visible = True
        Else
            btn.Visible = False
        End If
    End If
Next
End Sub

Vous pouvez donc ajouter de nouveaux boutons en les nommant avec le motif "btn " et vous n'avez pas besoin de modifier votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X