Créer bouton AActive X macro Enregistrer sous une feuillet de mon classeur.

Fermé
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023 - 7 sept. 2021 à 16:00
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023 - 4 janv. 2022 à 00:16
Bonjour à tous

J ai crée une sorte d'éditeur de factures, de contrats, de devis pour ma société.
En remplissant les données sur mon feuillet 1, les contrats, les devis, les factures sont automatiquement remplis.

J ai réussi sur mon feuillet 1 (qui est donc mon éditeur) à créer des boutons pour imprimer les différents documents se trouvant dans des feuillets différents.

J ai donc crée 3 boutons.
Un qui me permet d'imprimer en pdf mon feuillet 2 nommé "CONTRAT"
Un qui me permet d'imprimer en pdf mon feuillet 3 nommé "FACTURE"
Un qui me permet d'imprimer en pdf mon feuillet 4 nommé "DEVIS"

Jusqu'à là tout allaient pour le mieux dans le meilleur des mondes.

Mais voilà, je voudrais à présent créer le même style de bouton qui me permette d'enregistrer au format excel.
En gros un bouton qui, lorsque je clique dessus me permette d'ouvrir une boite de dialogue me proposant la destination d'enregistrement de mon fichier.
(cet éditeur sera partagé avec des collègues qui n'ont pas tous le même dossier de destination. D'où le fait de laisser le choix).
A noter aussi que je souhaiterais que mon fichier prenne le nom indiqué dans une cellule.

Si quelqu'un sait faire ce genre de chose merci de m'indiquer le code adequat.

Je précise que j'ai découvert les macros il y a 3 jours alors ne soyez pas trop violent avec moi.

A bientôt
A voir également:

18 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
8 sept. 2021 à 11:24
Bonjour,

comme ceci:

Option Explicit
Sub Save()
Dim nom As String
nom = Range("B69")
ActiveSheet.Copy
  Application.Dialogs(xlDialogSaveAs).Show nom
  ActiveWorkbook.Close
End Sub



1
Le Pingou Messages postés 12116 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 442
7 sept. 2021 à 21:42
Bonjour,
Vous avez donc un classeur avec combien de feuilles ?
Qu'elles feuilles voulez-vous enregistrer et ou se trouve le classeur contenant les enregistrements?

0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 01:02
Bonjour

J ai donc 4 feuilles.
1 avec l éditeur, 1 avec le contrat, 1 avec la facture et 1 avec le devis.

Sur la feuille de l'éditeur, je veux place 3 boutons.
1 qui me permet "d'enregistrer sous" au format excel le contrat
1 qui me permet "d'enregistrer sous" au format excel la facture
1 qui me permet "d'enregistrer sous" au format excel le devis

Je ne veux pas enregistrer les 3 en même temps.

Je veux qu'une boite de dialogue s'ouvre et me laisse le choix de l'emplacement sur mon disque dur.

Et aussi je veux que le fichier excel enregistré prennent le nom mentionné dans une cellule.

Je sais pas si j ai répondu à vos questions.
En tout cas merci de l intérêt que vous portez à mon problème.
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
Modifié le 8 sept. 2021 à 01:41
Peut être en complément pour mieux comprendre mon probleme :
Voici le code que j ai rentré et qui fonctionne à merveille. Il me permet d''imprimer directement mon feuillet (ici mon feuillet "contrat") en PDF.

Private Sub CommandButton1_Click()

Sheets("CONTRAT").Select
Dim nom As String
nom = Range("B69")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True

End Sub

Je souhaiterais le même code mais qui ouvre une boite de dialogue me permettant d'enregistrer au format d'Excel.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 14:34
Bonjour
Et merci Le Pivert

Le code fonctionne et c'est ce que je recherche à quelques détails près.
- Il se lance bien quand je le teste (F5) mais pas quand j'appuie sur le bouton.
- Il me propose de sauvegarder le feuillet principal alors que je voudrais enregistrer les trois autres feuillets à partir du premier. (1 bouton pour feuillet 2, 1 bouton pour feuillet 3 et 1 bouton pour feuillet 4)
- Je voudrais enregistrer au format Excel (prenant en charge les macro)
- Enfin le feuillet qu'on me propose d enregistrer, une fois enregistré s'ouvre en plus de mon classeur alors que je ne voudrait pas l'ouvrir.

En tout cas merci.
Si vous avez la solution pour compléter le code, je suis preneur.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
8 sept. 2021 à 15:05
Il me propose de sauvegarder le feuillet principal

mettre cela au debut de ta macro

Sheets("CONTRAT").Select 'adapter nom de la feuille


Je voudrais enregistrer au format Excel (prenant en charge les macro)

en bas de la boite de dialogue il y a un menu déroulant avec le choix de l'enregistrement

Enfin le feuillet qu'on me propose d enregistrer, une fois enregistré s'ouvre en plus de mon classeur alors que je ne voudrait pas l'ouvrir.

c'est dans ce code

ActiveWorkbook.Close

sinon fermer manuellement

@+
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
8 sept. 2021 à 15:22
Super ! merci

Par contre la macro n'est pas lancée par le bouton.
Je pensais qu'il était possible de lui attribuer un .xlsm dans la macro

Si vous avez une idée...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729 > Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
Modifié le 8 sept. 2021 à 15:46
Par contre la macro n'est pas lancée par le bouton.

rien ne t'empêche de la mettre dans un bouton

Private Sub CommandButton2_Click() 
Dim nom As String
 Sheets("CONTRAT").Select 'adapter nom de la feuille
nom = Range("B69")
ActiveSheet.Copy
  Application.Dialogs(xlDialogSaveAs).Show nom
  ActiveWorkbook.Close
End Sub
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023 > cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024
8 sept. 2021 à 16:11
Merci !

Un autre petit détail, je sais pas si c'est possible.
Comme prévu, je lance la boite de dialogue depuis mon feuillet 1 (l'éditeur) mais si j'enregistre par exemple ma facture lorsque j'ai fini ma sauvegarde, je me retrouve dans mon classeur sur le feuillet facture à l'écran alors que je souhaiterais rester sur le feuillet 1 (Editeur)

Tu crois que c'est possible de faire ça ?
En tout cas merci car c'est déjà génial.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729 > Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 16:15
a la fin de ta macro tu mets ceci:

Private Sub CommandButton2_Click() 
Dim nom As String
 Sheets("CONTRAT").Select 'adapter nom de la feuille
nom = Range("B69")
ActiveSheet.Copy
  Application.Dialogs(xlDialogSaveAs).Show nom
  ActiveWorkbook.Close
 Sheets("Editeur").Select
End Sub


Voilà c'est simple!

@+
0
Le Pingou Messages postés 12116 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 442
Modifié le 8 sept. 2021 à 15:17
Bonjour,
Alors c'est quoi qui ne convient pas avec la proposition de Le Pivert (salutations)...!

Vous dite : Je ne veux pas enregistrer les 3 en même temps.
Donc chaque feuille et enregistrée séparément...
La première est dans un classeur... que faites- vous pour la deuxième respectivement la troisième…. Vont-elles dans le même classeur que la première ou faut-il chaque fois un nouveau classeur ?


0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 15:39
En fait j'ai mon fichier excel que j'ai nommé "Editeur"
Ce fichier est donc un classeur avec 4 feuillets.
Le premier, je ne veut pas y toucher, il reste dans le classeur de base puisque c'est mon editeur qui me pemet d éditer les factures, contrats et devis.

Je veux juste sauvegarder les feuillets contrats, factures et devis dans des dossiers différents sur mon disque dur.
Par exemple un dossier "factures", un dossier "contrats" et un dossier "devis".
(je ne veux pas nommer la destination de l enregistrement dans la macro car je veux que chaque utilisateur puisse l'enregistrer où il veut)
Du coup,je voudrais que dans ces dossiers ne se trouvent que des classeurs avec un seul feuillet
Par exemple dans le dossier "factures" que les factures au format excel.

Donc si je comprends bien votre question ". Vont-elles dans le même classeur que la première ou faut-il chaque fois un nouveau classeur ? "
Oui, il faut un nouveau classeur à chaque fois.

Je ne sais pas si je clair
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 15:06
Ce qui ne fonctionne pas, c'est ce que j'ai décris dans mon précédent message.

- Il se lance bien quand je le teste (F5) mais pas quand j'appuie sur le bouton.
- Il me propose de sauvegarder le feuillet principal alors que je voudrais enregistrer les trois autres feuillets à partir du premier. (1 bouton pour feuillet 2, 1 bouton pour feuillet 3 et 1 bouton pour feuillet 4)
- Je voudrais enregistrer au format Excel (prenant en charge les macro) alors qu'il me propose de l'enregistrer au formet classique
- Enfin le feuillet qu'on me propose d enregistrer, une fois enregistré s'ouvre en plus de mon classeur alors que je ne voudrait pas l'ouvrir.
0
Le Pingou Messages postés 12116 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 442
8 sept. 2021 à 16:08
Bonjour,
Eh bien voici un exemple: https://www.cjoint.com/c/KIiogIRHwmn
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 16:37
Oui c'est bien ça merci.
Par contre pour un résultat similaire deux codes complétement différents.

Quelle est la différence avec le code de Pivert ?
0
Le Pingou Messages postés 12116 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 4 juillet 2024 1 442
8 sept. 2021 à 16:45
Bonjour,
C'est une autre manière de faire, en l'occurrence je reprends le premier code de Le Pivert , légèrement modifier(salutations) et je lui ajoute un argument (pour nom de la feuille) et vous avez les 3 codes de départ pour chacun des boutons

0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
8 sept. 2021 à 22:52
ok
merci, je commence a y voir plus clair mais bon je débute, la route est encore longue.
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
4 oct. 2021 à 12:02
Salut

Je reviens vers vous car je souhaiterais créer un bouton pour enregistrer non pas un feuillet spécifique mais l'ensemble de mon classeur au format excel avec les macro.

J'ai ce code pour enregistrer uniquement le feuillet "CONTRAT"
Private Sub CommandButton2_Click()
Dim nom As String
Sheets("CONTRAT").Select
nom = Range("B26")
ActiveSheet.Copy
Application.Dialogs(xlDialogSaveAs).Show nom, 52 '
ActiveWorkbook.Close
Sheets("EDITEUR").Select
End Sub



J'imagine qu'il faut changer "CONTRAT" pour mentionner que je veux que cela s'applique non pas au feuillet contrat mais à l'ensemble du classeur.

Une idée ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
4 oct. 2021 à 12:52
Tu trouveras la réponse à ta question ici:

https://excel.developpez.com/faq/?page=Sauvegardes

@+ Le Pivert
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
4 oct. 2021 à 16:26
Bonjour et merci pour ta réponse.

En effet, j'avais vu cette faq mais ça ne fonctionne pas chez moi. Je ne comprends pas vraiment pourquoi.

C'est pour ça que je me demandais si ce n'étais pas possible d'adapter les codes que tu m'avais conseillés.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
4 oct. 2021 à 18:12
C'est tout simple:

Private Sub CommandButton2_Click()
Dim nom As String
 nom = Range("B26")
Application.Dialogs(xlDialogSaveAs).Show nom, 52 '
End Sub


voilà

@+ Le Pivert
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
4 oct. 2021 à 23:41
Merci !

C'est parfait
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
23 déc. 2021 à 15:38
Bonjour tout le monde,

J'ai un petit souci avec le code pour enregistrer mon feuillet en PDF.
Le code fourni ici même par cs_Le Pivert marche parfaitement (encore merci). Je clique et le document apparait en PDF.
Le problème est que lorsque je fais "enregistrer sous" il enregistre le documents dans le premier dossier qui s'ouvre. Par exemple "mes documents". Or mon problème et que je voudrais choisir un autre dossier. Du coup il m'arrive ne me retrouver avec des fichiers enregistrés à des endroits improbables.
Je ne peux pas spécifier le dossier cible dans le code car ce fichier excel est utilisé par d autres personnes qui n'ont pas le même système de classement sur leur ordi.

Ce qui m'étonne c'est que j'ai pas l'impression qu'il y ait une commande "save as" dans le code fourni. Mais je ne m'y connais vraiment pas.

Si quelqu'un a une idée, je suis preneur.

Bonnes fêtes à tous !

Le code en question ci dessous :



Private Sub CommandButton10_Click()
Sheets("SOLDE").Select
Dim nom As String
nom = Range("F109")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("EDITEUR").Select
End Sub
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
23 déc. 2021 à 16:36
Bonjour,

je t'ai donné la solution ici:

https://forums.commentcamarche.net/forum/affich-37338846-creer-bouton-aactive-x-macro-enregistrer-sous-une-feuillet-de-mon-classeur#28

Sheets("SOLDE").Select
Dim nom As String
nom = Range("F109")
Application.Dialogs(xlDialogSaveAs).Show nom, 57
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("EDITEUR").Select


voilà

@+ Le Pivert
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
3 janv. 2022 à 12:06
Bonjour,
Merci pour ta réponse.

Désolé pour mon temps de réaction mais j essayais de trouver la solution par moi même. Mais bon, je n'y arrive pas.

En fait la commande dont tu fais référence correspond à l'enregistrement du ficher excel.

En fait mon souci vient du fait que lorsque je clique sur le bouton pour enregistrer mon document au format pdf :
le document s'affiche en pdf ( jusque là pas de problème)
Mais lorsque je fais "fichier" puis "enregistrer sous" le document s'enregistre directement dans le premier dossier proposé sans que je valide.

Exemple :
"Fichier" --> "enregistrer sous" la fenêtre de l'explorateur windows s'ouvre et par défaut il me propose de l'enregistrer sous le bureau. Avant même que je valide le document se retrouve enregistré sur le bureau.
Or, je souhaiterais l'enregistrer par exemple dans "mes documents". Du coup, je vais l'enregistrer dans "mes documents". Il s'enregistre bien dans "mes documents" mais il se retrouve également enregistré sur "le bureau"
Du coup, je me retrouve avec des fichiers enregistrés un peu partout.

Peut être que le problème vient de la mention "save as" dans la commande ci dessus.
Peut être qu'il faut une commande qui affiche juste le pdf et moi par la suite je vais l'enregistrer manuellement.

A bientôt
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
3 janv. 2022 à 14:12
Bonjour,

Voir si il n' y a pas une macro dans ThisWorkbook qui se déclenche lors de l'enregistrement?

Bonne Année

@+ Le Pivert
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
3 janv. 2022 à 14:51
Re,

J ai regardé et non, il n' y a pas de macro dans ThisWorkbook.

Bonne année et meilleurs vœux également
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
3 janv. 2022 à 15:10
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
3 janv. 2022 à 16:55
Re,

Ça ne correspond pas vraiment à mon problème car cette article montre comment créer un chemin par défaut pour enregistrer dans un dossier spécifique.

Or, comme l'outil que je suis en train de créer va être collaboratif, mes collègues ne vont pas tous sauvegarder les fichiers dans le même dossier.

C'est pourquoi je voulais que chacun puisse choisir le dossier dans le lequel il veut sauvegarder.


En fait, d'après ce que j'ai pu comprendre et que je viens de réaliser..
En appliquant ce code :


Private Sub CommandButton14_Click()
Sheets("SOLDE").Select
Dim nom As String
nom = Range("F109")
Application.Dialogs(xlDialogSaveAs).Show nom, 57
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("EDITEUR").Select
End Sub


La fenêtre (boite de dialogue) "enregistrer sous" s'ouvre sans prévisualisation du PDF et là pour le coup pas d'enregistrement automatique c'est bien moi qui choisis l'emplacement. Une fois que je valide ouverture du PDF.
Seul soucis (mais pas très grave), je ne peux pas visualiser le PDF avant enregistrement.

En appliquant le code suivant :

Private Sub CommandButton10_Click()
Sheets("SOLDE").Select
Dim nom As String
nom = Range("F109")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("EDITEUR").Select
End Sub


Le PDF s'affiche à l'écran mais en fait, il s'est déjà enregistré tout seul et il passe outre la commande "Application.Dialogs(xlDialogSaveAs).Show nom, 57" puisque qu'on ne lui demande pas contrairement au code du dessus. Du coup, la boîte de dialogue ne s'ouvre pas. Il zappe cette étape et affiche directement le PDF. En fait dans mes autres post, quand je disait qu'il s'enregistrait tout seul quand je fais "enregistrer sous" c'est faux. C'est juste qu'il s'est déjà enregistré et que le pdf s est ouvert.
Le Pivert, je pense que c'était évident pour toi mais ça ne l'était pas du tout pour moi. D'où mon incompréhension totale.


En fait, je pense que ce qu'il me faut pour prévisualiser le pdf avant d'enregistrer c'est un code qui permet de d'imprimer le feuillet en PDF (sans commande de sauvegarde) pour que je puisse, une fois le pdf crée faire moi même la manip "enregistrer sous"...


Le Pivert ne t'arrache pas les cheveux (ou les plumes).
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 729
3 janv. 2022 à 18:15
Avec ce code tu enregistres et le PDF s'ouvre ensuite:

Option Explicit
Sub save()
Dim nom As String
nom = Range("F109")
Application.Dialogs(xlDialogSaveAs).Show nom, 57
End Sub


@+ Le Pivert avec toute ses plumes
0
Grosnoob31 Messages postés 48 Date d'inscription samedi 25 mai 2019 Statut Membre Dernière intervention 26 avril 2023
4 janv. 2022 à 00:16
Encore merci Le Pivert

Cela ne fonctionne pas chez moi.
Par contre c'est déjà le cas avec ce code.

La boite de dialogue s'ouvre, je choisis mon emplacement et une fois validé, le PDF s'ouvre.

Private Sub CommandButton14_Click()
Sheets("SOLDE").Select
Dim nom As String
nom = Range("F109")
Application.Dialogs(xlDialogSaveAs).Show nom, 57
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=nom _
, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, OpenAfterPublish:=True
Sheets("EDITEUR").Select
End Sub


J'aurais voulu que le PDF s'affiche, histoire de voir si tout est ok et après vérification faire l'enregistrement moi même (Fichier / enregistrer sous...). En gros retirer toutes commandes de sauvegarde du code.

Mais bon avec le code ci dessus c'est déjà super au moins je peux choisir l'emplacement.
0