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 :

Plusieurs formes avec le même nom : est-ce dangereux ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut Plusieurs formes avec le même nom : est-ce dangereux ?
    Bonjour,

    Dans mon fichier excel se trouvent plusieurs formes automatiques qui me servent de boutons.
    J'ai trois boutons "Bouton_A" identiques et trois boutons "Bouton_B" identiques, tous appellent la macro "Macro_Boutons".
    Dans la macro "Macro_Boutons", je me sers de Application.Caller pour récupérer le nom de la forme, ce qui me permet d'exécuter tel ou tel code.

    Ma question est : Est-ce que le fait d'avoir des formes portant le même nom est à éviter (risque d'erreur) ? Pourquoi ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Est-ce que ça fonctionne?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut
    Bien vu : impossible de nommer des formes avec le même nom. Il me semblait l'avoir déjà fait pourtant, je me suis donc trompé.
    Problème sans objet donc résolu, merci !
    Dans la pratique j'utiliserai donc "Bouton A1", "Bouton A2" ainsi que le test If left(Application.Caller,len(Application.Caller)-1) = "Bouton A" Then.

    Je me permet d'ajouter une réponse car en fait le problème demeure...

    Si je trace une forme, qui se nommera par exemple "Rectangle 21" et que je copie-colle cette forme, le nom de la nouvelle forme est automatiquement "Rectangle 22"
    Dans ce cas, Excel ne me laisse pas nommer une forme avec un nom déjà utilisé.

    Par contre :
    Si je trace une forme, que je renomme par exemple "azer_t" et que je copie-colle cette forme, le nom de la nouvelle forme est le même : "azer_t" !
    S'agit-il d'un bug d'Excel ?
    Si Excel empêche dans la pluspart des cas d'avoir des noms de formes identiques, il doit y avoir une bonne raison non ? Risque de bugs ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu fais un copier collé dans Excel ou dans vb?

    si ces dans vb montre ton code!

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut
    Je n'utilise pas VBA pour l'instant : je fais juste des tests dans excel avec les noms des formes, des ctrl-c / ctrl-v.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Je t'invite à passer du côté obscur de la force (Vba),et d créer tes form dynamiquement!
    Utilises l'enregistreur de macros pour t'aider!

    Attention j'ai dit créer pas copier coller

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 24
    Par défaut
    La question n'est pas vraiment de réussir à les créer avec le même nom, mais de savoir si, dans le cas où on y arrive (en passant par VBA par exemple), ces formes de noms identiques peuvent être un risque d'erreur par la suite.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui bien sur, sur la propriété action tu lui donne le nom d'une macro existante.

    Ça revient à ce que tu voulais faire initialement, un seule méthode pour toutes tes forms

  9. #9
    Invité
    Invité(e)
    Par défaut
    Salut,

    La réponse est non si il s'agit du Caption ou Texte de remplacement du Bouton. Ce qui compte réellement est la propriété Name que tu peux voir à gauche de la barre de formule lorsque tu clique sur l'un des bouton.
    La propriété Name est l'équivalent d'une clé et est unique au sein d'une même collection Shapes.

    Le Caption n'a pas besoin d'être unique par contre. C'est pour ça que tu vois le même Caption affiché sur plusieurs boutons, il a généralement le même nom que la propriété Name.

    @+

  10. #10
    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,

    En fait, MicroMatz a raison, si tu renommes la forme et ensuite tu la copie, le nom est le même et si tu boucle dessus (en VBA) la propriété "Name" retournera la même valeur pour tous mais c'est l'index "ID" qui les différencies :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Sub Test()
     
        Dim S As Shape
     
        For Each S In ActiveSheet.Shapes
     
            MsgBox "Nom : " & S.Name & vbCrLf & "Index : " & S.ID
     
        Next S
     
    End Sub
    Si on utilise la propriété Name pour désigner le Shape c'est le premier portant le nom auquel il sera fait référence (premier index). Pour le test, j'ai trois rectangles nommé "Mon Rectangle" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Test()
     
        Dim S As Shape
     
        Set S = ActiveSheet.Shapes("Mon Rectangle")
        MsgBox S.ID
     
    End Sub

  11. #11
    Invité
    Invité(e)
    Par défaut
    +1
    Bien vu (même si je n'arrive pas à reproduire cette effet). Je n'avais pas vraiment cherché plus loin.

    Mais c'est vrai que la valeur du Name n'est pas unique puisqu'il est de toute façon possible de grouper les contrôles au sein d'un seul et unique "Sheet.Shape" (Où Sheet réfère à un document (Worksheet, Chart ou autre d'ailleurs).)
    Dans le cas d'un groupe par exemple, l'ID ainsi que le Name du Sheet.Shape n'est pas bon car ce Shape (Unique) contient lui-même plusieurs autre Shape (Collection de Shape) au sein de la Collection GroupItems.

    Il y a également la collection ShapeRange. Dans le ShapeRange, il faut passer le "vrai nom" du Shape. Par exemple, si on groupe 2 Shapes ("Bouton 5" et "Bouton 6") en 1 seul Shape appelé (après groupement) "Groupe 1", dans ShapeRange, il faut passer "Bouton 5" et non "Groupe 1" même si le nom du Shape (unifié) est "Groupe 1".
    Idem pour l'ID, le vrai ID est celui d'un Item de la collection GroupItems si le MsoShapeType est égal à msoGroup.

    Je n'arrive pas à avoir un nom identique sans Regroupement. Il faudrait essayer la propriété Feuil.Shapes.Range("Nom").Count pour voir ce qu'elle renvoi. (Debug.Print Me.Shapes.Range("Bouton 1").Count, par exemple)

    Je n'ai pas non plus regardé ce que renvoi Application.Caller lorsqu'un seul nom est affecté à plusieurs Contrôles.
    Il faudrait regarder ça de plus près et voir le MsoShapeType, le GroupItems ainsi que le ShapeRange de plus près, ainsi que d'autres propriétés si nécessaire.

    @+

  12. #12
    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
    Re,

    Je n'arrive pas à avoir un nom identique sans Regroupement
    Tu pose une forme sur la feuille, par exemple un rectangle ensuite, dans la zone de nom tu lui donnes le nom que tu veux et après, tu copie (Ctrl+C) la forme puis tu colles (Ctrl+V) et tu vas voir que dans la zone de nom, les deux formes auront le même c'est à dire le nom que tu as donné au premier.
    Je n'ai pas non plus regardé ce que renvoi Application.Caller lorsqu'un seul nom est affecté à plusieurs Contrôles.
    Il faudrait regarder ça de plus près et voir le MsoShapeType, le GroupItems ainsi que le ShapeRange de plus près, ainsi que d'autres propriétés si nécessaire.
    "Application.Caller" retourne le nom du Shape qui a été cliqué mais comme ils sont identiques, ça peut créer des résultats innatendus donc, il est préférable de bien identifier chaque Shape avec des noms qui soient parlants et qui soient différents les uns des autres.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Est-ce que ce code sélectionne tous les Shapes portant le même nom ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub Bouton1_Cliquer()
        Dim v: v = Application.Caller
        If TypeName(v) = "String" Then
            Feuil2.Shapes.Range(v).Select
            ' Plutôt que :
            'Feuil2.Shapes(v).Select
        End If
    End Sub
    Egalement, est-ce que Me.Shapes.Range(v).Count renvoi 2 lorsque deux boutons portent le même nom ?

Discussions similaires

  1. Metadata XML - plusieurs balises avec le même nom
    Par Viceloque dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 05/03/2020, 13h23
  2. Form avec plusieurs entrées d'un même nom
    Par Clive40 dans le forum Langage
    Réponses: 4
    Dernier message: 18/03/2013, 17h12
  3. Réponses: 3
    Dernier message: 29/12/2008, 15h22
  4. Mettre à jour plusieurs champs avec la même requête, est-ce possible ?
    Par marchand_de_sable dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/06/2008, 17h36
  5. Problème pour différencier plusieurs select avec le même nom
    Par vallica dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/04/2006, 11h35

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