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 :

Nom d'une Shape line


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Nom d'une Shape line
    Bonjour,
    La question est la suivante :

    Je crée un segment sur une feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes.AddLine(300, 50, 700, 500).Line.ForeColor.RGB = RGB(255, 0, 0)
    par la suite, je souhaite translater cette ligne par l'intermédiaire d'un scrollbar parexemple.
    Le problème est que pour que je puisse selectionner la ligne en question pour la déplacer, il faut que je connaisse son NOM, où que je lui attribue un NOM!

    Donc comment CONNAÎTRE ou ATTRIBUER un NOM à une ligne?

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Dim maLigne As Shape
     
    'Affecte la variable maLigne à la ligne nommée LaLigne
    On Error Resume Next
    Set maLigne = ActiveSheet.Shapes("LaLigne")
    On Error GoTo 0
    'Si LaLigne n'existe pas, on la crée
    If maLigne Is Nothing Then
        Set maLigne = ActiveSheet.Shapes.AddLine(300, 50, 700, 500)
        With maLigne
            .Line.ForeColor.RGB = RGB(255, 0, 0)
            .Name = "Laligne"
        End With
        MsgBox "créée"
    Else
        MsgBox "LaLigne existe déjà"
    End If
    'on est sûr de l'existence d'une ligne appelée LaLigne
    maLigne.Left = 0
    MsgBox "LaLigne déplacée"
    Set maLigne = Nothing

  3. #3
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    tu peux également retrouver ta ligne dans la collection Shapes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sh As Shape
    For Each sh In ActiveSheet.Shapes
      Debug.Print sh.Name
    Next
    End Sub

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup, cela fonctionne parfaitement!

    du code je n'ai gardé que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set maLigne = ActiveSheet.Shapes.AddLine(300, 50, 700, 500)
        With maLigne
            .Line.ForeColor.RGB = RGB(255, 0, 0)
            .Name = "Laligne"
        End With
    J'avais bien eu l'idée d'utiliser la propriété .Name, mais j'avais mal définit la construction de ma ligne, et c'est grâce à l'instruction SET que le problème se résout!

    @+ Em

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Attention quand même si tu as sur la feuille l'existence préalable d'une ligne portant le même nom LaLigne, tu auras du souci pour désigne laquelle.
    J'ai fais un test croyant qu'un seul nom peut être attribué à un sahpe, mais apparemment, on peut insérer plusieurs shape portant le même nom.
    En plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set maLigne = ActiveSheet.Shapes("LaLigne")
    indique le première shape portant le nom LaLigne

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci et je comprends le propos,
    mais en ce qui concerne ce que je souhaite faire le problème de dualité de nom ne se posera pas, puisque justement le but est de "forcer" le nom des lignes crées pour pouvoir les gérer par la suite.

    Le but du jeu est le suivant :

    1) créer un triangle de dimensions donnés
    2) Dans ce triangle créer un rectangle dont les sommets "touchent" chacun des côtés
    3)déterminer la position optimale d'un sommet du rectangle afin que son aire soit maximale.

    Le mot "jeu " est à prendre au sens propre, car je m'amuse énormément à programmer, même si le mot "défit" me vient aussi à l'esprit.

    En fait je suis enseignant en maths, et je cherche des idées parce que j'ai crée un "club" Maths et programmation.

    @+ EM

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir
    Justement j'avais dans la première proposition "ajouté" des lignes de code pour que dans n'importe quel cas, il y aura une unique ligne portant un nom donné. C'était une précaution à prendre au cas où.

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

Discussions similaires

  1. [WD-2010] Shapes - changer le nom après une copie
    Par oamram dans le forum VBA Word
    Réponses: 7
    Dernier message: 06/11/2012, 12h51
  2. [XL-2000] Shapes - Comment changer le nom d'une shape appartenant à un groupe
    Par arnaud.123 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2011, 11h40
  3. Serialisation d'une instance de la classe shapes.line
    Par SandyF dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 21/12/2010, 18h02
  4. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50
  5. Modifier le nom d'une base de donnée avec erreur sy
    Par mmn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2003, 10h12

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