Question sur Excel et bouton
Salut,
Voila, j'ai un fichier ou j'ai créer des bouton:
- Enregistrer
- Nouveau
- Imprimer
Et je voudrai affecter une macro pour chaque bouton.
Alors, voici les detail de se que je veux faire pour chaque bouton:
- Enregistrer : Donc en cliquant sur ce bouton, je veux que sa m'enregistre le fichier dans un dossier tous en gardant apres le fichier en cour ouvert sans le modifier. J'avais un fichier avec cette commande qui fonctionne bien mais que j'arrive pas a adapter a celui la:
Sub Macro2()
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & (Range("C10").Value)
End SubSauf que moi je veux la personaliser pour que sa donne comme valeur la date de la case D11 mais la mettre a l'envers. C'est a dire, que dans la case D11 il y a par exemple 01.04.2009 (date visible sur le fichier), moi je veux qu'il me créer le fichier "2009.04.01.xls". Si un fichier et deja créer avec cette date, je veux avoiir une allerte pour me le dire.
- Nouveau : Pour celui la, je voudrai que lorsque j'appuis il ma vide par exemple les champ D30, E30, F30 etx... (c'est un exemple, je mettrai les champ que je veux par la suite)
- Imprimer : La tous simplement que ca imprime, la dans mon autre fichier j'ai cette formule:
Sub Macro1()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End SubC'est bon ?
Bonsoir
Merci de passer par Joindre un Fichier pour déposer ton fichier.
Tu peux le zipper ou, s'il est trop lourd, passe par cjoint.com. (500 ko)
Amicalement
Nad
Je viens au nouvelles
https://www.excel-pratique.com/~files/doc/FA000018.xls
Bonsoir
Tu peux créer des boutons à l'aide de la "boite à outils controles" (barre d'outils) et créer le code correspondant à chaque boutons dans la feuille "Factures pièces"
Voir l'exemple joint
Cordialement
Mets bouton sont deja créer
Merci
Bonjour,
Nad m'a demandé de regarder ton pb. Voici déjà une première réponse.
Tes macros Incrémenter, macro1 et 2 se trouvent mal placées dans ton fichier. Suis ces indications pour ta demande aux points 2 et 3 :
- Vas dans VAB par LAT + F11
- Dans THISWORKBOOK, supprime les macros Incrémenter, Macro 1
- Dans le menu, choisis INSERTION / MODULE
- Déplace la macro 2 se trouvant dans THISWORKBOOK vers le module créé.
- Toujours dans ce module mets les deux macros ci-après :
Pour la numérotation de ta facture
Sub IncrementerFacture()
Dim MonChiffre As Variant
MonChiffre = Right(Range("C10"), 6)
MonChiffre = "FA" & Format(MonChiffre + 1, "000000")
Range("C10") = MonChiffre
ThisWorkbook.Save
ThisWorkbook.SaveAs Filename:="c:\Factures\" & (Range("C10").Value)
'Effacer colonne Désignation, colonne Quantité, colonne Prix unitaire H.T., colonne Code T.V.A
Range("B17:F47").ClearContents
'Effacer champ Client
Range("F9:F13").ClearContents
Range("G9").ClearContents
'Effacer champ Mode de règlement
Range("C13:C14").ClearContents
End SubPour Imprimer
Sub Imprimer()
ActiveSheet.PrintOut Copies:=1
End SubAutres questions
- Pourquoi incrémentes tu à l'ouverture et pas après la sauvegarde de ton fichier
- Le répertoire de sauvegarde est C\facture ou c\Boulot et veux-tu mettre FA devant le nom ?
- Si je comprends comment tu fonctionnes, tu sauves ton fichier dans le répertoire de sauvegarde puis tu complètes les données de facture ?
Je vois pour ton point et te tient au courant.
Amicalement
Dan
En faite, je me suis fait mal comprendre. Se fichier que je vous ai passé marche tres bien, c'est un exemple de se que je veux faire sur un autre fichier avec quelque modification d'adaptation que je vous ai mis sur mon post.
[quote]Alors, voici les detail de se que je veux faire pour chaque bouton:
- Enregistrer : Donc en cliquant sur ce bouton, je veux que sa m'enregistre le fichier dans un dossier tous en gardant apres le fichier en cour ouvert sans le modifier. J'avais un fichier avec cette commande qui fonctionne bien mais que j'arrive pas a adapter a celui la:
Code:
Sub Macro2()
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & (Range("C10").Value)
End Sub
Sauf que moi je veux la personaliser pour que sa donne comme valeur la date de la case D11 mais la mettre a l'envers. C'est a dire, que dans la case D11 il y a par exemple 01.04.2009 (date visible sur le fichier), moi je veux qu'il me créer le fichier "2009.04.01.xls". Si un fichier et deja créer avec cette date, je veux avoiir une allerte pour me le dire.
- Nouveau : Pour celui la, je voudrai que lorsque j'appuis il ma vide par exemple les champ D30, E30, F30 etx... (c'est un exemple, je mettrai les champ que je veux par la suite)
- Imprimer : La tous simplement que ca imprime, la dans mon autre fichier j'ai cette formule:
Code:
Sub Macro1()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub J'espere que j'ai reussi a me faire comprendre.
Merci
re,
Ok. Pas besoin de me remettre ton premier post sur ce fil et ton fichier que nous avons déjà (cela alourdit le forum inutilement)
1. Enregistrer
Sub Macro2()
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyy-mm-dd")
End Sub 2. Nouveau
Vois le code Incrémenter que j'ai modifié. Pour supprimer les données D30, E30, F30,...)
Range("D30:F30").clearcontents3. Imprimer
voir mon post précédent.
Dan
Merci, j'ai d'autre question, certaines pour comprendre mieux et d'autre pour amelioré.
- - Quel difference entre:
- ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Et
ActiveSheet.PrintOut Copies:=1
Si je veux effacer des cellule fusionner, genre A20 et A21 quel sera le code pour effacer la case fusionner ?
Sub MacroSave()
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyy.mm.dd")
End Sub
Sub MacroNew()
Range("A20:M29").ClearContents
Range("A15").ClearContents
Range("A33").ClearContents
Range("C15").ClearContents
Range("E15").ClearContents
Range("G15").ClearContents
Range("J11").ClearContents
Range("I9").ClearContents
Range("I10").ClearContents
Range("L11").ClearContents
End SubMerci
re,
1. Différences codes
D'un coté tu sélectionnes toutes les feuilles et tu les imprimes tandis que de l'autre, tu imprimes la feuille active
2. Sauvegarde
Plutôt que sauver le fichier entier pourquoi ne pas sauver la feuille dans un nouveau fichier et de la nommer de la même manière.
Sub MacroSave()
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyy.mm.dd")
End Sub3. Enregistre sous
Pour cela il faut trafiquer les menus d'excel…. Et comme toujours c'est là qu'arrive les problèmes en tout genre.. Donc je ne te conseille pas de faire cela.
4. Impression sans boutons
Pour ne pas imprimer les objets, clique droit sur le bouton, puis choisis Format de Contrôle et sous l'onglet Propriétés, décoche la case "Imprimer l'objet"
5. Ta macro
Sub MacroNew()
Range("A20:M29,A15,A33, C15, E15, G15,J11,I9:I10, L11").ClearContents
End SubPour les cellules fusionnées (à éviter pour les codes), tu mets les deux cellules dans ton code pour être sûr de ne pas avoir un bug.
Dan
Nad-Dan a écrit :1. Différences codes
D'un coté tu sélectionnes toutes les feuilles et tu les imprimes tandis que de l'autre, tu imprimes la feuille active
Ok merci
Et le "Collate:=True" c'est quoi ?
Nad-Dan a écrit :2. Sauvegarde
Plutôt que sauver le fichier entier pourquoi ne pas sauver la feuille dans un nouveau fichier et de la nommer de la même manière.
Sub MacroSave() ThisWorkbook.ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:="c:\Boulot" & Format(Range("D11"), "yyyy.mm.dd") End Sub
C'est a dire ?
Nad-Dan a écrit :3. Enregistre sous
Pour cela il faut trafiquer les menus d'excel…. Et comme toujours c'est là qu'arrive les problèmes en tout genre.. Donc je ne te conseille pas de faire cela.
Quel genre de probleme ?
Nad-Dan a écrit :4. Impression sans boutons
Pour ne pas imprimer les objets, clique droit sur le bouton, puis choisis Format de Contrôle et sous l'onglet Propriétés, décoche la case "Imprimer l'objet"
Ok, j'avais pas vu, le top !
Nad-Dan a écrit :5. Ta macro
Sub MacroNew() Range("A20:M29,A15,A33, C15, E15, G15,J11,I9:I10, L11").ClearContents End SubPour les cellules fusionnées (à éviter pour les codes), tu mets les deux cellules dans ton code pour être sûr de ne pas avoir un bug.
Donc pour ma case A33 qui en faite va jusqu'a M45, je mets donc A33:M45, et pour la A15 et B15 je mets aussi A15:B15 ?
Merci
re,
1. Et le "Collate:=True" c'est quoi ?
Oublie. c'est pour l'impression de plusieurs copies à assembler. Vois aussi l'aide excel.
2. C'est a dire ?
Pourquoi n'essaies-tu pas le code que je t'ai donné. Tu comprendras mieux ce qui se passe. C'est la copie de ta feuille qui sera sauvée et non ton fichier
3. Quel genre de probleme ?
De planter tes options dans les menus excel par exemple.
5. ".... je mets aussi A15:B15 ?"
Oui.
Dan
Nad-Dan a écrit :2. Sauvegarde
Plutôt que sauver le fichier entier pourquoi ne pas sauver la feuille dans un nouveau fichier et de la nommer de la même manière.
Sub MacroSave() ThisWorkbook.ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:="c:\Boulot" & Format(Range("D11"), "yyyy.mm.dd") End Sub
Ok, j'ai vu se que sa faisait.
Par contre, il ne respecte pas le nommage du fichier, au lien d'avoir "2009.01.01.xls" j'ai "01.01.2009". Par le bon ordre de date et sans le .xls.
D'où vient le problème ?
re,
Bonne règle, ne jamais utiliser de point dans les noms de fichiers. En informatique, le point ne doit être utilisé que juste avant une extension. Pour nommer des fichiers soit tu mets des "-" ou mieux des "_" mais tu peux aussi ne ren mettre.
ton code --> essaie :
Sub MacroSave()
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyymmdd") & ".xls"
End SubDan
Bon, j'ai testé ton code. Pour le .xls, c'est bon.
Par contre pour "yyyymmdd" sa marche pas, sa prend en compte le format de la case D11 qui est "dd.mm.yyyy" mais pas le format demander dans le code.
Hors, moi je veux donc garder l'affichage de D11 avec "dd.mm.yyyy" car c'est pour le visuel, mais pour le fichier souvé comme tu ma fait "yyyymmdd.xls"
Que dois je mettre pour forcé le format ?
Merci
re,
Cela ne peut venir que de ton format de date dans ta cellule D11.
Vérifie par FORMAT / CELLULE que tu es bien au format Date et non en texte. Si tu mets des points, excel considère cela comme du texte ou comme virgule ou comme format personnalisé.
Dan
Ok, problème résolût.
Donc il me reste a faire:
Je voudrai que mon fichier sauvé soit impossible a modifier, c'est a dire, que toute les cellules non verrouillé soit verrouillé comme les autre. Ainsi créer vraiment un fichier sauvé correspondant a l'original imprimer. Ou alors, comment créer un pdf plutôt que de souvé en .xls, et comme ça c'est plus modifiable ?
C'est possible ?
Je voudrai aussi mettre en cas de mauvaise entré de date ou champ vide une erreur apparaisse, voici le code que j'ai fait, mais sa marche pas:
Pour info, pour D11 c'est en faite "D11, E11, F11" elle sont fusionné !
Sub MacroSave()
If D11 = "" Then
MsgBox "Champ date non renseigner ou Mauvais format (ex: 01/01/200*)"
Else
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyy-mm-dd") & ".xls"
End If
End SubVoici un autre code qui lui marche si le champ est vide, mais pas s'il le format n'est pas bon:
Sub MacroSave()
If Range("D11") = "" Then
MsgBox "Champ date non renseigner ou Mauvais format (ex: 01/01/200*)"
Else
ThisWorkbook.ActiveSheet.Copy
ActiveWorkbook.SaveAs Filename:="c:\Boulot\" & Format(Range("D11"), "yyyy-mm-dd") & ".xls"
End If
End Subre,
Je voudrai aussi mettre en cas de mauvaise entré de date ou champ vide une erreur apparaisse, voici le code que j'ai fait, mais sa marche pas:
Pas besoin de faire un code pour cela.
Sélectionne D11 puis vas dans DONNEES / VALIDATION. Dans l'onglet Paramètres, sélectionne DATE dans la liste déroulante puis dans l'autre liste mets Supérieur et 01/04/2009 dans la rubrique Date début par exemple.
Ensuite mets un message dans l'onglet Alerte.
Dan
Ta methode je connaissé pas, donc je l'ai mis en pratique. Par contre, sa me fait si le format de date et pas bon, par contre en cas de cellule vide et que je clique sur enregistré sa me mets pas l'erreur comme comme le champ est vide et pas contre j'ai une erreur de code car il peu pas l'enregistré si ya pas la date.
Donc j'ai fait un melange des deux. Ta methode pour le format et mon code pour si la case est vide. Et la sa marche impecale.
Par contre, je voudrai aussi mettre le code pour l'impression en cas ou les case I9, I10, D11, I8 etc.. que l'on ait le message d'erreur. Car certain champ sont obligatoire pour l'impression, et d'ailleur je ferai aussi la meme cose pour sauvé le fichier.
Donc voici le code:
Sub MacroImpr()
If Range("D11") = "" Then
MsgBox "Certains champs ne sont pas renseigner"
Else
ActiveWindow.SelectedSheets.PrintOut Copies:=1
End If
End SubComment mettre d'autre case avec le D11 ?
Merci