Dessiner un shape sur autre feuille sans l'ouvrir

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.

4essai-import.xlsm (101.34 Ko)

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

merci pierrep56 , je teste immédiatement.

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

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 ...

Rechercher des sujets similaires à "dessiner shape feuille ouvrir"