Enregistré sous VBA

dealise

XLDnaute Junior
Bonjour a tous,

Je bloque sur un problème...

J'ai un fichier Excel comportant 3 onglets (par exemple), je souhaiterais faire par macro :
- autant de fichier Excel qu'il y a d'onglet, c'est a dire ici 3
- chaque fichier excel crée doit comporter un seul onglet, soit un premier avec l'onglet 01, puis un deuxième avec 02, puis un troisième avec 03.
- chaque fichier crée s'appel du nom de l'onglet.

j'ai écrit en VB :

Code:
Sub creation_onglet()

Dim sh As Worksheet

'demande ou il veut enregistrer le fichier
Application.DisplayAlerts = False

Do While sPath = ""
    Set Fd = Application.FileDialog(msoFileDialogFolderPicker)
    With Fd
        If .Show = -1 Then
            sPath = .SelectedItems.Item(1) & "\"
        End If
    End With
Loop

For Each sh In Worksheets
    'recupère le nom de l'onglet
    NomOnglet = sh.Name
    NomOnglet = "Lot n°" & Left(NomOnglet, 2)
    'enregistrement
    ActiveWorkbook.SaveAs Filename:=sPath & NomOnglet, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
Next sh



Application.DisplayAlerts = True
End Sub

Il manque actuellement dans mon code, la ligne permettant de supprimé, tous les onglet sauf celui que l'on souhaite gardé...., mon problème est que lorque je fais le premier enregistré sous, mon fichier n'aura plus qu'un seul onglet, et je ne pourrais pas récupéré les autres, a part en ré-ouvrant le fichier de base comportant les 3 onglets... Seulement ce fichier est très lourd et si j'ai 20 onglets, la macro va mettre beaucoup de temps a s'éxecuter...

Si joint un exemple.

Merci par avance de vos réponses !!!
 

Pièces jointes

  • Dealise.xls
    15.5 KB · Affichages: 27
  • Dealise.xls
    15.5 KB · Affichages: 22
  • Dealise.xls
    15.5 KB · Affichages: 22

Yaloo

XLDnaute Barbatruc
Re : Enregistré sous VBA

Bonsoir dealise,

En modifiant ta macro comme ci-dessous, ça devrait le faire.

VB:
Sub creation_onglet()
Dim sPath, Fd, NomOnglet
 Dim sh As Worksheet

 'demande ou il veut enregistrer le fichier
 Application.DisplayAlerts = False

 Do While sPath = ""
     Set Fd = Application.FileDialog(msoFileDialogFolderPicker)
     With Fd
         If .Show = -1 Then
             sPath = .SelectedItems.Item(1) & "\"
         End If
     End With
 Loop

 For Each sh In Worksheets
     'recupère le nom de l'onglet
     NomOnglet = "Lot n°" & Left(sh.Name, 2)
      sh.Copy
     'enregistrement
     ActiveWorkbook.SaveAs Filename:=sPath & NomOnglet, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False
     'Ferme le nouveau classeur
     ActiveWorkbook.Close
 Next sh

 Application.DisplayAlerts = True
 End Sub

A te relire

Martial
 

Discussions similaires

Réponses
12
Affichages
289
Réponses
2
Affichages
144

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson