VBA Shapes et Names

Bonjour,

J'ai une macro qui me copy colle un word art d'une page à l'autre et qui fonctionne parfaitement. Le nom du word art originel est Rectangle 1 (par défaut) et le nom de la copie est Rectangle 2 (toujours par défaut). Si je supprime la copie et que je relance ma macro le nom de la nouvelle copie devient Rectangle 3 et ainsi de suite.

J'aimerais que ce word art copié garde toujours le même nom peu importe le nombre de forme ayant été crée auparavant.

J'ai essayer cette méthode :

ActiveSheet.Shapes.Range(Array("Rectangle 1")).Select
Selection.Copy
Range("C14").Select
ActiveSheet.Paste
ActiveWorkbook.Names.Add Name:="fili", RefersToR1C1:=Selection.Name

Malheureusement sans succès, dans le gestionnaire de nom j'ai bien fili qui fait référence à ="Rectangle 2" puis ="Rectangle 3" et ainsi de suite de la même manière que si je l'avais fait manuellement, mais si plus loin dans mon code je fait par exemple :

ActiveSheet.Shapes.Range(Array("fili")).Select

Il ne trouve aucun élément au nom de fili

Il me faudrait donc un moyen de faire référence à cette copie du word art peu import quelle soit la 2eme 3eme ou neme copie du word art original (et il ne peut y avoir qu'une seul copie de l'original à la fois).

En espérant que vous trouviez la solution à mon problème :)

Bonjour Chbouli04,

Un essai :

    Set oShape = oSheet.Shapes("Rectangle 1")
    oShape.Name = "fili"

Je te conseil de regarder ce lien pour t'aider dans la manipulation de formes en VBA :

https://www.excel-pratique.com/fr/telechargements/doc-vba/manipuler-formes-vba-no484

En espérant t'avoir aidé,

Baboutz

PS: En VBA, on évite les .select, ça fait ralentir les macros et on peut s'en passer dans la quasi totalité des cas !

Bonjour Chbouli04,

Un essai :

    Set oShape = oSheet.Shapes("Rectangle 1")
    oShape.Name = "fili"

Je te conseil de regarder ce lien pour t'aider dans la manipulation de formes en VBA :

https://www.excel-pratique.com/fr/telechargements/doc-vba/manipuler-formes-vba-no484

En espérant t'avoir aidé,

Baboutz

PS: En VBA, on évite les .select, ça fait ralentir les macros et on peut s'en passer dans la quasi totalité des cas !

Finalement je me suis simplement contenté de cette ligne juste après le paste de la copie :

Selection.Name = "fili"

et ça fonctionne parfaitement

Et pour les .Select je sais bien mais par exemple ça ne fonctionne pas quand je mets :

ActiveSheet.Shapes.Range(Array("Rectangle 1")).Copy

alors que ça fonctionne parfaitement avec :

 ActiveSheet.Shapes.Range(Array(fili_SR)).Select
 Selection.Copy

Mais si tu as des solutions pour m'aider à enlever ces .Select je suis preneur :/

Parfait si tu as réussi !

Ah c'est probable ! Ça doit être un des rares cas où on doit les utiliser...

EDIT :

En fouillant un peu, j'ai trouvé ce code, mais je ne l'ai pas testé !

Sub test()
CopierShape Sheets(1), Sheets(2), "Rectangle 1"
End Sub
Private Sub CopierShape(ws1 As Worksheet, ws2 As Worksheet, shpNom As String)
Dim shp As Shape
Set shp = ws1.Shapes(shpNom).Duplicate
shp.Cut: ws2.Paste
ws2.Shapes(shpNom).Name = shpNom & "_Copie"
End Sub

Merci beaucoup !!

Ton code fonctionne quasiment parfaitement seul la dernière ligne ne fonctionne pas chez moi car la fonction .Duplicate ne duplique pas avec le même nom sinon il y aurait des conflits donc j'ai utilisé mon Selection.Name = "fili" et ça fonctionne parfaitement.

Une fois adapté à mon cas ça donne ça :

Dim ws1 As Worksheet, ws2 As Worksheet, shp As Shape: Set ws1 = Worksheets("BDD"): Set ws2 = Worksheets("EDT")
Set shp = ws1.Shapes(fili_SR).Duplicate
Range("C14").Select
shp.Cut: ws2.Paste
Selection.Name = "fili"

Le Range("C14").Select est là pour placer correctement la copie sur la page puisque la fonction Paste d'une Shape prend par défaut l'emplacement de la cellule active ^^

D'accord super !

Est-ce que cela marche au lieu d'utiliser le .Select ?

Dim ws1 As Worksheet, ws2 As Worksheet, shp As Shape: Set ws1 = Worksheets("BDD"): Set ws2 = Worksheets("EDT")
Set shp = ws1.Shapes(fili_SR).Duplicate
shp.Cut: ws2.Range("C14").Paste
Selection.Name = "fili"

La nom de la duplication est une incrémentation ?

Car sinon pour le renommage en prenant ce que je t'ai donné au début :

ws2.Shapes(shpNom & "1").Name = "fili"

Non ça ne fonctionne pas, probablement parce qu'on ne peut pas coller une Shape dans une cellule mais seulement dans une Worksheet ;)

Je ne connais pas le fonctionnement pas défaut du .Duplicate mais comme excel met automatique le résultat d'un Paste en sélection le Selection.Name fonctionne très bien^^'

Ah d'accord ! Bon tant mieux si ça marche comme ça !

Bonjour,

Je pinaille sûrement un peu (beaucoup), mais on peu également faire :

    Dim ws1 As Worksheet, ws2 As Worksheet, shp As Shape: Set ws1 = Worksheets("BDD"): Set ws2 = Worksheets("EDT")
    Set shp = ws1.Shapes("Rectangle 1").Duplicate
    shp.Cut: ws2.Paste
    Selection.Name = "fili"
    ws2.Shapes("fili").Left = ws1.Shapes("Rectangle 1").Left
    ws2.Shapes("fili").Top = ws1.Shapes("Rectangle 1").Top

Voilà, bonne soirée,

Baboutz !

Rechercher des sujets similaires à "vba shapes names"