[Excel VBA] Remplacer feuille par une autre

Fermé
grotone Messages postés 14 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 21 juillet 2009 - 7 mai 2008 à 18:11
 plop - 14 avril 2016 à 10:23
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
A voir également:

5 réponses

Mathieu Lecours Messages postés 2 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 13 mars 2014 5
12 mars 2014 à 22:50
Bonjour à tous,

Si vous lisez les autres solutions des membres, et que vous ne comprenez rien de rien ou que tout vous semble trop complexe, voici la solution la plus efficace et la plus simple pour vous:


Prenons le cas suivant comme exemple:

Vous voulez remplacer la Feuil2 du ClasseurA par la Feuil2 du ClasseurB.
Toutefois, vous ne voulez pas perdre les formules de la Feuil1 qui réfèrent à la Feuil2 du ClasseurA. (ce paragraphe peut être difficile à comprendre du premier coup, mais assurez-vous d'assimiler ce qui est écrit avant de continuer)

Voilà ce que vous devez faire:

1. Ouvrez les deux classeurs

2. Dans le ClasseurB, cliquez sur Feuil2

3. Dans le menu Accueil, cliquez sur Format > Déplacer ou copier une feuille...

4. Une fenêtre apparaît! Dans cette fenêtre, sous le menu Dans le classeur, choisissez ClasseurA. Encore dans cette fenêtre, cochez Créer une copie (en bas à gauche), puis cliquez sur OK

5. À ce moment, vous devriez être automatiquement redirigé dans le ClasseurA. Vous remarquerez que vous avez maintenant Feuil2 et Feuil2 (2). Vous devez supprimer Feuil2

6. Renommez Feuil2 (2) pour Feuil2

7. Ensuite, allez dans Feuil1 : vous remarquez que les fonctions qui réfèrent à Feuil2 ne fonctionnent plus et son remplacées par #REF. C'est normal. Maintenant, sélectionnez toutes les cellules et faites la fonction Remplacer (CTRL+H)

8. Une fenêtre apparaît. Dans cette fenêtre, dans la première section, écrivez #REF. Dans la deuxième section, écrivez Feuil2. Finalement, cliquez sur Remplacer tout (en bas à gauche) et le tour est joué!

Notez bien que cette solution fonctionne pour Excel 2010, mais je ne suis pas sûr qu'elle s'applique pour les autres versions de Excel. De plus, avant de commencer les étapes, assurez-vous qu'aucune cellule de Feuil1 ne contient d'erreur, c'est-à-dire de #REF. Sinon, l'étape 8 risque de remplacer #REF par Feuil2 dans vos formules.

Voilà! J'espère que mes explications vous auront été utiles!

Bonne journée à tous!
5
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
13 mars 2014 à 01:14
Bonjour,

as-tu remarqué que la question date de 2008, et qu'il voulait le faire en vba ?
eric
0
Mathieu Lecours Messages postés 2 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 13 mars 2014 5
13 mars 2014 à 13:55
Effectivement, j'avais remarqué :P Toutefois, je suis persuadé que ce que j'ai écrit servira à quelqu'un, quelque part, un de ces jours!

Bonne journée!

Mathieu
0
plop > Mathieu Lecours Messages postés 2 Date d'inscription mercredi 12 mars 2014 Statut Membre Dernière intervention 13 mars 2014
14 avril 2016 à 10:23
Ce que tu as écris vient de me servir, deux ans plus tard ;)
J'ai utiliser l'option "enregistrer une macro" en faisant les manips que tu as cité ci-dessus. Et ça fonctionne bien!
J'ai plus qu'à légèrement modifier la macro créée pour la dupliquer à d'autres fichiers et hop, j'ai actualisé tout mon doc!

Vite fait, bien fait.
Merci d'avoir écrit ce post hs mais bien utile xD
0
zavenger Messages postés 811 Date d'inscription vendredi 29 février 2008 Statut Membre Dernière intervention 20 avril 2012 161
7 mai 2008 à 22:01
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
0
grotone Messages postés 14 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 21 juillet 2009 1
8 mai 2008 à 17:57
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
0
Merci
0
grotone Messages postés 14 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 21 juillet 2009 1
8 mai 2008 à 19:19
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...
0

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

Posez votre question
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 30/08/2012 à 15:41
Bonjour,

et en utilisant un 3ème classeur intermédiaire ayant les nom des feuilles liées ?
Ca donnerait qcq chose comme ça :
' préservation des liens
ActiveWorkbook.ChangeLink Name:="D:\Users\Eric\Documents\ccm\Classeur2.xls", _  
    NewName:="D:\Users\Eric\Documents\ccm\Classeur3.xls", Type:=xlExcelLinks  
' remplacement de la feuille  
'....  
' rétablissement des liens  
ActiveWorkbook.ChangeLink Name:="D:\Users\Eric\Documents\ccm\Classeur3.xls", _  
    NewName:="D:\Users\Eric\Documents\ccm\Classeur2.xls", Type:=xlExcelLinks  

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0