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 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:
Sub Macro1()
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End Sub

C'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 C'est pas mon probleme. Mon probleme c'est sur mon premier post.

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 Sub

Pour Imprimer

Sub Imprimer()
ActiveSheet.PrintOut Copies:=1
End Sub

Autres 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").clearcontents

3. Imprimer

voir mon post précédent.

Dan

Merci, j'ai d'autre question, certaines pour comprendre mieux et d'autre pour amelioré.

  1. - Quel difference entre:
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
      Et
      ActiveSheet.PrintOut Copies:=1
  • - Pour le fichier sauvegarder, je voudrai que toute les macro soit desactivé ou effacer, car etant un fichier de sauvegarde, il ni a pas utilité d'avoir les macro lorsque l'on re ouvre le fichier créer.
  • - Dans le fichier de base, vu que j'ai créer un bouton enregistré qui envoie la copie dans C:\Boulot je voudrai supprimé l'option de sauvegarder via "Fichier / Enregistrer" (ou Enregistrer sous) et aussi via le bouton "Enregistrer". Car je veux que par defaut sa soit toujours via mon bouton pour le nommage auto des fichiers avec le format desiré.
  • - Lors de l'impression, je veux que l'on ne voit pas les bouton le fichier, normale, sinon sa fait pas beau
  • - Le temps d'attendre vos reponse, voici une partie de mon code si vous pouvez corriger des erreurs s'il y en a ? Car je crois que j'ai des erreur .

    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 Sub

    Merci

    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 Sub

    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.

    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 Sub

    Pour 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 Sub

    Pour 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 Sub

    Dan

    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 Sub

    Voici 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 Sub

    re,

    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 Sub

    Comment mettre d'autre case avec le D11 ?

    Merci

    Rechercher des sujets similaires à "question bouton"