Importation de modules lors de la création de nouveaux classeurs
Bonjour,
J'utilise une macro me permettant, à partir d'un fichier sources, de créer un nouveau classeur (copie d'un onglet vers un nouveau classeur renommé et enregistré)
Sub crerFeuilleagent()
' Touche de raccourci du clavier: Ctrl+w
' copier et nommer la feuille active dans un nouveau fichier
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
ActiveSheet.Copy
ActiveWorkbook.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'supprimer les liaisons du fichier cible vers le fichier source'
Dim Liaisons As Variant
Liaisons = ActiveWorkbook.LinkSources(Type:=xlLinkTypeExcelLinks)
ActiveSheet.Unprotect
If IsEmpty(Liaisons) = True Then Exit Sub
For LiaisonsTrouvee = 1 To UBound(Liaisons)
ActiveWorkbook.BreakLink _
Name:=Liaisons(LiaisonsTrouvee), _
Type:=xlLinkTypeExcelLinks
Next LiaisonsTrouvee
'supprimer les données'
Range("E3:H373,J3:Z373,AD3:AH373,AJ3:AJ373").Select
Selection.ClearContents
Range("E3").Select
ActiveSheet.Protect
ActiveWorkbook.Save
ActiveWindow.Close
End SubJ'aimerai, lors de la création de ce nouveau classeur, y ajouter automatiquement deux macro présentent dans le fichier source. Est-ce possible ?
Je vous remercie pour votre aide.
PasPoum
ps : je suis novice, en générale, je me dépatouille avec des bouts de code que j'adapte, mais là, je ne trouve rien à ma porté...
Bonjour
Il suffit de créer un modèle de classeur . xltm avec dedans le code utile et d'utiliser ce modèle pour créer le nouveau classeur
Bonjour Chris et merci pour votre réponse.
Je ne connaissais pas les modèles .xltm et effectivement ça semble très pertinent.
Donc dans l'idée je crée mon modèle .xltm comprenant les macros qui m'intéressent et je place dans le même répertoire que le classeur source (difficile d'utiliser le dossier template car je ne suis pas l'utilisateur final).
Puis je dois modifier ma macro qui créer le nouveau classeur pour qu'elle le fasse en utilisant le modèle .xltm
Ai-je bien compris ?
Si c'est le cas, il me reste à modifier ma macro (et là aussi un coup de pousse ne serai pas de refus).
Merci
RE
En principe les modèles sont stockés à une endroit précis mais par VBA tu peux accéder à un modèle situé où tu le souhaites.
A adapter
Workbooks.Add Template:="T:\TEMP\Monmodèle.xltm"Bonjour,
Merci Chris pour cette piste.
Voici ce que j'ai tenté :
Utiliser Wokbooks.Add pour créer mon nouveau classeur, nommé, enregistré au bon endroit et fermé (c'est pas très classe mais ça fonctionne)
Puis copier ma feuille (qui redevient ActiveSheet) vers ce nouveau classeur fermé et là je coince (je copie la feuille active de mon nouveau classeur actif alors que je voudrais copier celle du classeur inactif...)
Je suis coincé également car je voudrai que cette macro fonctionne indifféremment en fonction de la feuille sur laquelle je me trouve (si je lance ma macro sur la feuille 3 "agent x", je veux copier cette feuille dans un nouveau classeur nommé "Agent X", si je la lance sur la feuille 4 "agent y", je veux copier cette feuille dans un nouveau classeur nommé "Agent y" etc...)
Je suis surtout coincé car je ne sais pas m’affranchir d' ActiveSheet et d' ActiveWorkbook mais je ne sais pas comment m'y prendre...
Merci
Sub crerFeuilleagent()
' Touche de raccourci du clavier: Ctrl+w
' copier et nommer la feuille active dans un nouveau fichier
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
Workbooks.Add ("C:\Users\...\Desktop\exemple\model.xltm")
ActiveWorkbook.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.Close
Set classeurFermé = Workbooks.Open(nomComplet)
ActiveSheet.Copy Before:=classeurFermé.Sheets(1)
classeurFermé.Close SaveChanges:=True
End SubBonjour
On n'utilise pas Wokbooks.Add mais Workbooks.Add Template:=...
Le fichier créé lui n'est pas un template mais un classeur normal qu'on enregistre en .xlsm
La feuille copiée doit y être ajoutée avant sa fermeture si c'est une feuille remplie, sinon le template doit contenir en plus des macros, l'onglet modélisé prêt à remplir
Bonjour Chris et encore merci pour ton aide.
Résolument, je n'arrive pas à avancer malgré le temps passé à me documenter et à essayer de comprendre.
Je ne sais plus dans quel sens prendre le problème...
Avec ma macro d'origine, j'arrive à copier ma feuille depuis le classeur d'origine vers un nouveau classeur, portant le nom de la feuille d'origine et enregistré à coté du classeur d'origine.
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
ActiveSheet.Copy
ActiveWorkbook.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=FalseMais les deux macros dont j'ai besoin ne sont pas copiées dans mon nouveau classeur.
Tu m'a proposé d'utiliser un modèle .xltm avec mes macros dedans.
J'arrive à créer mon nouveau classeur, avec les macros, portant le nom de la feuille d'origine et enregistré à coté du classeur d'origine mais je n'arrive plus à copier ma feuille d'origine (qui est effectivement pré-remplie)
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
Workbooks.Add Template:="C:\Users\...\Desktop\exemple\model.xltm"
ActiveWorkbook.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.CloseTu me suggère d'effectuer la copie de ma feuille d'origine avant la fermeture du classeur d'origine, je suppose donc qu'il faut faire un truc comme ça :
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
Workbooks.Add Template:="C:\Users\...\Desktop\exemple\model.xltm"
*Copie de ma feuille d'origine depuis le classeur d'origine (qui n'est plus actif et qui change de nom chaque année)
*Collage vers le nouveau classeur
*Renommer la feuille au nom de la feuille d'origine
*Puis sauvegarder comme suit :
ActiveWorkbook.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
ActiveWorkbook.Save
ActiveWindow.CloseLa logique est-elle bonne ?
Comment faire ma copie sans me prendre les pieds dans le tapis avec le classeur actif et "non actif" et en sachant que le classeur d'origine change de nom chaque année ?
Je ne cherche pas une réponse toute faite, mais vu mon niveau, un petit pas à pas m'aiderait beaucoup.
Merci
PasPoum
Bonjour
Je reprécise l'usage du template :
On le crée, en général manuellement. Il peut contenir selon besoins :
- des onglets prêts à remplir,
- des formats de nombres personnalisés,
- des styles de cellules et/ou de tableau et/ou de TCD personnalisés,
- un thème différent du thème par défaut
- des macros (modules standard)
- ...
Quand on crée un nouveau classeur basé sur le modèle, ce classeur est un clone du modèle mais n'est pas un modèle.
D'ailleurs de même qu'un nouveau classeur s'appelle Classeur1 en attendant la sauvegarde, si le modèle se nomme Toto, un classeur basés dessus se nommera Toto1.
On peut y ajouter des onglets, manuellement ou par VBA et on l'enregistre en xlsx ou xlsm si macros
Ton code
Dim nomComplet As String
nomComplet = ThisWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
Workbooks.Add Template:="C:\Users\...\Desktop\exemple\model.xltm"
With ActiveWorkbook
ThisWorkbok.Worksheets("NomFeuille").Copy After:=.Sheets(1) 'voir si avant ou après. La copie à la même nom que la feuille copiée
.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
.Close
End WithBonjour,
Merci pour ces précisions.
J'ai adapté un peu et ça donne ça :
Dim nomComplet As String
nomComplet = ActiveWorkbook.Path & "\" & ActiveSheet.Name & ".xlsm"
Workbooks.Add Template:="C:\Users\...\Desktop\exemple\model.xltm"
With ActiveWorkbook
ThisWorkbook.ActiveSheet.Copy Befor:=.Sheets(1)
.SaveAs nomComplet, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
.Close
End WithCa fonctionne, c'est super.
Du coup, pour être sur de bien comprendre : ActiveWorkbook ligne 4 renvois au nouveau classeur créer et ligne 5 ThisWorkbook renvois au classeur d'origine ?
Il me reste à modifier le chemin "C:\Users\...\Desktop\exemple\model.xltm" pour le rendre "toujours vrai".
Je passe le sujet "Résolu"
Je déposerai ici la macro complète quand je l'aurai fini.
Un grand merci Chirs pour ton aide, ton temps et ta patience.
PasPoum