[VBA] Method Sheet.Copy

Résolu
LeDénicheur Messages postés 624 Statut Membre -  
LeDénicheur Messages postés 624 Statut Membre -
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. LeDénicheur Messages postés 624 Statut Membre 366
     
    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
  2. LeDénicheur Messages postés 624 Statut Membre 366
     
    Personne n'a d'idées(s) ? Erf !
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    0
  4. LeDénicheur Messages postés 624 Statut Membre 366
     
    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 ?!?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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...
    0
  7. LeDénicheur Messages postés 624 Statut Membre 366
     
    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.
    0
  8. LeDénicheur Messages postés 624 Statut Membre 366
     
    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 ?!?
    0