Bonjour/Bonsoir à tous,
J'espère que vous allez bien et que le confinement n'est pas trop difficile. De mon côté, je passe plus temps à m'entrainer en VBA. C'est un bon point, non ?
Actuellement, je cherche à créer une macro me permettant de :
1) Créer un classeur
2) Copier des feuilles d'un classeur déjà ouvert
3) Coller les feuilles dans le nouveau classeur
4) Demander où enregistrer le nouveau document
J'ai essayé de développer quelque chose mais je bloque sur certains points. Je précise que je débute, cela fait maintenant 5-6 jours que j'ai commencé le VBA en "autoformation" donc ce n'est pas à la hauteur d'une personne expérimentée mais ça marche (de temps en temps)
Voici les lignes de codes avec quelques annotations : :
Mes problèmes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 Sub Newfichier() Application.ScreenUpdating = False ' Créer le nouveau classeur Workbooks.Add ' Problème : Le classeur s'appelle "Classeur (X)" avec X le nombre de classeur déjà créé par l'utilisateur Windows("Fichier source.xlsm").Activate Sheets("TCD_Caché1").Visible = True ' Rendre visible les feuilles TCD du fichier source Sheets("TCD_Caché2").Visible = True ' Rendre visible les feuilles TCD du fichier source Sheets("TCD_Caché3").Visible = True ' Rendre visible les feuilles TCD du fichier source Sheets("Feuille1").Select ' Feuille n°1 à copier Sheets("Feuille1").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("TCD_Caché1").Select ' TCD_Caché n°1 à copier Sheets("TCD_Caché1").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("Feuille2").Select Sheets("Feuille2").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("TCD_Caché2").Select ' TCD_Caché n°1 à copier Sheets("TCD_Caché2").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("Feuille3").Select Sheets("Feuille3").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("TCD_Caché3").Select Sheets("TCD_Caché3").Copy Before:=Workbooks("Classeur6").Sheets(1) Windows("Fichier source_Octobre.xlsm").Activate Sheets("TCD_Caché1").Select ActiveWindow.SelectedSheets.Visible = False ' Cache les feuilles TCD_Caché du fichier sources Sheets("TCD_Caché2").Select ActiveWindow.SelectedSheets.Visible = False ' Cache les feuilles TCD_Caché du fichier sources Sheets("TCD_Caché3").Select ActiveWindow.SelectedSheets.Visible = False ' Cache les feuilles TCD_Caché du fichier sources Application.ScreenUpdating = True Workbooks("Classeur6").Activate Application.Dialogs(xlDialogSaveAs).Show End Sub
1) Concernant les lignes pour coller les feuilles d'un classeur à un autre :
La destination s'appelle " Before:=Workbooks("ClasseurX") " . Cela veut dire que si je mets Classeur1 et qu'auparavant j'ai déjà ouvert 3 nouveaux classeurs, lorsque je vais appuyer sur le bouton de cette macro, elle va me créer un " classeur4 ". Donc si dans la macro je nomme le fichier "Classeur1", elle ne va pas vouloir fonctionner.
Est-ce qu'il y a un moyen de créer un fichier puis de lui donner directement un nom pour régler ce problème ?
2) Le nom du fichier source :
Le nom du classeur évolue de mois en mois. Au mois de Janvier, il va s'appeler, par exemple : "Fichier source_Janvier.xlsm". Puis, en février : " Fichier source_Février.xlsm " ...
Dans la macro, le nom du fichier source est fixe donc si je mets Janvier, ça restera "Fichier source_Janvier.xlsm" même si je vais février. Je dois donc modifier la macro chaque mois ...
Est-ce qu'il y a un moyen de ne pas citer le nom du classeur ? Par exemple : Application.ThisWorkbooks représente uniquement le fichier source ?
Voilà ... la macro fonctionne mais des petits détails comme le nom du fichier me dérangent ...
En tout cas, j'espère avoir été assez clair dans les explications.
Je vous remercie d'avance,
Alexis![]()
Partager