[VBAEx]Enreg. un onglet dans fichier à part ?
Résolu
lml-mike
Messages postés
455
Date d'inscription
Statut
Contributeur
Dernière intervention
-
lml-mike Messages postés 455 Date d'inscription Statut Contributeur Dernière intervention -
lml-mike Messages postés 455 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerais créer un bouton qui enregistre un onglet de mon classeur (qui s'appelle "Facture") dans un fichier à part, avec si possible les propriétés suivantes :
- Quadrillage désactivés
- Boutons VBA sur mon onglet désactivés/supprimés (si c'est pas possible c'est pas grave)
___________________________
Le fichier est enregistré avec le nom d'une cellule :
ActiveSheet.SaveAs Filename:="C:\Factures\" & "Facture_" & Range("E2").Value
Cette propriété fonctionne, mais elle sauvegarde l'ensemble de mon classeur, qui est plutôt lourd ^^
Quelqu'un a une idée ?
Merci beaucoup pour votre aide !
Mike.
J'aimerais créer un bouton qui enregistre un onglet de mon classeur (qui s'appelle "Facture") dans un fichier à part, avec si possible les propriétés suivantes :
- Quadrillage désactivés
- Boutons VBA sur mon onglet désactivés/supprimés (si c'est pas possible c'est pas grave)
___________________________
Le fichier est enregistré avec le nom d'une cellule :
ActiveSheet.SaveAs Filename:="C:\Factures\" & "Facture_" & Range("E2").Value
Cette propriété fonctionne, mais elle sauvegarde l'ensemble de mon classeur, qui est plutôt lourd ^^
Quelqu'un a une idée ?
Merci beaucoup pour votre aide !
Mike.
A voir également:
- [VBAEx]Enreg. un onglet dans fichier à part ?
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
10 réponses
Re-,
Pour les Boutons de commande, on va faire ainsi :
Par contre, le fait que tes TextBoxs ne préservent pas leur valeur, je ne le comprends pas, lorsque je fais des essais, ceux-ci ne se vident pas....
Comment les remplis-tu?
@ te relire
Pour les Boutons de commande, on va faire ainsi :
Sub Mike3() Dim Shp As Shape Sheets("Facture").Copy ActiveWindow.DisplayGridlines = False With ActiveWorkbook For Each Shp In .Sheets(1).Shapes If Shp.Name Like "CommandButton*" Then Shp.Delete Next Shp .SaveAs Filename:="C:\Factures\" & "Facture_" & Range("E2").Value & ".xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled End With End Sub
Par contre, le fait que tes TextBoxs ne préservent pas leur valeur, je ne le comprends pas, lorsque je fais des essais, ceux-ci ne se vident pas....
Comment les remplis-tu?
@ te relire
Bonjour,
Essaie ce code :
Nota, si dans ta cellule E2, tu as déjà l'extension ".xls", tu peux l'enlever du code...
Bonne journée
Essaie ce code :
Sub Mike() Dim Shp As Shape Sheets("Facture").Copy ActiveWindow.DisplayGridlines = False With ActiveWorkbook For Each Shp In .Sheets(1).Shapes Shp.Delete Next Shp .SaveAs Filename:="C:\Factures\" & "Facture_" & Range("E2").Value & ".xls" End With End Sub
Nota, si dans ta cellule E2, tu as déjà l'extension ".xls", tu peux l'enlever du code...
Bonne journée
Salut,
Merci de te donner la peine de m'aider :-)
Malheureusement en utilisant ta solution je me retrouve confronté à un problème auquel je m'attendais pas :
http://www.noelshack.com/
___________________
En temps normal, je t'aurais simplement demandé comment enlevé ce message d'erreur...
Le problème, c'est que j'ai quelques champs dans la facture qui sont composés de Label, et de Textbox :
http://www.noelshack.com/
Donc en gros, je suis obligé de les conserver...
Tu aurais une idée pour contourner ce problème ?
Merci encore !
Merci de te donner la peine de m'aider :-)
Malheureusement en utilisant ta solution je me retrouve confronté à un problème auquel je m'attendais pas :
http://www.noelshack.com/
___________________
En temps normal, je t'aurais simplement demandé comment enlevé ce message d'erreur...
Le problème, c'est que j'ai quelques champs dans la facture qui sont composés de Label, et de Textbox :
http://www.noelshack.com/
Donc en gros, je suis obligé de les conserver...
Tu aurais une idée pour contourner ce problème ?
Merci encore !
Re-,
Pour le 2ème problème, le plus simple :
- Tu fais un clic droit sur les boutons que tu ne veux pas copier (en étant passé en mode création, en appuyant sur le 1er bouton de la barre d'outils "Contrôles")
- Format de l'image
- Onglet "Propriétés"
- et tu sélectionnes "Ne pas déplacer ou dimensionner avec les cellules"
Ainsi, à chaque copie, les boutons ne vont pas suivre...
Par contre, pour le 1er message, n'étant pas anglophile confirmé, je suppose que tu es sous Excel 2007??
@ te relire
Pour le 2ème problème, le plus simple :
- Tu fais un clic droit sur les boutons que tu ne veux pas copier (en étant passé en mode création, en appuyant sur le 1er bouton de la barre d'outils "Contrôles")
- Format de l'image
- Onglet "Propriétés"
- et tu sélectionnes "Ne pas déplacer ou dimensionner avec les cellules"
Ainsi, à chaque copie, les boutons ne vont pas suivre...
Par contre, pour le 1er message, n'étant pas anglophile confirmé, je suppose que tu es sous Excel 2007??
@ te relire
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je suis sous Excel 2007, mais je travaille a Cambridge en stage, c'est pour ça que c'est en anglais ^_^
je te fais la traduction :
"Les propriétés suivantes ne peuvent pas être sauvées dans un Classeur libre de toute macro :
* Projet VB.
Pour le sauver avec ces propriétés, cliquez sur No, et ensuite choisissez un format qui accepte l'activation des macros dans le choix du type du fichier.
Pour continuer a sauver le fichier sans aucune macro, cliquez sur Yes"
En gros, il sauvegarde par défaut en désactivant les macros, il doit y avoir une propriété VB pour les activer, non ?
Merci :)
je te fais la traduction :
"Les propriétés suivantes ne peuvent pas être sauvées dans un Classeur libre de toute macro :
* Projet VB.
Pour le sauver avec ces propriétés, cliquez sur No, et ensuite choisissez un format qui accepte l'activation des macros dans le choix du type du fichier.
Pour continuer a sauver le fichier sans aucune macro, cliquez sur Yes"
En gros, il sauvegarde par défaut en désactivant les macros, il doit y avoir une propriété VB pour les activer, non ?
Merci :)
Re-,
sous 2007, essaie ainsi :
N'oublie pas de déterminer les propriétés de tes boutons, comme expliqué supra
Bon courage
sous 2007, essaie ainsi :
Sub Mike() Sheets("Facture").Copy ActiveWindow.DisplayGridlines = False With ActiveWorkbook .SaveAs Filename:= "C:\Factures\" & "Facture_" & Range("E2").Value & ".xlsm", _ FileFormat:= xlOpenXMLWorkbookMacroEnabled End With End Sub
N'oublie pas de déterminer les propriétés de tes boutons, comme expliqué supra
Bon courage
On y est presque :D
Les boutons sont conservés avec les codes, mais la valeurs des textboxs n'est pas conservée.
De plus j'ai rigoureusement vérifié les propriétés comme tu me l'as conseillé, mais que je mette "Ne pas déplacer ou dimensionner avec les cellules" ou non, les boutons sont quand même conservés dans les deux cas.
Peut-être ai-je fait une erreur quelque part ?
Les boutons sont conservés avec les codes, mais la valeurs des textboxs n'est pas conservée.
De plus j'ai rigoureusement vérifié les propriétés comme tu me l'as conseillé, mais que je mette "Ne pas déplacer ou dimensionner avec les cellules" ou non, les boutons sont quand même conservés dans les deux cas.
Peut-être ai-je fait une erreur quelque part ?
Je les remplie via un autre bouton :-)
Il y a 4 boutons : 1 pour la saisie, 1 pour la sauvegarde, 1 pour l'impression et le dernier pour la réinitialisation.
Celui pour la saisie (qui s'appelle saisie) saisie les textbox nommées Nom, Adresse, CP, Ville et téléphone.
Celui pour l'enregistrement c'est celui que nous sommes en train de faire,
Celui pour l'impression est un tout bête ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Celui pour la réinitialisation ajoute au numéro de facture un +1 et reinitialise les textbox.
Je remplie donc les textbox avec leur propriété .value
_____________________________
on en est donc à :
_______________________________
Donc ici si je laisse la boucle for each, je n'ai plus aucun contrôle ActiveX, cependant si je le met en comment, j'ai tous mes contrôles (même les boutons que je veux pas) mais je n'ai plus les valeurs dans mes textboxs : "Nom, "Adresse", "CP", "Ville" et "téléphone".
Peut etre que c'est parce qu'ils sont en ActiveX ?
Il y a 4 boutons : 1 pour la saisie, 1 pour la sauvegarde, 1 pour l'impression et le dernier pour la réinitialisation.
Celui pour la saisie (qui s'appelle saisie) saisie les textbox nommées Nom, Adresse, CP, Ville et téléphone.
Celui pour l'enregistrement c'est celui que nous sommes en train de faire,
Celui pour l'impression est un tout bête ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Celui pour la réinitialisation ajoute au numéro de facture un +1 et reinitialise les textbox.
Je remplie donc les textbox avec leur propriété .value
_____________________________
on en est donc à :
Private Sub Enregistrer_Click() Dim Shp As Shape Sheets("Facture").Copy ActiveWindow.DisplayGridlines = False With ActiveWorkbook ' tous les boutons de la feuille doivent sauter, sauf les labels et les textboxs For Each Shp In .Sheets(1).Shapes 'Ici mes boutons ont des noms précis, peut-on les identifier comme ayant la propriété de bouton ? Shp.Delete Next Shp .SaveAs Filename:="C:\Factures\" & "Facture_" & Nom.Value & "_" & Range("E2").Value & ".xlsm", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled End With Enregistrer.Enabled = False Imprimer.Enabled = True End Sub
_______________________________
Donc ici si je laisse la boucle for each, je n'ai plus aucun contrôle ActiveX, cependant si je le met en comment, j'ai tous mes contrôles (même les boutons que je veux pas) mais je n'ai plus les valeurs dans mes textboxs : "Nom, "Adresse", "CP", "Ville" et "téléphone".
Peut etre que c'est parce qu'ils sont en ActiveX ?
Re-,
Pour les boutons, essaie :
Pour la perte d'infos des TextBoxs, je ne vois pas trop...
Es-tu obligé d'utiliser ce type d'objets?
Une simple cellule ne suffirait pas?
@ te relire
Pour les boutons, essaie :
For Each Shp In .Sheets(1).Shapes If Shp.OLEFormat.progID = "Forms.CommandButton.1" Then Shp.Delete Next Shp
Pour la perte d'infos des TextBoxs, je ne vois pas trop...
Es-tu obligé d'utiliser ce type d'objets?
Une simple cellule ne suffirait pas?
@ te relire
If Shp.OLEFormat.progID = "Forms.CommandButton.1" Then Shp.Delete
"L'objet ne supporte pas cette propriété ou cette méthode"
Ca ne marche pas pour moi.
_____________________________
Concernant les textbox, c'est pour le cas ou la facture n'est pas nominative, dans ce cas tous les labels et les textboxs disparaissent de la feuille, donc j'en ai plutôt besoin ...
Je vais regarder sur un autre forum pour cette histoire de contenu non retranscrit...
P.S.: on peut peut-être faire quelque chose avec la propriété controls non ? Je ne m'y connais pas trop mais je l'utilise pour mes formulaires en mettant du contenu dans controls.tag et en le récupérant, je dis ça en l'air hein ^_^
"L'objet ne supporte pas cette propriété ou cette méthode"
Ca ne marche pas pour moi.
_____________________________
Concernant les textbox, c'est pour le cas ou la facture n'est pas nominative, dans ce cas tous les labels et les textboxs disparaissent de la feuille, donc j'en ai plutôt besoin ...
Je vais regarder sur un autre forum pour cette histoire de contenu non retranscrit...
P.S.: on peut peut-être faire quelque chose avec la propriété controls non ? Je ne m'y connais pas trop mais je l'utilise pour mes formulaires en mettant du contenu dans controls.tag et en le récupérant, je dis ça en l'air hein ^_^