[VBA] Method Sheet.Copy

Résolu/Fermé
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 - 18 juin 2012 à 21:05
LeDénicheur Messages postés 565 Date d'inscription samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 - 21 juin 2012 à 21:14
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
Modifié par LeDénicheur le 21/06/2012 à 21:15
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
21 juin 2012 à 09:30
Personne n'a d'idées(s) ? Erf !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 juin 2012 à 09:57
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
Modifié par LeDénicheur le 21/06/2012 à 13:28
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 jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 juin 2012 à 13:54
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
21 juin 2012 à 14:04
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 samedi 5 janvier 2008 Statut Membre Dernière intervention 1 décembre 2013 358
Modifié par LeDénicheur le 21/06/2012 à 20:03
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