Copier objets d'une feuille vers plusieurs feuilles

Bonjour au forum,

Je bloque sur l'écriture d'un code qui pourrait me permettre de copier TOUT les objets de ma feuille "Janvier" pour les coller AU MÊME ENDROIT dans mes autres feuilles du classeur.

J'ai essayé x versions de codes, dont un ci-dessous qui me donne une erreur "La méthode "Paste" a échouée..." :

Sub Tests()

Dim Ws As Worksheet

Application.ScreenUpdating = False

Sheets("Janvier").Shapes.SelectAll
Selection.Copy

    For Each Ws In Worksheets
        If Ws.Name <> "Statistiques" And Ws.Name <> "BD" And Ws.Name <> "Janvier" And Ws.Name <> "Gestion" And Ws.Name <> "Accueil" Then
            Ws.Unprotect Password:="mdp"
            Ws.Paste
            Ws.Protect "mdp"
        End If
    Next Ws

Application.ScreenUpdating = True

End Sub

Auriez-vous une idée ?

Bonjour,

Simplement en voyant ton code ... je te suggère de tout mettre dans la boucle ...

A priori ... cela devrait fonctionner ...

Bonjour (..)

Sub Solution()
Dim Ws As Worksheet

Dim tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1 To 12, 1 To 10)
Dim anneeDeDepart
Dim nombreDeAnneesConservees

