Modification des noms de case à cocher et cellule de référence

Bonjour,

Pourriez vous m'indiquer le code à utiliser pour renommer une case à cocher et modifier la cellule de référence qui lui est attachée lorsque je duplique des colonnes dans un tableur contenant ce genre d'objet.

J'ai joint un fichier test.

Merci par avance,

Cordialement

JMV

25testnewexer.xlsm (28.45 Ko)

Bonjour,

Pour le moment je n'ai pas reçu de réponse à mon message précédent.

En complément de ce message, quelqu'un peut-il m'indiquer comment je peux retrouver le nom des objets de type "check-box" qui ont été créés lors de l'insertion des nouvelles colonnes à partir des colonnes copiées contenant des cases à cocher.

Merci par avance pour votre aide,

Cdt

JMV

modifier la cellule de référence qui lui est attachée

Bonjour, Désolé, ton sujet était passé inaperçu

Pour cela ...

    ActiveSheet.Shapes.Range(Array("Check Box 1")).Select
    With Selection
        .LinkedCell = "$A$7"
        .Display3DShading = False
    End With

et pour le renommer

ActiveSheet.Shapes("Check Box 1").Name = "xyz"

Bonjour,

merci pour la réponse.

Je vais essayer sur le fichier de test et confirmer résultat dès que possible.

Cdt

Bon weekend,

JMV

Le code transmis fonctionne et correspond bien à ce que je veux faire.

Par contre, lorsque je crée un nouvel exercice, il y a une vingtaine de cases à cocher qui sont recopiées.

Comment puis-je retrouver les identifiants qu'Excel a attribué aux nouvelles cases pour pouvoir modifier leur cellule de référence respective?

D'autre part, est-il possible de modifier par macro le libellé (caption) des cases à cocher?

Merci par avance

Cdt

JMV

Comment puis-je retrouver les identifiants qu'Excel a attribué aux nouvelles cases pour pouvoir modifier leur cellule de référence respective?

Sub liste()

    For Each Sh In ActiveSheet.Shapes
        Debug.Print Sh.Name
    Next

End Sub

D'autre part, est-il possible de modifier par macro le libellé (caption) des cases à cocher?

Il n'y a pas de caption ... un exemple de modif du texte

        If sh.Name = "Check Box 2" Then
            ActiveSheet.Shapes.Range(Array(sh.Name)).Select
            Selection.Characters.Text = "nouveau texte pour check box 2"
        End If

Pour la modification du libellé, c'est OK. Merci.

Pour la sélection de chaque nouvelle check box, je ne connais pas le nom attribué par Excel. Avec ce code, on peut accéder en séquence à toutes les check boxes de la feuille.

En fait compte tenu de ce que j'essaie de faire, il faudrait pouvoir sélectionner en séquence uniquement chaque nouvelle checkbox pour modifier son libellé et sa cellule liée.

Les nouvelles check boxes sont copiées sur des lignes que je connais, dans un range de colonnes connues également.

Ces check boxes ont une position sur la feuille. Est-il possible d'accéder aux coordonnées de ces objets? Est-il possible de lier physiquement une check box à une cellule comme c'est le cas pour les check Boxes de Control Active X?

Merci par avance,

Cdt

JM

Pour la sélection de chaque nouvelle check box, je ne connais pas le nom attribué par Excel. Avec ce code, on peut accéder en séquence à toutes les check boxes de la feuille.

Oui mais si elles sont toutes renommées en temps voulu, on trouveras donc les nouvelles.

Mais en effet, s'il y en a plusieurs, il faudrait pouvoir les distinguer par leur position (ou par la cellule à laquelle elles se rattachent).

Je vais regarder ...

Tu as ici les coordonnées x,y de la position de la check-box

    Debug.Print ActiveSheet.Shapes("Check Box 1").Top
    Debug.Print ActiveSheet.Shapes("Check Box 1").Left

à rapprocher de la position de range

Merci,

je regarde comment utiliser ce code pour retrouver les cases. Ce n'est pas gagné parce que je ne connais pas le nom des cases!

Identifier la case par la cellule liée ne peut pas fonctionner parce que la copie reste liée à la même cellule que la case copiée. J'ai essayé d'enlever les $ dans la formule de la cellule liée, mais cela ne change rien, la nouvelle case reste obstinément liée à la même cellule que la case d'origine.

Si ces cases pouvaient être rattachées à une cellule la solution est immédiate.

Encore un grand Merci,

Bon weekend

Cdt

JM

Petit complément ... on n'est pas loin :

    ActiveSheet.Shapes.Range(Array("Check Box 1")).Select
    With Selection
        Debug.Print Range(.LinkedCell).Top
        Debug.Print Range(.LinkedCell).Offset(0, 1).Left
        Debug.Print .Top
        Debug.Print .Left
    End With

