XL 2010 Renommer des boutons de commande selon valeurs de cellules

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

  • Essai bouton.xlsm
    24.7 KB · Affichages: 15

Dudu2

XLDnaute Barbatruc
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
 

Dudu2

XLDnaute Barbatruc
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...")
 

Ryoken

XLDnaute Nouveau
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
 

Ryoken

XLDnaute Nouveau
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?
 

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 158
dernier inscrit
laufin