IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Renommer des rectangles (Shapes) [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut Renommer des rectangles (Shapes)
    Bonjour à toutes et à tous,

    J'ai fait une feuille Excel sur la mythologie grecque. Elle comporte 288 rectangles (shapes) affichant le nom des dieux ou héros et reliés par des traits (line).
    Sur cette feuille, j'ai la liste (AG1:AG288) de tous les noms contenus dans les rectangles.
    Je voudrais maintenant faire deux choses :
    1) Que le nom de chaque rectangle soit le texte affiché dans le rectangle. J'ai fait cette procédure qui ne fonctionne pas !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Cell In Range("AG1:AG288")
            Selection.ShapeRange.Name = Cell.Value
        Next
    2) Je voudrais qu'en mettant le focus sur une cellule de la liste (AG1:AG288) le rectangle portant le même nom se colorie en rouge.
    Là … je cale aussi !

    Si un(e) spécialiste pouvait me mettre sur la piste, ça m'enlèverait une sacrée épine du pied !
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Ca devrait le faire .... mais il aurait été plus commode de créer les shapes en tant que text box ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub TestRect()
     
    Dim Wsh As Worksheet
    Dim Shap As Shape
     
    Set Wsh = ThisWorkbook.Worksheets("Feuil1")
     
    If Wsh.Shapes.Count = 0 Then Exit Sub
     
    For Each Shap In Wsh.Shapes
        If InStr(1, Shap.Name, "Rectangle", vbTextCompare) > 0 Then
            Debug.Print Shap.Name, Shap.AlternativeText, Shap.Title, Shap.TextFrame.Characters.Text
            Shap.Name = Shap.TextFrame.Characters.Text
        End If
     
    Next Shap
    End Sub
    Bonne journée

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    approximativement comme Vincent.
    à mettre où tu veux, dans le module de la feuille ou un module standard et à exécuter une seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub Renommer()
     
        Dim S As Shape
        Dim I As Integer
     
        For Each S In ActiveSheet.Shapes
     
            'gère les erreurs dues au Shapes "Line"
            On Error Resume Next
     
            S.Name = S.TextFrame.Characters.Text
     
            'fait coincider les noms de shape avec les valeurs des cellules
            Cells(I, 12).Value = S.Name
     
        Next S
     
    End Sub
    à mettre dans le module de la feuille et à adapter à tes besoins. Attention, ici la colonne cible est la colonne L :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
        Dim S As Shape
        Dim I As Integer
     
        'seulement la colonne L (à adapter...)
        If Target.Column <> 12 Then Exit Sub
     
        'une seule cellule doit être sélectionnée
        If Target.Count > 1 Then Exit Sub
     
        'gère l'erreur des Shapes "Line" et du nom inexistant
        On Error Resume Next
     
        'efface la couleur rouge
        For Each S In Me.Shapes
     
            S.Fill.ForeColor.RGB = RGB(255, 255, 255)
     
        Next S
     
        'doit contenir un nom
        If Target.Value = "" Then Exit Sub
     
        'colore le shape correspondant en rouge
        Me.Shapes(Target.Value).Fill.ForeColor.RGB = RGB(255, 0, 0)
     
    End Sub
    Hervé.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour tout le monde,

    J'en étais arrivé aux mêmes conclusions et au même résultat au niveau du code.
    Je ne le remet pas, cela ferais doublon.

    Mon intervention se limitera donc à prévenir l'utilisateur des fautes d'orthographe.
    En colonne L on trouve Eurynomée que l'on trouve orthographié comme ceci dans le Shape : Eurynomé

    En cas d'automatisation précise, cela risque de planter.

    Cordialement,

    Pijaku

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir Pijaku,

    Mon intervention se limitera donc à prévenir l'utilisateur des fautes d'orthographe.
    En colonne L on trouve Eurynomée que l'on trouve orthographié comme ceci dans le Shape : Eurynomé
    C'est ce que j'ai constaté aussi et c'est pour cette raison que dans mon code je fais coïncider le nom des shapes avec les cellules :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    'fait coincider les noms de shape avec les valeurs des cellules
    Cells(I, 12).Value = S.Name
    ...
    Hervé.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 13
    Par défaut Merci à tous pour votre contribution
    Vinc_Bilb
    J'ai essayé la 1ère procédure : Elle plante avec message "Propriété ou méthode non gérée par cet objet" et elle met "Debug.Print Shap.Name, Shap.AlternativeText, Shap.Title, Shap.TextFrame.Characters.Text" en surbrillance.

    Thèze
    J'ai essayé la 1ère procédure : Elle marche ! Mais j'avoue ne pas comprendre la ligne "Cells(I, 12).Value = S.Name" d'autant plus que I n'est incrémenté nulle part. Si tu as le temps explique-moi !
    Je n'ai pas encore essayé le 2ème procédure, je te tiens au courant dès mes essais finis.

    Pikaju
    Merci pour ta remarque, mais l'erreur est due à la précipitation pour faire le fichier exemple. Il va de soi que dans le vrai fichier les noms concordent.

    Merci encore à tous les 3

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Oups, là j'ai foiré grave

    voici le code modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Sub Renommer()
     
        Dim S As Shape
        Dim I As Integer
     
        For Each S In ActiveSheet.Shapes
     
            'gère les erreurs dues au Shapes "Line"
            On Error Resume Next
     
            S.Name = S.TextFrame.Characters.Text
     
     
            'fait coincider les noms de shape avec les valeurs des cellules
            If InStr(S.Name, "Line") = 0 Then
     
                I = I + 1
                Cells(I, 12).Value = S.Name
     
            End If
     
        Next S
     
    End Sub
    Désolé !

    Hervé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Placer des rectangle sur un JFrame, sans superposition?
    Par danje dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 24/11/2005, 23h46
  2. Renommer des disques
    Par m-mas dans le forum Windows XP
    Réponses: 2
    Dernier message: 25/10/2005, 15h12
  3. Renommer des fichiers
    Par Cathy dans le forum Linux
    Réponses: 3
    Dernier message: 12/09/2005, 17h24
  4. [LG]programme qui renomme des fichiers
    Par Ne0taku dans le forum Langage
    Réponses: 9
    Dernier message: 16/02/2005, 21h18
  5. [] [Réseau] Renommer des fichiers dans un site FTP
    Par JerBi dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 22/08/2003, 00h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo