XL 2010 Renommer des boutons de commande selon valeurs de cellules

  • Initiateur de la discussion Initiateur de la discussion Ryoken
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Ryoken

XLDnaute Nouveau
Bonjour la communauté,

J'ai un soucis. J'essai d'imbriquer plusieurs variables dans une commande de feuille "Worksheet_Change". Sachant qu'on ne peut avoir qu'une seule commande de ce type par feuille, je ne sais pas comment compiler plusieurs fonctions.

Je m'explique: J'essai de faire en sorte que le bouton A prenne la valeur de la cellule F11. Jusque là, ça fonctionne. LE problème est que je dois faire de même pour 10 boutons au total, avec chacun un nom différent, qui doivent faire référence comme suite:

Bouton A = F11
Bouton B = F14
Bouton C = F17
etc...

Je joint un fichier démo si ça peut vous aider

Mon code actuel est le suivant, mais ce fonctionne que pour la 1er variable.
VB:
Dim xStr As String
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xShapeRg As ShapeRange
    On Error Resume Next
    If Not Application.Intersect(Target, Range("F11")) Is Nothing Then
        Me.CommandButton1.Caption = Target.Text
        Set xShapeRg = ActiveSheet.Shapes.Range(xStr)
        If xShapeRg Is Nothing Then Set xShapeRg = ActiveSheet.Shapes.Range("CommandButton1")
        Application.EnableEvents = False
        xShapeRg.Select
        Application.EnableEvents = True
        Selection.Name = Target.Text
    End If
    Dim xShapeRg As ShapeRange
    On Error Resume Next
    If Not Application.Intersect(Target, Range("F14")) Is Nothing Then
        Me.CommandButton2.Caption = Target.Text
        Set xShapeRg = ActiveSheet.Shapes.Range(xStr)
        If xShapeRg Is Nothing Then Set xShapeRg = ActiveSheet.Shapes.Range("CommandButton2")
        Application.EnableEvents = False
        xShapeRg.Select
        Application.EnableEvents = True
        Selection.Name = Target.Text
    End If
End Sub
Merci d'avance pour votre précieuse aide.
 

Pièces jointes

Une proposition...
1 - Renommer les CommandButton pour faire une relation avec leur cellule de référence:
CommandButton1 -> CBF11, CommandButton2 -> CBF14, CommandButton3 -> CBF17
2 - Créer un Range multi-areas pour refléter désigner les cellules concernées (voir code variable CellulesBoutons)
3 - Utiliser un code de ce genre
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim CellulesBoutons As Range
    Set CellulesBoutons = Me.Range("F11,F14,F17")

    Application.EnableEvents = False

    If Not Application.Intersect(Target, CellulesBoutons) Is Nothing Then
        Me.OLEObjects("CB" & Replace(Target.Address, "$", "")).Object.Caption = Target.Value
    End If

    Application.EnableEvents = True
End Sub
 
C'est surtout l'étape 1 qui est importante. L'étape 2 est simplement incluse dans le code.
Il te faut renommer les CommandButton. Tu dois savoir le faire non ?
Onglet Developpeur / Mode Création / clic droit sur le bouton / Propriétés / (Name) à changer: (remplace CommandBouton1 par CBF11 par exemple).
C'est juste une convention pour retrouver F11 dans le nom du bouton, F11 étant l'adresse de la cellule qui lui est associée (sans les $ d'un $F$11).

Si ça t'amuse tu peux le renommer CommandButtonF11 ou MaBlondeF11, si le code VBA est adapté.

Dans le code que je t'ai indiqué il faut "CB" + l'adresse de la cellule concernée. de manière à ce que
Me.OLEObjects("CB" & Replace(Target.Address, "$", "")).Object désigne le bouton en question.

Concernant l'étape 2, il faut que tu listes les adresses des cellules en relation avec les boutons:
Set CellulesBoutons = Me.Range("F11,F14,F17, etc...")
 
Bonjour,

Merci pour ton aide précieuse. J'ai fait comme tu m'a dis, mais ça ne fonctionne pas. J'ai renomé les bouton (name). J'ai mis le code tu as fourni en ajoutant les valeurs Set CellulesBoutons = Me.Range("F11,F14,F17, etc...") . Aurais-je oublié un point?

VB:
Private Sub CommandButton1_Click()

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim CellulesBoutons As Range
    Set CellulesBoutons = Me.Range("F11,F12,F13")

    Application.EnableEvents = False

    If Not Application.Intersect(Target, CellulesBoutons) Is Nothing Then
        Me.OLEObjects("CB" & Replace(Target.Address, "$", "")).Object.Caption = Target.Value
    End If

    Application.EnableEvents = True
End Sub

Merci pour ton retour
 
Après bien quelques essais, j'ai finalement réussi à le faire fonctionner.

Toutefois, les valeurs cellule permutent bien, mais pas celle des boutons. Je m'explique.
La valeur de la cellule de référence change, mais le bouton garde l'ancienne valeur. il se met quand même à jour, si dans la cellule référence, je double clic et fait "enter". Alors là seulement le nom du bouton se modifie en conséquence.

Y a-t-il uns solution pour mettre automatiquement le nom à jour, dès que la cellule change de valeur?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
318
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
Réponses
4
Affichages
223
Réponses
14
Affichages
469
Réponses
4
Affichages
427
Réponses
9
Affichages
2 K
Retour