Créer nouveau fichier Excel par VBA

Bonjour,

Je voulais savoir si il était possible de "séparer" des feuilles d'un fichier excel, pour créer un autre fichier excel contenant ces feuilles.

capture

Voici le contenu d'une feuille, et j'aimerais que toute les feuilles en bleu en bas soit dans un fichier séparé. Je veut un fichier avec toute les feuilles et pas un fichier par feuille.

J'ai cherché sur les forum et je n'ai pas trouver quelque chose qui ressemble a ma question.

Ce tableau est obtenue par vba, mais il n'y a plus de traitement par vba après, que des traitement main. Le but est de pouvoir stocker ces tableaux, avec comme nom de fichier ""PLANNING " + date_du_jour" dans un dossier prévu a cet effet.

Je vous remercie par avance du temps que vous m'accorderez.

Bonjour,

Un truc tout simple, tu fais une copie de ton fichier que tu renommes, et tu supprimes tous les onglets inutiles pour toi, et tu gardes que les onglets en bleu et le tour est joué

En tous les cas c'est de cette façon que je procéderais, à moins que je n'ai rien pigé à ta demande

Slts

Sur le principe c'est cela, mais j'aimerais pouvoir le faire par une macro.

Du genre un clic sur bouton et hop on obtient un fichier jumeau. Sur l'original on supprime les bleu et sur le nouveau on supprime tout sauf les bleu.

Sauf que j'ai commencer en vba il n'y a pas longtemps et que je ne sait pas comment faire.

Bonjour,

Effectivement comme l'écrit boss_68, le mieux est de dupliquer le fichier d'origine et ensuite de supprimer les onglets inutiles.

Pour le faire par macro, je te communique un exemple avec deux variables objet (Source et Dest) qui pointent respectivement sur le fichier courant et le fichier dupliqué. Dans l'exemple j'ai nommé le fichier dupliqué "ZZZ.XLS" qui est crée dans le même dossier que le fichier Source. Avant duplication, la procédure vérifie que le fichier ZZZ.XLS existe (fonction FichierExiste, fournie ci-dessous ) et si oui, il le supprime (Fonction Kill, là c'est du VBA).

A adapter à ta situation avec suppression par le nom. Il peut être intéressant d'avoir des règles de nommages des onglets pour effectuer les suppressions en boucle (Pratique s'il faut supprimer 50 onglets ou plus ). Dans mon exemple, j'ai nommé mes onglets "COMPTA1" à "COMPTA3".

Sub DupliqueFichier()
    Dim Source As Workbook
    Dim Dest As Workbook
    Set Source = ActiveWorkbook

    'Supprime fichier pour duplication si EXISTE

    If ExisteFichier(Source.Path & "\ZZZ.XLS") Then
        Kill Source.Path & "\ZZZ.XLS"
    End If

    'Enregistre le fichier à dupliquer sous...
    Source.SaveCopyAs Source.Path & "\ZZZ.XLS"

    'Ouvre le fichier qui vient d'être dupliqué
    Set Dest = Workbooks.Open(Source.Path & "\ZZZ.XLS")

    'Désactive les messages d'alerte avant suppression
    'd'un onglet
    Application.DisplayAlerts = False

    'Suppression d'un onglet sur le fichier dupliqué
    Dest.Sheets("COMPTA3").Delete
    ' ajouter les autres ici

    'Suppression d'un onglet sur le fichier source
    Dest.Sheets("COMPTA1").Delete
    'ajouter les autres ici

    'Réctivation des alertes (pas obligatoire dans cet exemple)
    Application.DisplayAlerts = True

    'Sauvegarde et fermeture de "ZZZ.XLS"
    Dest.Save
    Dest.Close

End Sub

Function ExisteFichier(Nomfic As String) As Boolean
On Error GoTo ExisteFichier_suite
    Dim N As String
    Dim R As Variant
    ExisteFichier = False
    N = Dir(Nomfic)
    If N <> "" Then ExisteFichier = True
ExisteFichier_fin:
    Exit Function
ExisteFichier_suite:
    R = MsgBox("Problème de lecture !", 48, "Erreur !!!")
    Resume ExisteFichier_fin
End Function

Il ne reste plus qu'à créer un bouton sur le fichier source pour déclencher l'action. Un conseil, prévoit une confirmation par l'utilisateur, Ex: Reponse=Msgbox(.....

