[VBA] Method Sheet.Copy

Résolu
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   -  
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   -
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


7 réponses

LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   365
 
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
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   365
 
Personne n'a d'idées(s) ? Erf !
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   365
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   365
 
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
LeDénicheur Messages postés 565 Date d'inscription   Statut Membre Dernière intervention   365
 
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