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 Sub

J'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é...

8exemple.zip (314.73 Ko)

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 Sub

Bonjour

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:=False

Mais 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.Close

Tu 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.Close

La 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 With

Bonjour,

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 With

Ca 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

Rechercher des sujets similaires à "importation modules lors creation nouveaux classeurs"