[VBAEx]Enreg. un onglet dans fichier à part ?

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - Modifié par lml-mike le 31/08/2010 à 11:31
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 1 sept. 2010 à 16:53
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.
A voir également:

10 réponses

cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
31 août 2010 à 14:12
Re-,

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
1
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
31 août 2010 à 12:03
Bonjour,

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
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 août 2010 à 12:21
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 !
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
31 août 2010 à 12:28
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
0

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

Posez votre question
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 août 2010 à 12:35
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 :)
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
31 août 2010 à 12:41
Re-,

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
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 août 2010 à 13:42
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 ?
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 août 2010 à 15:14
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 à :

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 ?
0
cousinhub29 Messages postés 881 Date d'inscription mardi 10 août 2010 Statut Membre Dernière intervention 16 avril 2024 333
31 août 2010 à 15:21
Re-,

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
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
31 août 2010 à 15:28
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 ^_^
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
1 sept. 2010 à 16:53
J'ai pu régler le problème en utilisant ta propriété :

If Shp.Name Like "CommandButton*" Then Shp.Delete

et en la remplaçant par :

If Shp.Name Like "Bouton_*" Then Shp.Delete

Comme ça, j'ai renommé chaque bouton en bouton_*nom* et le tour est joué !

Merci infiniment, c'était pas facile !!
0