Dessiner un shape sur autre feuille sans l'ouvrir

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
r
racouet56
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 21 mai 2016
Version d'Excel : 2010

Message par racouet56 » 1 avril 2020, 09:24

Bonjour à tous,

je coince sur une macro. Je dois à partir d'un tableau dessiner une cartographie. Le tableau possède 10 colonnes et peut aller jusqu'à plus de 200 lignes.

J'avance sur ce projet grâce au forum.

Mon nouveau souci consiste à dessiner des objets dans la feuille 1 en utilisant les valeurs du tableau placé en feuille 2 .
En effet, je dois systématiquement sélectionner la feuille 1 pour dessiner et remplir la forme. Si j'ai 3 formes à dessiner, le temps d'exécution de la macro n'est pas un problème, mais avec 200 formes à dessiner, cela prend du temps d'autant que je dois ajouter à chaque forme un texte dans une forme ovale avec un connecteur entre les deux formes.

Normalement, une shape rectangle se dessine comme suit:
ActiveSheet.Shapes.AddShape(msoShapeRectangle, X, Y, Lg, Lr).Select.
avec X ey Y les coordonnées en point à partir des bords de page et Lg et Lr les longueurs et hauteur de la forme en Point.
mon idée a été de rempslace la activesheet par le nom de la page et cela fonctionne. par-contre, je ne peux faire la même chose pour colorer et remplir la forme.
Usuellement une fois sur la page, j'écris
With Selection.ShapeRange.Fill
                      .ForeColor.RGB = RGB(255, 0, 0)
                     ' .BackColor.RGB = couleur2   (Couleur2 défini plus haut dans la macro)
                      .Patterned motif                   (motif défini plus haut dans la macro)
End With
L'un d'entre-vous saurait-il m'aider afin de dessiner et de remplir la forme sans ouvrir la page 1 ?

Merci.

PS, je place mon début de fichier en PJ.
Essai import.xlsm
(101.34 Kio) Téléchargé 1 fois
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'200
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 1 avril 2020, 11:07

Bonjour,

La "bonne pratique" c'est plutôt du genre :
    With Sheets("Feuil1").Shapes.AddShape(msoShapeRectangle, x, Y, lg, Lr)
        With .ShapeRange.Fill
            .ForeColor.RGB = RGB(255, 0, 0)
            ' .BackColor.RGB = couleur2  
            ' .Patterned motif  
            ' etc ...
        End With
    End With
Pierre
r
racouet56
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 21 mai 2016
Version d'Excel : 2010

Message par racouet56 » 1 avril 2020, 11:25

merci pierrep56 , je teste immédiatement.
r
racouet56
Jeune membre
Jeune membre
Messages : 11
Inscrit le : 21 mai 2016
Version d'Excel : 2010

Message par racouet56 » 1 avril 2020, 11:51

Malheureusement, le with shaperange.fill ne fonctionne pas. J'ai aussi essayé en supprimant le with et en le remplaçant par le nom de la feuille et en donnant un nom à la forme, mais sans succès. Il semble que dans ce cas, le "with" ne fonctionne pas avec les shape dans une seconde feuille et qu'il me faille ouvrir la feuille pour pouvoir y travailler Je pourrai peut-être gagner des secondes avec Application.ScreenUpdating = False.

Merci pour ton aide
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'200
Appréciations reçues : 197
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 1 avril 2020, 15:46

c'est tout simplement :
    With Sheets("Feuil1").Shapes.AddShape(msoShapeRectangle, x, Y, lg, Lr)
        .Fill.ForeColor.RGB = RGB(255, 0, 0)
        ' etc ...
    End With
j'avais bêtement recopié du mauvais code ...
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message