Bon courage,

C'est effectivement ce que je souhaite faire, je n'ai pas encore testé je voulais quelques précision avant.

Dans le fichier dupliqué je ne souhaite garder que UNE sheet car c'est elle qui est la sheet maître contenant toute les donnée brute.

Je souhaite donc dupliquer uniquement celle ci et créer un nouveau fichier, et ensuite par macro créer les sheets avec tableaux vu précédemment.

Je pense que ça sera plus simple que de supprimer toute les autres sheet par que il n'y a pas de règle de nommage.

Est ce que on peut remplacer le Dim Source As Workbook en Dim Source As WorkSheet et partir sur source = ActiveWorkSheet ?

Je ne sais pas si les macros créée dans le fichier source se transmettent dans le fichier destination.

Si oui, dans mon fichier, la sheet que je souhaite "isoler", comporte des boutons, seront ils transmis et fonctionnels?

Bonjour,

Dans l'exemple que je te donne , il s'agit d'une copie à l'identique du fichier courant, donc tout est conservé (onglets, boutons, macros,...).

Une fois la copie effectuée, tu peux agir sur celle-ci et supprimer tous les onglets que tu veux en les énumérant un par un.

Exemple:

Dest.Sheets("COMPTA3").Delete

Dest.Sheets("COMPTA5").Delete

Dest.Sheets("COMPTA5").Delete

Tu peux également supprimer tous les onglets en excluant l'onglet que tu veux conserver au travers d'une boucle FOR..NEXT.

Procédure modifiée avec un onglet nommé "MAITRE" qui sera conservé. Tous les autres son supprimés

Sub DupliqueClasseur()
    Dim Source As Workbook
    Dim Dest As Workbook
    Dim F As Worksheet
    Set Source = ActiveWorkbook

    'Supprime fichier pour duplication si EXISTE
    If ExisteFichier(Source.Path & "\ZZZ.XLS") Then
        Kill Source.Path & "\ZZZ.XLS"
    End If

    'Enregistre le fichier à dupliquer sous...
    Source.SaveCopyAs Source.Path & "\ZZZ.XLS"

    'Ouvre le fichier qui vient d'être dupliqué
    Set Dest = Workbooks.Open(Source.Path & "\ZZZ.XLS")

    'Désactive les messages d'alerte avant suppression
    'd'un onglet
    Application.DisplayAlerts = False

    'Suppression des onglets sauf onglet principal (nommé MAITRE dans l'exemple)
    For Each F In Dest.Sheets
        If F.Name <> "MAITRE" Then
            Dest.Sheets(F.Name).Delete
        End If
    Next

    Application.DisplayAlerts = True

    'Sélection la feuille "MAITRE"
    Dest.Sheets("MAITRE").Select

    'Ecrit sur la cellule A1 de l'onglet "MAITRE"
    Dest.ActiveSheet.Range("A1").Value = "Gérard"

    'Sauvegarde et fermeture de "ZZZ.XLS"
    Dest.Save
    Dest.Close

End Sub

Voir fichier joint (Réalisé sous EXCEL 2003

)

Merci beaucoup, je viens de voir ta réponse.

J'ai travaillé de mon coté, j'ai fait une boucle if, comme toi, donc ça va.

Application.DisplayAlerts = False
For Each Worksheet In Worksheets
    If Worksheet.Name <> "PLANNING" Then Worksheet.Delete
Next
Application.DisplayAlerts = True

Du coup j'ai pu voir que les macro se transmettait, j'avais peur vu que le nom était .xls et pas .xlsm

Je te remercie tu m'as bien aider.

Sur ce je vais clore le sujet.

Bonne journée.

Oui effectivement, j'ai oublié de te préciser qu'il fallait prendre l'extension qui correspond à ta version d'Excel (XlsM).

Nous sommes toujours en version 2003 au travail (c'est triste )

Je comprend et partage ta tristesse.

J'ai passé quelque temps sur openoffice ou libreoffice (je me souviens plus) pour mes études avant d'avoir excel.

Heureusement que je n'y faisait que des trucs rapide, ça aurait été une horreur pour faire autre chose que des rapports et présentation.

Rechercher des sujets similaires à "creer nouveau fichier vba"