Bonsoir

à partir de ton code, j'ai écrit une macro "Find_Checkbox" dont voici le code

Sub Find_Checkbox()
'
Dim Sh As Shape
Dim BoxName As String

    For Each Sh In ActiveSheet.Shapes
        Debug.Print Sh.Name
       'MsgBox (Sh.Name)
       ' BoxName = Sh.Name
        ActiveSheet.Shapes.Range(Array(Sh.Name)).Select
        With Selection
            Debug.Print Range(.LinkedCell).Top
            Debug.Print Range(.LinkedCell).Offset(0, 1).Left
            Debug.Print .Top
            Debug.Print .Left
        End With
    Next
End Sub

J'obtiens une erreur "1004" sur l'instruction Debug.Print Range (.linkedCell).top

Je ne connais pas et ne comprends pas cette instruction Debug.print.

Peux-tu m'expliquer STP?

A+

JM

Debug.Print Range(.LinkedCell).Top

Debug.Print permet d voir le contenu d'une variable ou le résultat d'un calcul

>> dans l'explorateur de macro : Affichage > Fenêtre d'exécution ou Ctrl+G.

Il est probable que le shape capté par ta macro ne soit pas un check-box, auquel cas il n'y a pas de linkcell

En effet, c'est bien le cas car il bogue sur le Button 7

capture d ecran 161

Ajoute un test sur FormControlType

Sub Find_Checkbox()
'
Dim Sh As Shape
Dim BoxName As String

    For Each Sh In ActiveSheet.Shapes
        Debug.Print Sh.Name
        Debug.Print Sh.FormControlType
        If Sh.FormControlType = 1 Then
            ActiveSheet.Shapes.Range(Array(Sh.Name)).Select
            With Selection
                Debug.Print Range(.LinkedCell).Top
                Debug.Print Range(.LinkedCell).Offset(0, 1).Left
                Debug.Print .Top
                Debug.Print .Left
            End With
        End If
    Next
End Sub
2020 10 17 22 01 37 microsoft visual basic analyse comptes de resultat v421 copie xlsm executio

Bonsoir,

Merci pour ton explication de "Debug.print" que je ne connaissais pas. C'est une fonctionnalité intéressante pour déboguer.

J'ai une question complémentaire:

Avec les coordonnées Top et Left de la cellule associée, est-il possible de retrouver ligne et colonne de cette cellule?.

et un souci:

Lorsque la macro s’exécute dans mon fichier réel contenant 12 exercices comptables répartis sur 309 colonnes, j'obtiens une erreur similaire à celle que j'avais avec le bouton 7, mais cette fois sur un objet nommé "Commentaire 3". Je ne sais pas à quoi correspond cet objet

J'ai joint une impression d'écran

Pour accélérer le processus de recherche, est-il possible de n'explorer qu'une partie de la feuille, les 25 dernières colonnes correspondant à la taille du nouvel exercice?

Merci,

Cdt

JMV

Lorsque la macro s’exécute dans mon fichier réel contenant 12 exercices comptables répartis sur 309 colonnes, j'obtiens une erreur similaire à celle que j'avais avec le bouton 7, mais cette fois sur un objet nommé "Commentaire 3". Je ne sais pas à quoi correspond cet objet

Il s'agit d'un commentaire apposé sur une cellule. Mais cela arrivera aussi sur des zones de texte.

Dans ce cas, on va ajouter une fonction de recherche du type de contrôle avec gestion d'erreur.

Dim sh As Shape
Dim BoxName As String

    For Each sh In ActiveSheet.Shapes
        Debug.Print sh.Name, TypeControle(sh)
        If TypeControle(sh) = 1 Then
            ActiveSheet.Shapes.Range(Array(sh.Name)).Select
            With Selection
                Debug.Print Range(.LinkedCell).Top
                Debug.Print Range(.LinkedCell).Offset(0, 1).Left
                Debug.Print .Top
                Debug.Print .Left
            End With
        End If
    Next
End Sub
Function TypeControle(sh As Shape)
    TypeControle = "ce n'est pas un contrôle"
    On Error Resume Next
    TypeControle = sh.FormControlType
End Function
capture d ecran 168

Avec les coordonnées Top et Left de la cellule associée, est-il possible de retrouver ligne et colonne de cette cellule?.

On n'a pas besoin des coordonnées ... il suffit d'avoir l'adresse de la cellule associé.

Debug.Print sh.Name, .LinkedCell, Range(.LinkedCell).Row, Range(.LinkedCell).Column

donnera ceci

Check Box 1                $B$7           7             2 
Check Box 2                B11            11            2 
Check Box 3                $E$7           7             5 
Check Box 4                $E$11          11            5 
Rechercher des sujets similaires à "modification noms case cocher reference"