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

Windows Forms Discussion :

Formulation de la doc Microsoft Shapes.range [Débutant]


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut Formulation de la doc Microsoft Shapes.range
    Bonjour,
    Sous VB.NET, j'essaye de grouper des formes dans Excel. Pour cela, je me base sur la doc de Microsoft au titre de l'espace de noms "Microsoft.Office.Interop.Excel ". Pour grouper les formes, j'utilise la méthode ShapeRange.Group mais, avant, je dois sélectionner les formes via la propriété Shapes.Range.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      ListNoms(0) = NameEtiquette
      ListNoms(1) = "Barre"
     
      wsExcel.Shapes.Range() = ListNoms
    Je ne comprends pas l'erreur indiquée pour cette ligne:
    "Argument non spécifié pour le paramètre 'Index' de 'ReadOnly Property Range(Index As Object) As ShapeRange'."
    La doc spécifie la propriété comme suit: Shapes.Range[Object] Property
    Ma question est la suivante: comment comprendre ce que représentent les crochets autour de Object ou comment corriger l'erreur indiquée?

    D'avance merci de votre aide

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Les crochets indiquent simplement que Range est un tableau.
    Et en tant que tel, il faut préciser un indice pour accéder à une valeur dans ce tableau.
    Cela est confirmé par le message d'erreur qui d'indique que Range demande un paramètre nommé Index.

    Ce n'est pas le seul problème remonté par l'erreur.
    ReadOnly Property Range(Index As Object) As ShapeRange.

    Le ReadOnly indique que Range est en lecture seul.
    Tu ne peux pas lui affecter une valeur.

    Manipuler des tableaux est une opération basique de niveau débutant.
    Tous les tutoriels destinés aux débutant abordent très vite le sujet.
    Je te suggère de regarder celui-ci : https://tahe.developpez.com/dotnet/csharp/ où c'est abordé dès la 4ème ou 5ème page .

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    Bonjour,
    merci pour ces conseils, je vais essayer de m'en sortir avec la doc C#... je n'ai pas l'impression d'avoir une syntaxe très efficace!
    Au départ, je voulais faire une simple sélection des formes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     wsExcel.Shapes.SelectAll()
     ColShape = Excel.ShapeRange.Group()
    pour récupérer une forme ColShape qui regroupe les deux formes.

    Mais sur cette instruction Group, il me remonte l'erreur suivante:
    Une référence à un membre non partagé requiert une référence d'objet.
    Je n'ai pas trouvé dans la doc comment récupérer la sélection issue de SelectAll
    (c'est si facile en VBA avec Selection...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveSheet.Shapes.SelectAll                                 
         Selection.ShapeRange.Group.Select                          
         Selection.Name = NameEtiquette
    )

    C'est ainsi que j'ai essayé de contourner le problème en créant le ShapeRange à partir des deux formes de la collection Shapes.

    Je vais continuer à chercher... N'hésitez pas à me donner d'autres conseils à ce sujet
    A bientôt

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 265
    Points : 1 843
    Points
    1 843
    Par défaut
    les exemples de la doc me semble suffisamment explicit sur Shapes.Range
    arameters
    Index
    Object
    Required Object. The individual shapes to be included in the range. Can be an integer that specifies the index number of the shape, a string that specifies the name of the shape, or an array that contains either integers or strings.
    Tu peux lui passer en paramètres un tableau.

    Sinon on peut se tourner vers la doc VBA correspondante qui donne, elle, un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim arShapes() As Variant 
     Dim objRange As Object 
     arShapes = Array("Oval 4", "Rectangle 5") 
     Set objRange = ActiveSheet.Shapes.Range(arShapes)
    De là, pour toi (je n'ai pas testé ceci-dit):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ListNoms(0) = NameEtiquette
    ListNoms(1) = "Barre"
    ShapeRange sr = wsExcel.Shapes.Range(ListNoms)
    sr.Group()
    ' ou directement wsExcel.Shapes.Range(ListNoms).Group()
    'et éventuellement récupérer le retour de group pour avoir l'objet shape correspondant au groupe.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Septembre 2010
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 52
    Points : 31
    Points
    31
    Par défaut
    bonjour,
    merci pour le coup de main, j'ai repris la correction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ListNoms(0) = NameEtiquette
    ListNoms(1) = Ligne.name
    ReShape = wsExcel.Shapes.Range(ListNoms).Group()
    ReShape.Name = NameEtiquette
    et le groupement s'est fait.
    Merci encore, à bientôt

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

Discussions similaires

  1. [XL-2010] Passage de formule d'un tableau vers un Range
    Par dan34 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 11/07/2016, 00h00
  2. [XL-2007] Manipulation de Groupe TextBox - Shape Range
    Par linodev dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2013, 17h11
  3. Pb selection - shapes - range
    Par abennis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/07/2007, 19h05
  4. Réponses: 13
    Dernier message: 21/02/2005, 14h41

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