Microsoft 365 Macro uniquement à

supercopain

XLDnaute Junior
Bonjour à tous,
J'ai cherché une solution dans les discussions déjà ouvert, mais rien ne correspond ou alors je n'emploi pas les bons termes...
J'ai des feuilles de mesures enregistrés au format (.xltm)
A l'ouverture je souhaite qu'une boite de dialogue s'ouvre et invite le technicien à entrer un numéro à 4 chiffres, ensuite c'est la boite de dialogue "enregistrer sous" qui s'ouvre et reprend ce numéro à 4 chiffres + un nom et un chemin prédéfini.

mon problème : lancer la macro qui demande le numéro à 4 chiffres et qui "enregistre sous" (au format .xlsm)
(je l'ai mise dans le workbook open mais a chaque ouverture elle se relance...)

Ci-dessous ma macro:

Sub enregistrer()

Dim objSaveBox As FileDialog
'Enregistrement feuille de mesure
essai = InputBox("Numéro de l'essai ?", "Configuration feuille de mesure", "EXXXX")
Range("D3") = essai
'Définit la fenêtre "Enregistrer sous"
Set objSaveBox = Application.FileDialog(msoFileDialogSaveAs)

With objSaveBox
'Définit un nom par défaut dans le champ "Nom de fichier".
.InitialFileName = "Z:\Commun\R&D\Tests&Essais\En_cours\1_Essais_E\" & essai & ", mesures_" & Date & ".xlsx"


'Définit le type de fichier par défaut :
'(la valeur 4 Permet de spécifier les classeurs "Excel 97-2003" lorsque vous êtes dans Excel 2007)
.FilterIndex = 2


'Affiche la boîte de dialogue
.Show
'Enregistre
.Execute

End With
End Sub
 

supercopain

XLDnaute Junior
Bonjour et merci pour réponse
désolé pour mon explication confus...

oui, cette macro fonctionne, mais....je souhaite qu'elle ne se lance qu'une seul fois et dés l'ouverture du classeur(.xltm) et ensuite une fois le classeur(.xlsm) enregistré cette macro ne soit plus active.

cordialement
 

supercopain

XLDnaute Junior
Bonjour supercopain, Bernard,

Pour que la macro s'exécute une seule fois :
VB:
Sub enregistrer()
If IsNumeric([Fait]) Then Exit Sub
ThisWorkbook.Names.Add "Fait", 1, Visible:=False 'nom défini masqué
'------
A+
Bonjour et merci pour la réponse, mais je dois placer ce code au début du code existant ? et comment faire pour qu'à l'ouverture de mon classeur la macro se lance toute seul ??
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Avec au début de la Sub Workbook_Open If Me.Name <> "… ? Then Exit Sub ça n'irait pas ?
Parce que s'il porte déjà un autre nom que celui du classeur modèle c'est que la macro a déjà été exécutée, non ? Ou en testant le chemin, enfin n'importe quoi ne caractérisant que le classeur modèle.
S'il n'y avait pas d'autre macro à garder dans le classeurs dupliqué il suffirait de l'enregistrer en xlsx.
 

supercopain

XLDnaute Junior
Bonjour.
Avec au début de la Sub Workbook_Open If Me.Name <> "… ? Then Exit Sub ça n'irait pas ?
Parce que s'il porte déjà un autre nom que celui du classeur modèle c'est que la macro a déjà été exécutée, non ? Ou en testant le chemin, enfin n'importe quoi ne caractérisant que le classeur modèle.
S'il n'y avait pas d'autre macro à garder dans le classeurs dupliqué il suffirait de l'enregistrer en xlsx.
Bonjour,
merci pour le temps que vous prenez pour me répondre, mais je n'y arrive pas !
je ne sais pas ou ajouter, ou placer, vos proposition de code.
si je dois l'intégrer dans le module qui contient la macro ou dans le "ThisWorkbook"...
Bonne journée
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne sais pas ,vous n'avez jamais joint de classeur.
En le mettant dans une Workbook_Open ça permettrait de l'exécuter comme vous le souhaitiez dans à l'ouverture du classeur modèle.
D'un autre coté si c'est une macro exécutée par un bouton de formulaire ce srait plus simple car vous pourriez supprimer ce bouton une fois l'opération effectuée.
Si c'est une macro dont l'exécution est demandée via une commande personnalisée du ruban, elle pourrait être dans un 3ème classeur qui se chargerait d'ouvrir le xltm et l'enregistrer en xlsm. Dans ce cas tous les classeurs impliqués pourraient être dans le même état.
 

job75

XLDnaute Barbatruc
Bonjour supercopain, Bernard,

La Workbook_Open c'est votre affaire, la macro que vous avez fournie c'est celle du post #1.

Et la solution que j'ai donnée fait qu'elle ne s'exécutera qu'une seule fois, un point c'est tout.

C'est quand même facile de tester ça non ?

A+
 

supercopain

XLDnaute Junior
Bonjour supercopain, Bernard,

La Workbook_Open c'est votre affaire, la macro que vous avez fournie c'est celle du post #1.

Et la solution que j'ai donnée fait qu'elle ne s'exécutera qu'une seule fois, un point c'est tout.

C'est quand même facile de tester ça non ?

A+
Bonjour,
Voilà, j'ai ajouté le code dans la macro,
mais quand j'ouvre mon classeur modèle elle ne fonctionne pas (lancement manuel de la macro)
il ne se passe rien...
??

Sub enregistrer()
If IsNumeric([Fait]) Then Exit Sub
ThisWorkbook.Names.Add "Fait", 1, Visible:=False 'nom défini masqué


Dim objSaveBox As FileDialog
'Enregistrement feuille de mesure
essai = InputBox("Numéro de l'essai ?", "Configuration feuille de mesure", "EXXXX")
Range("D3") = essai
'Définit la fenêtre "Enregistrer sous"
Set objSaveBox = Application.FileDialog(msoFileDialogSaveAs)
With objSaveBox
'Définit un nom par défaut dans le champ "Nom de fichier".
.InitialFileName = "Z:\Commun\R&D\Tests&Essais\En_cours\1_Essais_E\" & essai & ", mesures_" & Date & ".xlsx"

'Définit le type de fichier par défaut :
'(la valeur 4 Permet de spécifier les classeurs "Excel 97-2003" lorsque vous êtes dans Excel 2007)
.FilterIndex = 2

'Affiche la boîte de dialogue
.Show
'Enregistre
.Execute
End With
End Sub
 

job75

XLDnaute Barbatruc
Bon comme il y a un "enregistrer sous" le nom défini n'est pas enregistré dans le fichier original.

Alors complétez comme suit :
VB:
Sub enregistrer()
If IsNumeric([Fait]) Then Exit Sub
ThisWorkbook.Names.Add "Fait", 1, Visible:=False 'nom défini masqué
ThisWorkbook.Save
'------
 

Dranreb

XLDnaute Barbatruc
À mon avis ce n'est pas prudent de se baser sur un tel indicateur, parce que je pense qu'elle doit toujours être exécutée quand on ouvre le classeur modèle mais jamais quand on ouvre un classeur qui en est issu. C'est pourquoi je pense que le mieux ce serait encore que la macro n'y soit tout simplement pas, mais dans un troisième et affectée à une commande personnalisée du ruban.
 

Dranreb

XLDnaute Barbatruc
Alors je ne comprend vraiment pas à quoi ça sert.
Ne créerait il pas des …xlsx.xlsm par hasard ?
De toute façon je n'utilise jamais Application.FileDialog(msoFileDialogSaveAs).
Je préfère ChNomF = GetSaveAsFilename( … et contrôler moi même l'enregistrement pour être sûr qu'il est fait comme je veux.
 

Discussions similaires

Réponses
3
Affichages
274

Statistiques des forums

Discussions
311 725
Messages
2 081 939
Membres
101 844
dernier inscrit
pktla