XL 2019 Création bouton avec macro enregistrer sous

Mel46

XLDnaute Nouveau
Bonjour,

J'aimerais avoir un peu d'aide afin de trouver la macro nécessaire pour enregistrer mon formulaire de soumission (modèle), avec un nom précis + les données d'une cellule précise, vers un emplacement précis! hihihihi

Je voudrais que cette action soit envoyée en cliquant sur un bouton formulaire active X.

Je n'y connais absolument rien en VBA! Sauf ce que j'ai lu ici...

Merci
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Mel46 (Bienvenue sur le forum)
Maintenant que tu as posé ta question, tu peux glisser ton regard tout en bas de la page
Et voir si tu ne trouves pas de quoi t'inspirer dans les discussions similaires.
Si tu ne trouves rien de probant, il reste le moteur de recherche interne du forum.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Mel46
Tu as suivi mon dernier conseil
Si oui, tu as du lire cette discussion (qui appartient aux discussions similaires)
 

Mel46

XLDnaute Nouveau
Bonsoir le fil,

Mel46
Tu as suivi mon dernier conseil
Si oui, tu as du lire cette discussion (qui appartient aux discussions similaires)
Oui, je suis le nez dedans en ce moment, mais je ne trouve pas la section de la formule pour faire enregistrer-sous sans impression
 

Staple1600

XLDnaute Barbatruc
Re

Voici un petit exemple
(Insères un CommanButton, contrôle ActiveX <= Onglet Développeur/Insérer/Bouton de Commande)
Puis clique sur Mode Création et clic-droit sur le bouton => Visualiser le code
Colle alors le code VBA ci-dessous
VB:
Private Sub CommandButton1_Click()
Dim NOM_PRECIS As String
Dim vEMPLACLEMENT As String
Dim vCELLULE As Range
NOM_PRECIS = "VALEUR_DE_TEST_"
vEMPLACEMENT = ThisWorkbook.Path & "\"
Set vCELLULE = Range("A1")
vCELLULE = vCELLULE.Address(0, 0)
ActiveWorkbook.SaveAs vEMPLACEMENT & NOM_PRECIS & vCELLULE & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
 

patricklopez66

XLDnaute Occasionnel
Bonjour Stapple1600,
j'ai testé ta macro qui fonctionne très bien, mais serait il possible de l'adapter pour n'exporter que certaines feuilles (feuil1, feuil2, feuil5, etc) et non tout le classeur au format xlsx, c'est à dire en vidant le code du workbook et supprimant les modules

un grand merci
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour
un simple .copy d'un array de sheets a pour effet de créer un new classeur avec les sheets en question
ya plus ka
met les noms de sheets que tu veux dans l'array
VB:
Sub savearraysheet()
    Dim NOM_PRECIS$, vEMPLACLEMENT$, Nom$, messheets
    NOM_PRECIS = "VALEUR_DE_TEST_"
    vEMPLACEMENT = ThisWorkbook.Path & "\"
    messheets = Array("Feuil1", "Feuil2", "Feuil5")
    Sheets(messheets).Copy    ' a pour effet de copier les sheets dans un new classeur
    Nom = NOM_PRECIS & Sheets(1).Range("A1").Text
    With ActiveWorkbook
        Application.DisplayAlerts = False    'pour l’écrasement si déjà existant
        .SaveAs vEMPLACEMENT & Nom & ".xlsx"
        .Close
    End With
End Sub
si tu veux la boite de dialogue dis le
 

patricklopez66

XLDnaute Occasionnel
Çà alors, je n'ai pas osé te le demander car je ne voulais pas abuser, mais tu as exaucé mon vœu

non merci pas besoin de boite dialogue, j'ai un command bouton

voici mon code, serait ce trop te demander de l'adapter avec ton Sub savearraysheet()

Private Sub CommandButton5_Click()
Application.EnableEvents = False
Application.DisplayAlerts = False
If Sheets("V3").Range("G27") = "" Then
If MsgBox("Vous devez préciser le nom du client !", vbOKOnly + vbInformation, "vous informe") = vbAbort Then Exit Sub
Else
Dim NOM_PRECIS As String
Dim vEMPLACEMENT As String
NOM_PRECIS = Sheets("V3").Range("G27").Value
vEMPLACEMENT = ThisWorkbook.Path & "\"
ActiveWorkbook.SaveAs vEMPLACEMENT & NOM_PRECIS & "_" & Format(Now, "dd-mm-yyyy"), FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close
End If
Application.DisplayAlerts = True
End Sub

merci
 

patricktoulon

XLDnaute Barbatruc
re
VB:
Private Sub CommandButton5_Click()
    Dim NOM_PRECIS$, vEMPLACEMENT$, messheets
    Application.EnableEvents = False
    messheets = Array("Feuil1", "Feuil2", "Feuil5")    'mettre les noms de sheets que tu veux ici
    
    If Sheets("V3").Range("G27") = "" Then
        If MsgBox("Vous devez préciser le nom du client !", vbOKOnly + vbInformation, "Patrick Lopez vous informe") = vbAbort Then Exit Sub
    Else
        NOM_PRECIS = Sheets("V3").Range("G27").Value & "_" & Format(Now, "dd-mm-yyyy") & ".xlsx"
        vEMPLACEMENT = ThisWorkbook.Path & "\"
        Sheets(messheets).Copy    ' a pour effet de copier les sheets dans un new classeur
        Application.DisplayAlerts = False
        With ActiveWorkbook
            .SaveAs vEMPLACEMENT & NOM_PRECIS
            .Close
        End With
    End If
    Application.DisplayAlerts = True