Dim nombreOngletsDansMonClasseurUnPeuVolumineux

    anneeDeDepart = Year(Date)
    For nombreDeAnneesConservees = 1 To 10
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Janvier " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Février " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Mars " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Avril " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Mai " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Juin " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Juillet " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Août " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Septembre " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Octobre " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Novemebre " & anneeDeDepart + (nombreDeAnneesConservees - 1)
        tabloDesOngletsContenantTousLesMoisDunAnneePendant10Ans(1, nombreDeAnneesConservees) = "Décembre " & anneeDeDepart + (nombreDeAnneesConservees - 1)
    Next

    MsgBox "Attention cette opération pourrait prendre un certain temps"

    Application.ScreenUpdating = False

    Sheets("Janvier " & anneeDeDepart).Shapes.SelectAll
    For nombreOngletsDansMonClasseurUnPeuVolumineux = 1 To Sheets.Count but(not("Stats","Janvier " & anneeDeDepart,"Gestion","Accueil")
        Worksheets(nombreOngletsDansMonClasseurUnPeuVolumineux).Paste
    Next

    Application.ScreenUpdating = True

End Sub

@James007

Bonjour James007 et NCC1701,

Merci pour vos réponses.

@James007 : J'avais également testé en incorporant tout dans la boucle, et le message d'erreur était tout de même présent.

J'ai résolu ce problème car j'avais un bouton de commande (contrôle activeX) que j'avais oublié de supprimer, et depuis plus de message d'erreur...

La copie se fait donc sans encombre, mais l'emplacement est légèrement décalé (même en sélectionnant une cellule de destination pour le collage), et c'est là mon problème essentiel.

@NCC1701 : merci pour cette proposition qui semble intéressante, mais n'y a t-il pas une erreur de syntaxe ici (avec le "but") ? :

For nombreOngletsDansMonClasseurUnPeuVolumineux = 1 To Sheets.Count but(not("Stats","Janvier " & anneeDeDepart,"Gestion","Accueil")

Mon fichier ne concerne qu'une année, donc les 12 mois de l'année en cours + quelques autres feuilles de gestion/stats etc...

Pourquoi sur 10 ans ?

(re)

Nrev74 a écrit :

@NCC1701 : merci pour cette proposition qui semble intéressante,

Merci
Nrev74 a écrit :

Mon fichier ne concerne qu'une année, donc les 12 mois de l'année en cours + quelques autres feuilles de gestion/stats etc...Pourquoi sur 10 ans ?

Parce qu'il est toujours pratique de pouvoir consulter les archives et que le plus souvent les demandes sont sur 10 ans
Nrev74 a écrit :

mais n'y a t-il pas une erreur de syntaxe ici (avec le "but") ? :

Oui tu as raison ! C'est une fonction que j'ai créé il y a quelques temps, je l'avais proposé à Bill mais il n'a pas voulu l'intégrer dans la nouvelle version d'Excel, je peux t'en envoyer une copie en MP si tu souhaites, sinon James007 doit en avoir une copie aussi (si je ne me trompe il doit s'agir d'une ancienne Version que j'avais nommée à l'époque HumOrIstique clin d'œil évidemment à l'heuristique d'un programme bien réalisé) En fait elle permet de traiter les cas où il faut répéter plusieurs fois la même opération sans avoir besoin de se demander si cela sert à quelque chose. Elle est un peu longue à détailler comme ça, c'est la raison pour laquelle je ne la diffuse qu'en MP parce que la taille de la fonction (plusieurs Giga actuellement) fait que le fichier est trop important pour être téléchargé sur le forum. Je suis en train de travailler en ce moment sur une version qui devrait permettre de prendre en compte également les aléas climatiques et naturels, elle permettra de calculer (entre autres choses) quel est le risque à utiliser un papier et un crayon au lieu de penser Excel, et de faire confiance à une ribambelle de formules toutes simples pour concevoir des applications qui fonctionnent longtemps sans construire une usine à gaz qui tousse à la moindre once de vent. Elle donnera plusieurs résultats selon les paramètres utilisés au départ. En quelque sorte je souhaite en faire une fonction auto-adaptive, qui tente de comprendre comment il est possible de ne pas se compliquer la tâche lorsque l'on doit créer une application. Il faut préciser que le code n'est pas encore tout à fait optimisé, j'espère avoir un peu de temps pour tenter de passer de Giga à Méga et je pourrais alors la diffuser plus facilement

NCC1701 a écrit :

En fait elle permet de traiter les cas où il faut répéter plusieurs fois la même opération sans avoir besoin de se demander si cela sert à quelque chose. Elle est un peu longue à détailler comme ça, c'est la raison pour laquelle je ne la diffuse qu'en MP parce que la taille de la fonction (plusieurs Giga actuellement) fait que le fichier est trop important pour être téléchargé sur le forum. Je suis en train de travailler en ce moment sur une version qui devrait permettre de prendre en compte également les aléas climatiques et naturels, elle permettra de calculer (entre autres choses) quel est le risque à utiliser un papier et un crayon au lieu de penser Excel, et de faire confiance à une ribambelle de formules toutes simples pour concevoir des applications qui fonctionnent longtemps sans construire une usine à gaz qui tousse à la moindre once de vent. Elle donnera plusieurs résultats selon les paramètres utilisés au départ. En quelque sorte je souhaite en faire une fonction auto-adaptive, qui tente de comprendre comment il est possible de ne pas se compliquer la tâche lorsque l'on doit créer une application.

Merci pour ta contribution !

---> NCC1701 Président !

Pour en revenir à mon problème, quelqu'un aurait-il une proposition pour avoir un collage de ces objets exactement au même endroit que la feuille de départ ?

Re,

Pour que la copie de ta Shape se trouve au même endroit dans la seconde feuille, tu as besoin d'utiliser

les propriétés .Top et .Left

Si cela peut t'aider ... tu peux joindre un petit fichier test illsutratif ...

(..)

Merci pour ta compréhension de mon Humour parfois une peu grinçant, moqueur

Trèves de plaisanteries, la vraie question est pourquoi veux-tu copier tout ça ? n'est-il pas possible de copier l'onglet lui-même ?

@James : excellente idée, je vais tester ça !

Je reviens avec un fichier si je galère trop mais je vais tenter le coup

@NCC1701 : j'ai le même, je compatis

Copier les onglets est une solution que j'ai testé, qui nécessite que je fasse quelques modifications sur chaque feuilles mais rien de bien pénible...

La raison est plutôt que j'ai envie d'apprendre à bricoler avec VBA, même pour des trucs "inutiles".

Ça me permet d'avancer en douceur

Rechercher des sujets similaires à "copier objets feuille feuilles"