Copier/coller 2 onglets dans un fichier à nom variable
Bonjour à tous,
Je me permets de vous poser une question, tout en sachant que je n'ai aucune connaissance en VBA : au-delà de l'option "enregistrer une macro" je ne sais pas faire ! J'espère que cela ne pose pas de problème, je viens de découvrir ce forum !
J'ai un fichier contenant 2 feuilles, et ces feuilles ("hypothèses" et "feuille de notes") contiennent des formules. J'aimerais créer une macro permettant aux utilisateurs de copier/ coller ces feuilles sur un autre fichier Excel de leur choix. Le fichier d'origine est toujours le même, mais celui de destination est variable.
J'ai donc "enregistré la macro" à partir de mes actions, alors que le fichier de base est déjà ouvert, et voici le résultat :
Sub MacroTest()
Sheets(Array("hypothèses", "feuille de notes")).Select
Sheets(Array("hypothèses", "feuille de notes")).Copy Before:=Workbooks( _
"TEST COPIE FORMULES - Copie.xlsx").Sheets(2)
End SubJe voudrais que le fichier "TEST COPIE FORMULES - copie.xlsx" soit remplacé par un input utilisateur. Est-ce possible ?
J'essaie d'utiliser la méthode Application.GetOpenFilename pour récupérer le nom du fichier de destination, mais je ne sais pas comment faire.
Help ?
En vous remerciant,
K.
Bonjour Karina et
Une petite présentation ICI serait la bienvenue
Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum
Ainsi que sur les fonctionnalités (Nouveau Forum au bas de page notamment)
Concernant votre demande, voici une possibilité, code à mettre dans un module de votre fichier principal
Option Explicit
Sub CopierOngletAutreClasseur()
Dim sPathFic As String, Wbk As Workbook
MsgBox "Merci de choisir le classeur dans lequel vous voulez copier les 2 feuilles", vbExclamation, "ATTENTION..."
sPathFic = ChoixFichier(ThisWorkbook.Path, "CLASSEUR de DESTINATION...", "Fichier Excel, *.xlsx")
' Si aucun choix on sort
If sPathFic = "" Then Exit Sub
' Sinon on ouvre le classeur
Set Wbk = Workbooks.Open(sPathFic)
' Copier les feuille dans le classeur ouvert
ThisWorkbook.Sheets(Array("hypothèses", "feuille de notes")).Copy _
After:=Wbk.Sheets(Wbk.Sheets.Count)
' Fermer le classeur ainsi modifié
Wbk.Close SaveChanges:=True
' Effacer la variable objet
Set Wbk = Nothing
End Sub
Function ChoixFichier(DefaultPath As String, sTitre As String, Optional sFilter As String)
' LE filtre doit être du type : "BdD Communes (*.xlsx), *.xlsx"
Dim fd As FileDialog, TabFilter() As String
' Initialiser les variables
If Right(DefaultPath, 1) <> "\" Then DefaultPath = DefaultPath & "\"
' Initialiser l'intance du dialogue
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.AllowMultiSelect = False
.Filters.Clear
' Si un filtre a été donné
If sFilter <> "" Then
TabFilter = Split(sFilter, ",")
.Filters.Add TabFilter(0), Trim(TabFilter(1))
End If
.Title = sTitre
.InitialFileName = DefaultPath
If .Show = -1 Then
ChoixFichier = fd.SelectedItems(1)
End If
End With
Set fd = Nothing
End FunctionMerci de votre participation
Cordialement
Bonjour,
Merci beaucoup !! Ca fonctionne parfaitement bien !
Désolée j'étais un peu désespérée, je n'ai pas pris le temps de me présenter. C'est vraiment parfait ! Merci infiniment !
Petite question annexe : les formules copiées sur le fichier "B" reprennent le chemin de mon fichier d'origine.
Exemple un peu modifié : (=hypothèses!$U$5*SI('[Formulaire_Modele_V2.xlsm]Form1'!AF2="Oui";hypothèses!$T$5;hypothèses!$T$6)
[Formulaire_Modele_V2.xlsm] est le nom de mon fichier d'origine. Savez-vous s'il est possible de copier la formule, sans copier le nom du fichier d'origine ?
Merci encore !!!!
Bonjour Karina,
sous toutes réserves
Sub CopierOngletAutreClasseur()
Dim sPathFic As String, Wbk As Workbook
MsgBox "Merci de choisir le classeur dans lequel vous voulez copier les 2 feuilles", vbExclamation, "ATTENTION..."
sPathFic = ChoixFichier(ThisWorkbook.Path, "CLASSEUR de DESTINATION...", "Fichier Excel, *.xlsx")
' Si aucun choix on sort
If sPathFic = "" Then Exit Sub
' Sinon on ouvre le classeur
Set Wbk = Workbooks.Open(sPathFic)
' Copier les feuille dans le classeur ouvert
ThisWorkbook.Sheets(Array("hypothèses", "feuille de notes")).Copy _
After:=Wbk.Sheets(Wbk.Sheets.Count)
' Remplacer les formules d'origine
Wbk.Sheets("hypothèses").Cells.Replace What:="[Formulaire_Modele_V2.xlsm]", Replacement:="", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Wbk.Sheets("feuille de notes").Cells.Replace What:="[Formulaire_Modele_V2.xlsm]", Replacement:="", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
' Fermer le classeur ainsi modifié
Wbk.Close SaveChanges:=True
' Effacer la variable objet
Set Wbk = Nothing
End SubA+