End Sub
 

patricklopez66

XLDnaute Occasionnel
c'est super il enregistre bien les feuilles désignées, le classeur xlsm reste ouvert et le classeur xlsx se ferme
peut on fermer aussi le xlsm sans fermer Excel ?

Précision : à l'ouverture le xlsx, me signale une liaison avec le classeur xlsm ? je crois que cela vient du mot de passe chripté à l'ouverture du classeur !
Précision : à l'ouverture le Xlsm ne s'ouvre plus sur la bonne feuille 'V3" comme si il avait été fermé sans tenir compte de before close ni de workbook open
un grand merci encore
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
VB:
Private Sub CommandButton5_Click()
    Dim NOM_PRECIS$, vEMPLACEMENT$, messheets
    Application.EnableEvents = False
    messheets = Array("Feuil1", "Feuil2", "Feuil5")    'mettre les noms de sheets que tu veux ici
    
    If Sheets("V3").Range("G27") = "" Then
        If MsgBox("Vous devez préciser le nom du client !", vbOKOnly + vbInformation, "Patrick Lopez vous informe") = vbAbort Then Exit Sub
    Else
        NOM_PRECIS = Sheets("V3").Range("G27").Value & "_" & Format(Now, "dd-mm-yyyy") & ".xlsx"
        vEMPLACEMENT = ThisWorkbook.Path & "\"
        Sheets(messheets).Copy    ' a pour effet de copier les sheets dans un new classeur
        Application.DisplayAlerts = False
        With ActiveWorkbook
            .SaveAs vEMPLACEMENT & NOM_PRECIS
            .Close
        End With
    End If
    'peut on fermer aussi le xlsm <<!!sans fermer Excel ?>>!!
'ben...
ThisWorkbook.Close
Application.DisplayAlerts = True
End Sub
;)
 

patricklopez66

XLDnaute Occasionnel
ok tout se ferme c'est nickel sauf que à l'ouverture le Xlsm ne s'ouvre plus sur la bonne feuille 'V3" comme si il avait été fermé sans tenir compte de before close ni de workbook open , peut être finir avec
ThisWorkbook.saved ?

Saurais tu pourquoi le xlsx me demande encore d'activer les macros alors qu'on a vidé tout le contenu vba ?
 

patricktoulon

XLDnaute Barbatruc
JE n'en ai aucune idée chez moi ca ne le fait pas
peut etre que dans ton vrai fichier il y a des formules en relation avec des feuilles qui ne sont pas prises dans l'array des noms

tu pourrais faire un .value=.value a tout tes sheets usedrange sur la copy avant de sauver ;)
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, patricklopez66, patricktoulon

=>patricklopez66
Bonjour Stapple1600,
j'ai testé ta macro qui fonctionne très bien, mais serait il possible de l'adapter pour n'exporter que certaines feuilles
Oui, c'est possible mais on ne m'en pas laissé le temps ;)
Le principal c'est que ta question soit solutionnée
(Même si l'usage c'est de créer sa propre discussion pour poser sa question plutôt que de triple guillemets """squatter """ un fil initié par un autre membre)
 

patricklopez66

XLDnaute Occasionnel
Bonsoir le fil

ok je créerais ma discussion la prochaine fois, merci pour tes conseils Stapple ;)

Pour info, a l'ouverture la copie xlsx me demande de mettre à jour un lien, alors qu'il y en a ni sur le xlsm ni sur le xlsx

j'ai trouvé la solution radicale avec :
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever que j'ai placé et qui a l'air de fonctionner :

Private Sub CommandButton5_Click()
Dim NOM_PRECIS$, vEMPLACEMENT$, messheets
Application.EnableEvents = False
messheets = Array("Feuil1", "Feuil2", "Feuil5") 'mettre les noms de sheets que tu veux ici
;)
If Sheets("V3").Range("G27") = "" Then
If MsgBox("Vous devez préciser le nom du client !", vbOKOnly + vbInformation, "vous informe") = vbAbort Then Exit Sub
Else
NOM_PRECIS = Sheets("V3").Range("G27").Value & "_" & Format(Now, "dd-mm-yyyy") & ".xlsx"
vEMPLACEMENT = ThisWorkbook.Path & "\"
Sheets(messheets).Copy ' a pour effet de copier les sheets dans un new classeur
ActiveWorkbook.UpdateLinks = xlUpdateLinksNever
Application.DisplayAlerts = False
With ActiveWorkbook
.SaveAs vEMPLACEMENT & NOM_PRECIS
.Close
End With
End If
'peut on fermer aussi le xlsm <<!!sans fermer Excel ?>>!!
'ben...
ThisWorkbook.Close
Application.DisplayAlerts = True
End Sub



Bonne soirée à tous et merci encore
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas