Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Export plusieurs feuilles dans un nouveau classeur

Horusbk

XLDnaute Junior
Bonjour,

J'ai ce code qui me permet d'exporter une feuille de calcul précise dans un nouveau classeur.
Le problème c'est que je souhaite exporter non pas une mais deux feuilles précises de mon classeur vers ce nouveau classeur.

VB:
Sub Export_feuil()

Dim LeNom As String, LeRep As String, extension As String
Dim Rep As Integer

extension = ".xlsm"
LeRep = "C:\Users\bapti\Documents\"
LeNom = "Export_TEST" & extension
'
On Error Resume Next
  MkDir Chemin
  On Error GoTo 0
  'On copie les feuilles à garder
  Sheets("Partie2").Copy 'respecter la casse
  Sheets("Partie4").Copy 'respecter la casse
    With ActiveWorkbook
        .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
        .Close
    End With
'
Rep = MsgBox("L'opération s'est achevée avec succès")
'
End Sub

Lors de l'exécution du code, j'ai une erreur '9' avec le message "L'indice n'appartient pas à la sélection" et l'erreur pointe sur cette ligne correspondant à la seconde feuille que je souhaite exporter.
VB:
Sheets("Partie4").Copy 'respecter la casse

Comment puis-je adapter mon programme pour que les deux feuilles soient exportées ?
Merci d'avance pour votre aide

Horusbk.
 

Pièces jointes

  • ExportFeuilles.xlsm
    19.3 KB · Affichages: 23

Horusbk

XLDnaute Junior
Bonjour Staple1600,
Ça fonctionne parfaitement avec votre changement. Merci beaucoup !
Une dernière chose, est-ce possible d'appeler les feuilles de calculs par leur nom (Feuil1, Feuil2 ...) plutôt que par le nom modifiable par l'utilisateur comme je le fais actuellement ?

Merci encore.
Horusbk
 

Horusbk

XLDnaute Junior
Re

Cette fois ça ne fonctionne pas, il me met "incompatibilité de type" en pointant sur :
Code:
Sheets(Array(Feuil1, Feuil2)).Copy
 

Pièces jointes

  • ExportFeuilles2.xlsm
    22.2 KB · Affichages: 21

Horusbk

XLDnaute Junior
Si j'avais compris Néanmoins je voulais tester.
Trêve de plaisanterie, il y a une manière de le faire où je suis obligé de garder les noms personnalisés des feuilles de calculs ?

Merci d'avance
Horusbk
 

Horusbk

XLDnaute Junior
Re
J'ai résolu mon problème : je garde la solution de Staple1600 mais également j'ai une autre solution qui vient supprimer les feuilles de mon classeur que je ne souhaite pas garder lors de mon export.

Merci de ton aide. Baptiste
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, Baptiste

j'ai une autre solution qui vient supprimer les feuilles de mon classeur que je ne souhaite pas garder lors de mon export.
1) Postes là ici, elle pourrait intéresser d'autres membres du forum avec une problématique similaire à la tienne.

2) Si j'étais moi, je ferais le contraire
J'exporte toutes les feuilles lors de l'export
Puis dans ce nouveau classeur, je supprime les feuilles que je ne veux pas garder.
 

Horusbk

XLDnaute Junior
Bonjour Staple1600, c'est tout à fait cela. Dorénavant j'exporte tout puis je supprime depuis le nouveau classeur les feuilles non nécessaires.

Voici la procédure qui permet d'enregistrer une copie du classeur :
VB:
'Export du classeur :

On Error Resume Next
  MkDir chemin
  On Error GoTo 0
  With ActiveWorkbook

' Suppression de ThisWorkbook + Feuilles de classeur inutiles :

    Call Delete_Sheets_ThisWorkBook

' Enregistrer-sous (LeRep = répertoire et LeNom = Nom du fichier) :

    .SaveAs Filename:=LeRep & LeNom, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      Application.DisplayAlerts = False

' Réouverture du classeur qui a été "enregistré sous" (classeurOrigine = chemin complet de votre classeur) :

  Workbooks.Open Filename:=classeurOrigine

' Fermeture de la copie effectuée pour ne laisser ouvert que le classeur d'origine :

  .Close SaveChanges:=False
  Application.DisplayAlerts = True
  End With
Application.ScreenUpdating = True
End Sub

Dans cette procédure, on appelle la macro "Delete_Sheets_ThisWorkBook" qui permet de formater notre archive. Dans mon cas, je supprime toutes les données de "ThisWorkBook" (via une fonction) et je supprime également quelques feuilles de mon classeur comme suis :

VB:
Sub Delete_Sheets_ThisWorkBook()
    'Macro de rénitialisation de ThisWorkBook pour la copie de sauvegarde du fichier
    ThisWorkBook_Delete "ThisWorkbook"

    Application.DisplayAlerts = False
        On Error GoTo ErrorSupp
            Feuil1.Delete
            Feuil3.Delete
    Application.DisplayAlerts = True
ErrorSupp:
Exit Sub
End Sub
Sub ThisWorkBook_Delete(NomModule As String)
    Dim X As Integer
   
    'On supprime tout le contenu de ThisWorkBook
    With ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
    .DeleteLines 1, .CountOfLines
    End With
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Parce que si j'étais moi, je ferais peut-être juste ceci pour faire:
Baptiste à dit:
[...]d'enregistrer une copie du classeur[...]
[...]de formater notre archive(*)[...]
VB:
Sub Export_bis()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
With ThisWorkbook
    srPath = .Path & "\"
    .SaveCopyAs srPath & "X_temp.xlsm"
End With
Workbooks.Open srPath & "X_temp.xlsm"
Supprimer_Feuilles "Feuil5", "Feuil7"
Workbooks("X_temp.xlsm").SaveAs "archive.xlsx", 51
Workbooks("archive.xlsx").Close True
End Sub
Private Sub Supprimer_Feuilles(ParamArray Shts())
Dim shN As Variant
For Each shN In Shts
Sheets(shN).Delete
Next
End Sub

(*): chez moi qui dit archive, dit *.xlsx
(ce qui résout illico la suppression du code VBA dans l'archive)
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…