Copie de zones de texte

Bonjour

Je cherche un moyen de pouvoir copier des formes (zones de texte en général ou autre) d'une feuille sur une autre du même classeur en vba

L'ennui c'est que le nombre et le type de ces formes sur la première feuille est variable (il peut même y en avoir aucune)

De plus, il faut qu'elles soient recopiées au même endroit sur la 2ème feuille

Là je sèche complètement et je ne trouve pas d'info, tout ce que j'ai réussi à faire pour le moment, c'est sélectionner les formes :

comme ceci :

Set myDocument = Worksheets(1)

myDocument.Shapes.SelectAll

mais bien sûr si je fais ceci ensuite :

Sheets(2).Select

Selection.Paste

ça ne fonctionne pas !

C'est la première fois que je suis amené à manipuler les formes en vba alors je n'ai aucune idée

Quelqu'un a-t-il une idée ?

D'avance merci

Bonjour,

voici un exemple, sans en savoir plus, c'est une possibilité...

Sub shapes_adresse()
For Each sh In ActiveSheet.Shapes
 adresse = sh.TopLeftCell.Address
 If adresse = "$A$1" Then MsgBox adresse 'or do something else
Next
End Sub

Merci bcp sabV

ça m'a bien aiguillé

voici le code que j'ai tapé du coup :

Sub copieform()

For Each sh In ActiveSheet.Shapes

adresse = sh.TopLeftCell.Address

sh.Select

Selection.Copy

Sheets(2).Select

Sheets(2).Range(adresse).Select

ActiveSheet.Paste

Sheets(1).Select

Next

End Sub

ça fonctionne par contre je ne comprends pas dans ton exemple le "If adresse = "$A$1" Then MsgBox adresse 'or do something else" dans ton exemple

Et puis un dernier détail, ça me copie aussi les boutons déclencheurs de macro, j'aurai aimé que non, c'est pas très grave mais bon si y'a un moyen simple de le faire, je suis preneur

Bonjour,

adresse = sh.TopLeftCell.Address

nous donne l'adresse de la cellule au coin gauche supérieur du shape

avec cette info. et connaissant l'adresse de tes 3 boutons macro tu peut ajouter une condition pour ne pas les copier.

par exemple

adresse = sh.TopLeftCell.Address
Set isect = Application.Intersect(Range(adresse), Union(Range("A1"),Range("A5"),Range("A7")))
If isect Is Nothing Then
    sh.Copy
    '... suite de votre macro
End If

Merci, ça fonctionne !

J'ai eu un dernier souci car ça me prenait l'adresse des cellules avec des commentaires (apparemment, les commentaires sont reconnus comme des shapes) et ça buggait à leur recopie ; de toute façon je ne voulais pas recopier les commentaires sous forme de shape donc j'ai réussi à trouver comment tester le type de shape et éliminer les commentaires grâce à une nouvelle condition :

If Not sh.Type = msoComment Then

et ça fonctionne

Merci encore pour l'aide apportée, je n'avais encore jamais eu l'occasion de manipuler les shapes en vba

Bonjour,

autre possibilité,

mais vu que TextBox fait parti d'une vaste gamme de shape msoAutoShape (Type = 1),

une autre manière de faire est de vérifier le nom du shape,

For Each sh In ActiveSheet.Shapes
  If Left(sh.Name, 7) = "TextBox" Then
      sh.Copy
    '... suite de votre macro
 End if
Next

bonne continuation,

@+

isabelle

Rechercher des sujets similaires à "copie zones texte"