BUG: Manipuler des SHAPES

Bonjour,

Dans la Feuil3 (codename = base) j'ai un range fusionné dans lequel je dessine des shapes (formes).

En cliquant sur le bouton, j'aimerai copier ces shapes au MEME ENDROIT dans les Feuil5(dest) et Feuil6(dest1).

J'ai déjà fait la macro, mais j'ai 2 problèmes:

-Ma fonction delete_shape bug et je n'arrive donc pas à effacer les shapes présentes des Feuil5(dest) et Feuil6(dest1);

-Quand la macro copie les shapes sur les Feuil5(dest) et Feuil6(dest1), elle ne le fait pas exactement au même endroit dans le range, et là je ne comprend pas pourquoi!

Merci par avance pour votre aide

31position-forme.zip (13.95 Ko)

Bonjour,

avec ça, ça marche de mon côté

Sub selectshape()

'on efface des shape présentes
delete_shape dest.Name
delete_shape dest1.Name

'on copie les nouvelles shape de feuil3(base) sur feuil5(dest) et Feuil6(dest1)
For Each S In ActiveSheet.Shapes
    If S.Name Like "Rectangle*" Then
        S.Select
         base.Shapes(S.Name).Copy
         dest.Select
         dest.Paste dest.Range("$B$5:$F$20")
    End If
Next S
End Sub
Sub delete_shape(Arg1 As String)

For Each S In ThisWorkbook.Sheets(Arg1).Shapes
    If Not Intersect(S.TopLeftCell, Range("$B$5:$F$20")) Is Nothing Then
    S.Select False
    Selection.Delete
    End If
Next S

End Sub

A te relire

merci, j'ai testé le code.

Deux points:

  • il bug quand il y a une shape sur la 2ème feuille.
  • quand il copie la shape sur la 2ème feuille, il ne la copie pas au même endroit que sur la 1ère feuille.

Bonjour thomas67,

Je viens de restester le code que je t'ai fourni hier, et je n'ai ni bug, ni soucis de copie.

Pour la suppression du shapes dont tu me parles à tu bien changé le paramètre de la sub ?

Arg1 As String

Je veux bien que tu mettre en lien ton fichier pour voir les modif apportées s'il te plait

bonjour,

voici le fichier, il bug juste quand j’exécute la macro, et qu'il y a des shape dans les autres feuilles.

Je n'arrive toujours pas à les copier au même endroit!

merci par avance!

18position-forme.zip (16.32 Ko)

J'ai une interrogation.

Pourquoi faire un intersect sur des cellules fusionnées?

du coup j'ai modifié cela

    Sub selectshape()

    'on efface des shape présentes
    delete_shape dest.Name
    delete_shape dest1.Name

    'on copie les nouvelles shape de feuil3(base) sur feuil5(dest) et Feuil6(dest1)
    base.Activate
    For Each S In ActiveSheet.Shapes
        If S.Name Like "Rectangle*" Then
            S.Select
             base.Shapes(S.Name).Copy
             'dest.Select
             dest.Paste dest.Range("$B$5:$F$20")
             dest1.Paste dest1.Range("$B$5:$F$20")
        End If
    Next S
    End Sub

    Sub delete_shape(Arg1 As String)
    ThisWorkbook.Sheets(Arg1).Activate
    For Each S In ThisWorkbook.Sheets(Arg1).Shapes
    'BUG ICI

        S.Select False
        Selection.Delete
    Next S

    End Sub

bon ça marche chez moi mais....

Hello,

À tester, mais pour la position... Comme le dit SylChat mieux vaut ne pas utiliser des cellules fusionnées.

Sub selectshape()

    'Déclare les variables
    Dim ws As Worksheet
    Dim s As Shape

    On Error Resume Next

    'Boucle sur toutes les feuilles
    For Each ws In Worksheets
        'Boucle sur tous les shapes de toutes les feuilles
        For Each s In ws.Shapes
            'Si la feuille se nomme autrement que "Feuil3" alors
            If ws.Name <> "Feuil3" Then
                'Efface le shapes
                s.Delete
            'Fin de la condition
            End If
            If Not Intersect(s.TopLeftCell, Range("$B$5:$F$20")) Is Nothing Then
                s.Select
            End If
        Next s
        Selection.Copy
        'Si la feuille ne se nomme pas "Feuil3" alors copie
        '//si pas cette condition, il copie aussi le shapes dans la Feuil3\\
        If ws.Name <> "Feuil3" Then
            base.Paste ws.Range("$B$5:$F$20")
        End If
    Next ws

End Sub

bOnjour,

merci pour vos réponses, je vais tester cela!

Par contre je ne veux pas faire une boucle sur toutes les feuilles, car plus tard je ne voudrai pas copier les images sur certaines

merci beaucoup

Tu pourras stocker les nom des feuilles que tu veux traiter dans un array et boucler sur cet array

Re,

Voici le code modifié avec la même position des formes que la forme copiée.

Il y a toujours des boucles (2) qui bouclent sur toutes les feuilles, mais pas pour la copie, ça tu choisis toi qu'elle(s) feuille(s) copier.

J'ai pas essayé avec un Array sur les feuilles comme le suggère SylChat, mais c'est une bonne solution ou un tableau.

Sub selectshape()

    Dim ws As Worksheet
    Dim s As Shape

    For Each ws In Worksheets
        For Each s In ws.Shapes
            If ws.Name <> "Feuil3" Then
                s.Delete
            End If
        Next s
    Next ws

    For Each s In ActiveSheet.Shapes
        If Not Intersect(s.TopLeftCell, Range("$B$5:$F$20")) Is Nothing Then
            s.Select
        End If
    Next s

    Selection.Copy

    'Ici tu colles dans les feuilles que tu veux
    base.Paste dest.Range("$B$5:$F$20")
    base.Paste dest1.Range("$B$5:$F$20")

    For Each ws In Worksheets
        For Each s In ws.Shapes
            If ws.Name <> "Feuil3" Then
                'La forme de Feuill3 se nomme "Rectangle 13" attention à ça si tu lui donnes un autre nom
                s.Top = ActiveSheet.Shapes("Rectangle 13").Top
                s.Left = ActiveSheet.Shapes("Rectangle 13").Left
            End If
        Next s
    Next ws

End Sub

Bonsoir,

merci à vous tous pour votre aide et vos codes.

Hulk, j'ai testé ton code, il est super, j'ai l'ai changé pour travailler avec les codename des feuille et non leur non, ça marche.

Par contre j'ai une dernière question:

Dans le Range B5:F:20, je vais devoir mettre d'autres chapes et des zones de textes. J'ai donc le problèmes du nom de la forme qui se pose!

Comment faire pour copier toutes les shapes (quelque soit leurs formes) et les placer au même endroit sur d'autres feuilles?

J'ai commencé à faire des tests, en me basant sur des sites que j'ai trouvé sur le net, notamment http://www.ozgrid.com/VBA/shapes.htm mais ça ne marche pas, au bout de 3 heures, j'ai décidé de revenir vers vos lumières!

3 fois merci encore!!!

12position-forme.zip (18.54 Ko)

Bonsoir,

merci à tous pour votre aide!

J'ai trouvé une solution en groupant (puis dissociant) les shapes!!!

Le code est dans le fichier

27position-forme.zip (17.00 Ko)
Rechercher des sujets similaires à "bug manipuler shapes"