[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. 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 ?!?
    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. 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. 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. 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
              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