Rechercher : dans
Par :

[Excel VBA] Remplacer feuille par une autre

Dernière réponse le 8 mai 2008 à 19:19:39 grotone, le 7 mai 2008 à 18:11:53 
 Signaler ce message aux modérateurs

Bonjour,

J'ai 2 fichiers Excel différents, et je cherche à remplacer une feuille d'un des classeurs par une du second classeur.

Workbooks(1).Sheets(ActiveSheet.Name).Delete
Workbooks(2).ActiveSheet.Copy after:=Workbooks(1).Sheets("Navigation")

En gros, j'efface la feuille du classeur 1 (appelons la Feuil1, et après je vais chercher la même feuille (avec le même nom, Feuil1 et le même format) dans le classeur 2 et la copie dans le classeur 1.

Tout irait bien dans le meilleur du monde, mais voila, dans le classeur 1, j'ai une autre feuille (mettons "Résumé") qui dépend de valeurs sur la feuille que j'essaie de remplacer, et quand j'effectue mon remplacement, les liens sur cette feuille sont "cassés", bien que les 2 feuilles (Feuil1 des 2 classeurs) soient identiques.

Comment faire pour effectuer mon remplacement de Feuil1, tout en m'assurant que les liens de Résumé ne se "cassent" pas ?

Merci d'avance

Grotone

Configuration: Windows 2003
Internet Explorer 6.0

1

zavenger, le 7 mai 2008 à 22:01:25

Il n'est pas possible (a ma conaissance) que tes liens ne soient pas coupés lorsque tu effaces ta 1ere feuille. 2 solutions pour toi:
- Tu recrés tes liens avec ta macro (tuécrases tes formules)
- tu fais un copier coller entre tes 2 feuilles (avec peut etre un effacement complet de la feuille destination avant le coller)
Je ne sais pas si cela te conviendra mais je ne vois pas d'autres solutions

Répondre à zavenger

2

grotone, le 8 mai 2008 à 17:57:19

Merci, finalement j'ai réussi à m'en sortir en faisant un mix des 2.

Pour ceux que ça interesse, en gros, j'ai un premier classeur avec une feuille "Feuil1" et une feuille "Résumé" qui dépend de valeurs de Feuil1, mais qui dépend aussi d'autres feuilles de ce classeur qui elles ne changeront pas. J'ai un 2eme classeur avec les même 2 feuilles que le premier classeur (mais avec des données qui changent).
Je cherche à remplacer "Feuil1" du 1er classeur par "Feuil1" du 2eme, tout en m'assurant que les valeurs dont dépend "Résumé" du premier classeur n'ait pas de liens cassés (des liens qui pointent vers la nouvelle "Feuil1" mais aussi les autres feuilles qui changent pas).

Après cassage de tête, voila ce que je fais,
J'efface "Résumé" du classeur 2, et le remplace par "Résumé" du classeur 1, et je corrige les liaisons du classeur 2 avec ChangeLinks.
Ensuite, j'efface "Feuil1" et "Résumé" du classeur 1, et je les remplace par celle du classeur 2, et je corrige les liaisons du classeur 1 encore avec ChangeLinks.
Le tout avec des Application.DisplayAlerts = False pour pas qu'Excel m'emmerde en plein milieu des opérations.

Le tout marche et fait exactement ce que je veux, mais c'est assez bordélique comme méthode, si qq'un a une meilleure idée je suis quand même preneur.

Sub Importer()
Dim classeur As String
Dim feuille As String
Dim chemin As String

classeur = Application.GetOpenFilename(FileFilter:="Fichiers Excel (*.xls), *.xls", Title:="Choisir un fichier Excel")
Workbooks.Open classeur
feuille = Workbooks(2).ActiveSheet.Name

'step1
Application.DisplayAlerts = False
Workbooks(2).Sheets("Résumé").Delete
Workbooks(1).Sheets("Résumé").Copy after:=Workbooks(2).Sheets("Navigation")
alinks = Workbooks(2).LinkSources(xlExcelLinks)
chemin = Workbooks(2).Path & "\" & feuille & ".xls"
Workbooks(2).ChangeLink alinks(1), chemin, xlExcelLinks

'step2
Application.DisplayAlerts = False
Workbooks(1).Sheets(feuille).Delete
Workbooks(1).Sheets("Résumé").Delete
Workbooks(2).Sheets(feuille).Copy after:=Workbooks(1).Sheets("Navigation")
Workbooks(2).Sheets("Résumé").Copy after:=Workbooks(1).Sheets("Navigation")
alinks = Workbooks(1).LinkSources(xlExcelLinks)
chemin = Workbooks(1).Path & "\" & Workbooks(1).Name
Workbooks(1).ChangeLink alinks(1), chemin, xlExcelLinks

Application.DisplayAlerts = True

End Sub


a+

Grotone

Répondre à grotone

3

 grotone, le 8 mai 2008 à 19:19:39

Yeah ...

finalement ca marche pour les liaisons de cellules, mais ca chie si j'utilise la propriété linkedcell d'un OptionButton.
le LinkedCell devient #REF'!C200 par exemple, et ChangeLink ne peut rien y faire...

Répondre à grotone
Collection CommentÇaMarche.net