[VBA] Method Sheet.Copy

Résolu
Bonjour,

J'ai réalisé une fonction permettant de copier des feuilles d'un classeur à un autre. Néanmoins, lorsque je fais fonctionner cette macro, les feuilles, les formules sont bien copiées (sans aucune liaison), mais les images ne le sont pas. A la place des anciennes images, il y a marqué "Impossible d'afficher l'image". Or quand je fais l'opération à la mano, les images sont conservés, alors que le même code VBA est appliqué.

Quelqu'un a-t-il une explication ?

Merci d'avance



--
Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?

7 réponses

  1. Modérateur
    Bonjour,

    Quel code utilises tu?
    Je viens de tester sous mon vieux 2003 et le code suivant fonctionne correctement, même pour des images :
    Sub copier()
    ActiveSheet.Copy Before:=Workbooks("destination.xls").Sheets("Feuil3")
    End Sub
    1. Bonjour,
      VBA sous office 2010 si c'est ça ta question ?
      J'utilise exactement la même commande. C'est incompréhensible.
      Lors que je le fais à la main cela fonctionne.
      Lorsque le lance le code, avec plusieurs feuilles à copier, les images s'éffacent et sont remplacées par un carré blanc avec une croix rouge : "Impossible d'afficher l'image".
      Il me semble que les images sont des objets shapes. Le problème peut venir de la manière dont on été importée les images ?

      Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?
      1. Modérateur
        Ces images sont peut être dans des contrôles Image ou autre... Effectivement cela peux bloquer.
        Comment les intègres tu à ta feuille?
        Sinon je te demandais ton code VBA...
        1. Je les ai intégré une seule fois, via le menu de excel "Insérer image".
          Je te fournis le code ce soir, mais ce n'est qu'une boucle avec une commande de type :
          Workbooks().Sheets().Copy After:=Workbooks().Sheets() à l'intérieur de la boucle...donc bon.
          Je te copie/colle le code aux alentours de 20h.
          1. Voilà mon code :
            Sub workbook_open()
            recent_file = ActiveWorkbook.Name
            Application.DisplayAlerts = False
            Application.ScreenUpdating = False
            On Error GoTo suite
            With Application.FileDialog(msoFileDialogOpen)
            .Title = "Mise à jour obligatoire, Veuillez selectionner votre ancien fichier de bons de commande"
            .InitialFileName = ActiveWorkbook.Path
            .AllowMultiSelect = False
            .Filters.Clear
            .Filters.Add "Excel Files", "*.xlsm"
            .Show
            old_file = .SelectedItems(1)
            End With
            Sheets("MAJ").Delete
            Workbooks(recent_file).Sheets(1).Unprotect
            Workbooks.Open "" & old_file & ""
            old_file = Right(old_file, InStr(StrReverse(old_file), "\") - 1)
            For i = 1 To Workbooks("" & old_file & "").Sheets.Count - 3
            shee = StrReverse("" & Workbooks("" & old_file & "").Sheets(1 + i).Name & "")
            num = StrReverse(Left(shee, InStr(1, shee, " ") - 1))
            nam = StrReverse(Right(shee, Len(shee) - InStr(1, shee, " ")))
            Workbooks(old_file).Sheets(1 + i).Copy Before:=Workbooks(recent_file).Sheets(i + 1)
            Next
            Workbooks(old_file).Close
            Workbooks(recent_file).Sheets(1).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
            Workbooks(recent_file).Sheets(1).Select
            MsgBox "Mise à jour effectuée !", vbInformation
            Application.DisplayAlerts = True
            Application.ScreenUpdating = True
            Exit Sub
            suite:
            MsgBox "Mise à jour annulée, veuillez contacter le support.", vbCritical
            ActiveWorkbook.Close
            End Sub

            Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?
            1. Bonsoir,
              Avec quelques recherches j'ai finalement réussi par trouver d'où venait le problème. Tout est relativement bien expliqué derrière ce lien :

              https://www.developpez.net/forums/d1003446/logiciels/microsoft-office/excel/macros-vba-excel/pb-affichage-image-feuille-importe-relation-rid1/

              En résumer, c'est un soucis de xml, il faut sauver le fichier modifié avant de fermer le fichier "source" d'ou viennent les feuilles copiées.

              Néanmoins, j'ai désormais un autre soucis. Je vais créer un autre post.
              Voici le lien de ma nouvelle question :
              https://forums.commentcamarche.net/forum/affich-25431796-excel-vba-fermeture-classeur
              Prenez le temps de bien rédiger vos questions, et nous prendrons le temps d'y répondre......Timmy ?!?