Copie feuille dans un autre classeur

Résolu
Bonjour,

Je sollicite votre aide sur une macro que j'ai composé...
Elle permet de choisir un classeur ("MenuNormalPrintemps")et de choisir aussi une feuille("feuil1"). Elle copie la feuille sélectionner et la colle dans mon dossier de destination ("Menu")sur la feuille ("Menu Normal").
ps :J'utilise cette méthode car le classeur et les feuilles changent souvent de nom.
La macro s'exécute bien mais ne colle pas le texte sur la feuille("Menu Normal")
Il y a t'il une solution pour corriger le probleme?

Merci de votre aide
Je poste mes deux fichiers :https://www.cjoint.com/?BCfqfM2oiQt

25 réponses

Résumé de la discussion

Problème rencontré avec une macro Excel qui ouvre un classeur choisi et copie une feuille vers Menu, sur la feuille Menu Normal, mais le collage échoue. Plusieurs réponses suggèrent d'améliorer la gestion d'annulation si la feuille n'est pas choisie, d'utiliser On Error, et d'exécuter Activer/Coller puis enregistrer et fermer le classeur. Par ailleurs, l'utilisateur rapporte que le collage se fait sous forme d'image et que CutCopyMode semble mal interprété; des retours évoquent des divergences entre Office 2003 et 2007/2010. D'autres échanges soulignent qu'aucun consensus clair n'émerge sur la cause, avec des hypothèses couvrant l'ordre des commandes, l'état du presse-papier et le comportement d'Office selon la version.

