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 Sub

Je 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 Function

Merci 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 tu peux essayer de remplacer le texte de la formule par rien

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 Sub

A+

Rechercher des sujets similaires à "copier coller onglets fichier nom variable"