XL 2016 Enregistrer onglets créer dans un dossier

fenec

XLDnaute Impliqué
Bonjour le forum,

J’ai trouvé sur le net une macro qui fait en parti ce que je souhaite mais j’aurais besoin de vous pour la modifier car je n’y parviens pas.
Je voudrais que la macro ne me les copies pas à la suite du dernier onglet mais dans un dossier défini par avance.
J’ai essayé en lui définissant un chemin mais rien à faire…

chemin = ThisWorkbook.Path & "\Tableau\"
Cordialement,
Philippe.
 

Pièces jointes

  • Enregistrer onglets dans un dossier.xlsm
    26.8 KB · Affichages: 25

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Fenec, bonsoir le forum,

Tu ne peux pas copier dans un dossier mais dans un fichier d'un dossier !...
Le code modifié :

VB:
Sub Dupliquer_Tableau()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim ES As FileDialog 'déclare la variable ES (Enregistre Sous)
Dim ND As Byte 'déclare la variable ND (Nombre d'onglet par Défaut)

Set CS = ThisWorkbook 'définit la classeur source CS
ND = Application.SheetsInNewWorkbook 'récupère dans la variable ND le nombre d'onglets vierges par défaut dans un nouveau classeur
Application.SheetsInNewWorkbook = 1 'redéfinit le nombre d'onglets vierges par défaut dans un nouveau classeur
Set CD = Workbooks.Add 'définit le classeur destination CD en ouvrant un nouveau classeur
chemin = ThisWorkbook.Path & "\Tableau\" 'définit le chemin
pj = CDate("1 - " & Month(Date))
dj = Format(Application.EoMonth(pj, 0), """ ""dd/mm/yyyy")
Dates = InputBox("Saisir date début et date de fin" & Chr(13) & "(séparée par un espace)", "Création Effectif Journalier", pj & dj)
'Dates = InputBox("Saisir date début et date de fin" & Chr(13) & "(séparée par un espace)", "Création Effectif Journalier") 'si tu ne veux pas de date de départ défini
Select Case True
    Case StrPtr(Dates) = 0
        Exit Sub
    Case Len(Dates) = 0
        Exit Sub
    Case Else
        Application.ScreenUpdating = False
        i = CDate(Split(Dates)(0))
        j = CDate(Split(Dates)(1))
        For x = i To j
            CS.Worksheets("Tableau").Copy after:=CD.Sheets(Worksheets.Count) 'copie l'onglet "Tableau" du classeur source après le premier onglet du classeur destination
            With ActiveSheet
                .Range("B4").Value = CDate(x)
                .Name = Format(x, """Tableau du ""dd-mm-yyyy")
                .DrawingObjects.Delete
            End With
        Next x
End Select
Application.DisplayAlerts = False 'masque les message d'Excel
CD.Sheets(1).Delete 'supprime le premier onglet du classeur destination
Application.DisplayAlerts = True 'affiche lkes message d'excel
CD.Worksheets(1).Activate 'active le premier onglet du classeur destination
Application.SheetsInNewWorkbook = ND 'redéfinit le nombre d'onglet par défaut d'un nouveau classeur tel qu'il était initialement
Set ES = Application.FileDialog(msoFileDialogSaveAs) 'définit ES (boîte de dialogue Enregistrer Sous)
ES.InitialFileName = chemin 'définit le chemin par défaut de la boîte de dialogue
ES.Show 'affiche ES
If ES.SelectedItems.Count > 0 Then ActiveWorkbook.SaveAs ES.SelectedItems(1) 'si un nom a été inscrit et validé, enregistre sous le classeur destination
End Sub
 

fenec

XLDnaute Impliqué
Bonjour le forum, Robert
Déjà merci pour aide
Venant de tester votre code je rencontre un souci lors de l’enregistrement :
1612535154946.png


Avec la ligne de code en jaune lorsque je poursuis
ActiveWorkbook.SaveAs ES.SelectedItems(1)
Je change donc item en mettant :
ActiveWorkbook.SaveAs ES.SelectedItems(2)
Et la excel me dit :
1612535195958.png

Cordialement,
 

fenec

XLDnaute Impliqué
Bonjour le forum, Robert
je remonte ce post après une longue absence en précisant que j'ai réussi à utiliser votre code qui fonctionne très bien.
Je souhaiterais toutefois savoir s'il serait possible que les onglets ainsi copiés le soient avec liaisons afin qu'ils se mettent à jour si modifications dans le fichier original.
D'avance merci pour l'aide que vous pourriez me donner.

Cordialement,
Philippe.
 

fenec

XLDnaute Impliqué
Re le forum, Job 75
Désolé j'ai oublié de préciser ma demande par rapport au post #1
En réalité suite à une nouvelle demande de ma hiérarchie je vais créer les onglets dans le fichier avec la macro du post #1 puis avec l'aide de la macro de Robert créer un fichier avec ces même onglets pour le mettre en consultation pour le personnel sur un autre ordinateur en réseau et ainsi le modifier si besoin mais pas le personnel.
J'espère avoir été assez précis cette fois, si besoin n'hésitez pas pour avoir plus de détails
A+
 

job75

XLDnaute Barbatruc
C'est toujours peu cohérent.

Car une fois les feuilles créées dans le fichier du post #1 il faut enregistrer ce fichier pour créer le fichier source, puis si l'on vous suit bien créer à partir de celui-ci le fichier de destination avec les liaisons.

Avoir 2 fichiers identiques ne présente à mon avis aucun intérêt et entraînera de nombreuses erreurs.
 

fenec

XLDnaute Impliqué
Re,
Le fichier ne sera pas le même vu que certain onglets ne seront pas copier mais je teste votre remarque et reviens vers vous avec plus de commentaire.
Le but principale de cette copie d'onglets dans un nouveau fichier étant que le personnel consultant ce fichier sur un autre ordinateur est que celui ci ne puisse le modifier.
J'essaie de faire un fichier pour compléter ma demande dès que possible
A+
 

Discussions similaires

  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
750

Statistiques des forums

Discussions
315 127
Messages
2 116 499
Membres
112 765
dernier inscrit
SIDIANW