Bobot (l’IA à votre service)
  1. Bonjour,
    Vous ouvrez quel classeur en premier???
    0
    1. le classeur "Menu" puis la commande du bouton "copie"(pour la macro...
      0
      1. Re,
        merci
        0
    2. Euhhh c'est pas le bouton "copie" mais plutot le bouton "Nouveau menu" dsl
      0
      1. je m'aperçois que ma macro ne copie pas les liaisons....

        peut etre 2 possibilités :

        - comment utiliser la fonction "ActiveCell.FormulaR1C1 " mais je ne sais pas la mettre en place et de plus il me demande le chemin d'acces alors que mon classeur et la feuille peuvent changer de nom
        ou
        -transformer la liaison en texte....avec l'enregistreur de macro ca ne fonctionne pas
        ou
        0
        1. Bonjour,

          Pour ne pas tout refaire votre code, je vous propose de passer par le presse-papier pour faire vos copier/coller.

          Code pour Menu.xls bouton "Nouveau menu"

          Private Sub CommandButton3_Click()
          Dim Classeur
          Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
          If Classeur = False Then Exit Sub
          Workbooks.Open Filename:=Classeur
          On Error Resume Next
          'Passe par le presse-papier pour restituer
          Windows("Menu.xls").Activate
          Sheets("Menu Normal").Select
          Range("B1").Select
          ActiveSheet.Paste

          'mise en forme largeur colonne
          Cells.Select
          Cells.EntireColumn.AutoFit
          'vider presse-papier
          Application.CutCopyMode = False
          Application.DisplayAlerts = False
          End Sub

          Code pour Menu Normal Printemps.xls Bouton UserForm "Valider"

          Private Sub CommandButton1_Click()
          Sheets(ComboBox1.Value).Select
          Sheets(ComboBox1.Value).Range("A1:C100").Select
          'copy selection dans presse-papier
          Selection.Copy
          Unload Me
          End Sub

          Bonne suite
          0
          1. ok merci la macro s'execute et met une valeur text mais le soucis est que ca me decale tout d'une colonne (c et d) au lieu de (b et c).
            voici le résultat :https://www.cjoint.com/?3Cfvc5QXxKV

            J'ai aussi l'impression que qq chose tourne en boucle et ma feuille "Menu Normal printemps est figé???? tant que je ne ferme pas le 1er doc et second reste bloqué
            Peut etre mieux vaut refaire tout le code?
            0
            1. Bonjour,
              Le decalage, c'est pour moi: B1 au lieu de A1

              Private Sub CommandButton3_Click()
              Dim Classeur
              Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
              If Classeur = False Then Exit Sub
              Workbooks.Open Filename:=Classeur
              On Error Resume Next
              'Passe par le presse-papier pour restituer
              Windows("Menu.xls").Activate
              Sheets("Menu Normal").Select
              Range("A1").Select
              ActiveSheet.Paste

              'mise en forme largeur colonne
              Cells.Select
              Cells.EntireColumn.AutoFit
              'vider presse-papier
              Application.CutCopyMode = False
              Application.DisplayAlerts = False
              End Sub

              Pour le reste, je regarde.

              A plus
              0
              1. Bonjour,

                merci pour le coup de pouce....

                En fait c'est le classeur "MenuNormalPrintemps"qui plante tout à la fermeture.
                D'ailleurs si j'ajoute la fonction "ActiveWindow.Close" la macro ne s'execute pas
                0
                1. Re,

                  Private Sub CommandButton3_Click()
                  Dim Classeur
                  Dim Wb As Workbook

                  Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
                  If Classeur = False Then Exit Sub
                  'arret raffraichisement ecran
                  Application.ScreenUpdating = False
                  'arret alertes excel
                  Application.DisplayAlerts = False

                  Set Wb = Workbooks.Open(Filename:=Classeur)
                  On Error Resume Next
                  'Passe par le presse-papier pour restituer
                  Windows("Menu.xls").Activate
                  Sheets("Menu Normal").Select
                  Range("A1").Select
                  ActiveSheet.Paste

                  'fermeture Classeur
                  Wb.Close

                  'mise en forme largeur colonne
                  Cells.Select
                  Cells.EntireColumn.AutoFit

                  'vider presse-papier
                  Application.CutCopyMode = False
                  'activation alertes EXCEL et raffraichissement
                  Application.DisplayAlerts = True
                  Application.ScreenUpdating = True
                  End Sub

                  Cela devrait le faire

                  A bientot
                  0
                  1. Encore mille fois merci pour ton aide...c'est bien plus pratique avec ta macro...
                    j'ai du insérer la macro sur une nouvelle feuille et pour le moment ca l'air de fonctionner... En revanche j'ai toujours le message "image trop grande, la feuille va etre tronquée" sur le classeur "Menu Normal printemps" puis apres tout excel se ferme.

                    Sans vouloir abuser de ton aide j'aurais une dernière petite question...

                    Est il possible de copier ce userform avec son module qui se trouve dans "Menu Normal printemps" vers le dossier "Menu Normal" mais sachant que les autres userform je n'en veux pas?

                    Private Sub CommandButton1_Click()
                    'Sheets(ComboBox1.Value).Activate
                    'Unload Me

                    Sheets(ComboBox1.Value).Select
                    Sheets(ComboBox1.Value).Range("B1:C65").Select
                    'copy selection dans presse-papier
                    Selection.Copy
                    Unload Me
                    'ActiveWindow.Close
                    End Sub

                    Private Sub CommandButton2_Click()
                    Unload Me
                    End Sub

                    Private Sub UserForm_Initialize()
                    Dim WK As Worksheet
                    For Each WK In ThisWorkbook.Worksheets
                    ComboBox1.AddItem WK.Name
                    Next

                    End Sub

                    Sub go()
                    UserForm1.Show
                    End Sub
                    0
                    1. Re,

                      Passez moi le fichier.
                      0
                  2. Re,
                    J'ai perdu le fil de notre affaire, rappellez moi ce que vous voulez
                    0
                    1. 1/Le fichier "Menu Normal printemps" plante à la fermeture après l'utilisation de la macro

                      2/dans le fichier "Menu Normal Printemps" je souhaiterais que Userform1 se copie dans le fichier "Menu Normal" avec son exécutable dans Thisworkbook. est ce réalisable?

                      fichiers ci joint :
                      https://www.cjoint.com/?3CgqofEBgcc
                      0
                      1. Re,

                        1/
                        'ce que vous avez ajoute, qui ne peut pas marcher
                        Windows("Menu Normal Printemps.xls").Activate
                        ActiveWindow.Save
                        ActiveWindow.Close

                        'fermeture Classeur
                        'ce que vous avez enlevez
                        'Wb.Close

                        pourquoi avez vous fait cette modif.

                        2/ Un UserForm ne peut pas etre mis dans ThisWorkbook

                        A+
                        0
                        1. Wb.Save et Wb.Close ne fonctionne pas.
                          Mon fichier "Menu Normal Printemps" ne se ferme pas et je reste bloqué sur ce fichier et me plante excel.
                          0
                        2. je voudrai copier le userform qui s'execute à l'ouverture du fichier....voila ce que je voulais dire désolé.
                          0
                      2. Re,

                        Sub Copie4()
                        Dim Classeur
                        Dim Wb As Workbook

                        Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
                        If Classeur = False Then Exit Sub
                        'arret raffraichisement ecran
                        Application.ScreenUpdating = False
                        'arret alertes excel
                        Application.DisplayAlerts = False

                        Set Wb = Workbooks.Open(Filename:=Classeur)

                        On Error Resume Next
                        'Passe par le presse-papier pour restituer
                        Windows("Menu.xls").Activate
                        Sheets("Menu Normal").Select
                        Range("B1").Select
                        ActiveSheet.Paste

                        'Sauvegarde et fermeture Classeur
                        Wb.Save
                        Wb.Close

                        'mise en forme largeur colonne
                        Cells.Select
                        Cells.EntireColumn.AutoFit

                        'vider presse-papier
                        Application.CutCopyMode = False
                        'activation alertes EXCEL et raffraichissement
                        Application.DisplayAlerts = True
                        Application.ScreenUpdating = True
                        End Sub

                        Ajoute sauvegarde Menu Normal Printemps.xls

                        A+
                        0
                        1. merci pour ta solution mais comme ci dessus la fonction "Wb.Save et
                          Wb.Close" ne fonctionne pas.
                          si j'ai bien compris ta macron, le fichier "Menu Normal Printemps devrait s'éxécuter en arriere plan...mais en réalité après l'execution de la macro elle s'affiche est me bloque tout
                          0
                      3. Re,

                        Chez moi, pas de probleme pour fermer le fichier.

                        Essayez ca

                        Sub Copie4()
                        Dim Classeur, Nom_Fichier
                        Dim Wb As Workbook

                        Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
                        If Classeur = False Then Exit Sub
                        'arret raffraichisement ecran
                        Application.ScreenUpdating = False
                        'arret alertes excel
                        Application.DisplayAlerts = False

                        Set Wb = Workbooks.Open(Filename:=Classeur)
                        Nom_Fichier = Wb.Name
                        On Error Resume Next
                        'Passe par le presse-papier pour restituer
                        Windows("Menu.xls").Activate
                        Sheets("Menu Normal").Select
                        Range("B1").Select
                        ActiveSheet.Paste

                        'Save et fermeture Classeur
                        Workbooks(Nom_Fichier).Activate
                        Workbooks(Nom_Fichier).Save
                        Workbooks(Nom_Fichier).Close

                        'mise en forme largeur colonne
                        Cells.Select
                        Cells.EntireColumn.AutoFit

                        'vider presse-papier
                        Application.CutCopyMode = False
                        'activation alertes EXCEL et raffraichissement
                        Application.DisplayAlerts = True
                        Application.ScreenUpdating = True
                        End Sub

                        A+
                        0
                        1. Désolé de revenir à la charge mais ca fonctionne pas non plus.....
                          J'ai bien l'impression qu'il ne se passe plus rien après "ActiveSheet.Paste" et mon second fichier plante toujours avec le message "cette image est trop grande et elle va etre tronquée"
                          0
                          1. Re,
                            Mettez les lignes:
                            Application.ScreenUpdating = False
                            Application.DisplayAlerts = False
                            et
                            On Error Resume Next
                            en commentaire

                            mettez un point d'arret a la ligne
                            Windows("Menu.xls").Activate

                            lancez et a suivre
                            0
                          2. Ok il me selectionne les colonnes B1 àC65......dans le fichier "Menu Normal Printemps" et il reste ouvert sur ce fichier
                            0
                          3. Re,
                            Est ce que le programme de Menu.xls s'arrete au point d'arret. Si oui, appuyez sur F8 (impultion) pour faire deroulez le programme en pas a pas.
                            0
                          4. oui le programme s'arrete sur le point d'arret...ensuite j'arrive jusqu'a "ActiveSheet.Paste" puis c'est le bug!
                            -"erreur d'execution'-2147417848...la méthode 'Paste de l'objet'_Worksheet à échoué

                            Quelque chose de Bizarre, entre "Range("B1").Select" et "ActiveSheet.Paste" la fonction F8 passe par une autre macro qui se situe sur la Feuil 3
                            Je la place ci dessous :
                            Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                            If Not Intersect(Range("B9:C13,B17:C21,B25:C29,B33:C37,B41:C45,B49:C53,B57:C61"), Target) Is Nothing And Target.Count = 1 Then
                            adrcelmemu = Target.Address
                            colcelmenu = Target.Column
                            UFplat_menu.Show
                            End If
                            End Sub

                            j'ai essayé en enlevant la macro ci dessus mais c toujours pareil.
                            0
                          5. Re,

                            Si vous annuler lors du choix de la feuille dans Menu Normal Printemps.xls alors oui il y a :
                            -"erreur d'execution'-2147417848...la méthode 'Paste de l'objet'_Worksheet à échoué .
                            Je regarde cde que je peux faire

                            Pour la macro feuil3
                            C'est normal, puisque l'objet de cette macro est d'intercepter les changements de selection cellule sur cette feuille.
                            Qui a ecrit tout ca? Il faudrait faire un peu de menage.

                            A+
                            0
                        2. Re,

                          Je n'avais pas traite l'annulation et fermeture sans choix feuille (fais plusieurs chose a la fois donc...)

                          Sub Copie4()
                          Dim Classeur, Nom_Fichier
                          Dim Wb As Workbook

                          Classeur = Application.GetOpenFilename("Classeurs Excel , *.xls")
                          If Classeur = False Then Exit Sub
                          'arret raffraichisement ecran
                          Application.ScreenUpdating = False
                          'arret alertes excel
                          Application.DisplayAlerts = False

                          Set Wb = Workbooks.Open(Filename:=Classeur)
                          Nom_Fichier = Wb.Name
                          'pour annuler ou fermeture sans choix feuille
                          On Error GoTo suite
                          'Passe par le presse-papier pour restituer
                          Windows("Menu.xls").Activate
                          Sheets("Menu Normal").Select
                          Range("B1").Select
                          ActiveSheet.Paste

                          suite:
                          'Save et fermeture Classeur
                          Workbooks(Nom_Fichier).Activate
                          Workbooks(Nom_Fichier).Save
                          Workbooks(Nom_Fichier).Close

                          'mise en forme largeur colonne
                          Cells.Select
                          Cells.EntireColumn.AutoFit

                          'vider presse-papier
                          Application.CutCopyMode = False
                          'activation alertes EXCEL et raffraichissement
                          Application.DisplayAlerts = True
                          Application.ScreenUpdating = True
                          End Sub

                          Nous devrions y arriver

                          A+
                          0
                          1. Le fichier "Menu Normal Printemps" plante toujours avec le message "cette image est trop grande et elle va etre tronquée" puis fermeture de toute application excel.
                            Sur le fichier ca tourne en boucle et c'est impossible de le fermer...
                            Je te fais confiance pour y arriver!!!
                            0
                            1. Bonjour,
                              Merci de votre confiance, mais je ne vois pas ce qui ne va pas. Mon PC est en XP, vos fichiers tournent sans probleme. J'ai fait des essais sur un autre PC en W7, sans probleme. La seule difference avec vous, c'est que je ne peux pas faire les mises a jour de liaisons classeurs a cause des repertoires qui n'existe pas sur mon PC. En principe, cela ne devrait pas etre la cause de nos soucis.
                              A defaut de trouver le pourquoi du comment (je seche pour l'instant), dites moi s'il ne serait pas possible batir votre application differemment. Est-ce-que tout le code du fichier "Menu Normal Printemps" est utile, ainsi que tous les liens de classeurs??

                              A+
                              0
                            2. non les liens ne sont pas du tout utile...le texte suffirait amplement .

                              C'est une macro qui me génère automatiquement le classeur "Menu Normal printemps". Je ne sais pas comment on fait pour modifier format "liens" par un format "texte" par macro
                              0
                          • 1
                          • 2