[Excel VBA] Remplacer feuille par une autre
grotone
Messages postés
14
Date d'inscription
Statut
Membre
Dernière intervention
-
plop -
plop -
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
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:
- [Excel VBA] Remplacer feuille par une autre
- Remplacer disque dur par ssd - Guide
- Liste déroulante excel - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Excel trier par ordre croissant chiffre - Guide
- Déplacer une colonne excel - Guide
5 réponses
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!
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!
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
- 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
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
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
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
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.
as-tu remarqué que la question date de 2008, et qu'il voulait le faire en vba ?
eric
Bonne journée!
Mathieu
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