Formulaire de commande Base de données

Bonsoir,

Pour pouvoir modifier des cellules verrouillées dans une feuille protégée, il faut mettre en début de macro ce code :

    ActiveSheet.Protect Password:="toto", UserInterfaceOnly:=True

en mettant le bon mot de passe. S'il n'y a pas de mot de passe, il suffit de supprimer l'argument "Password".

Ce code permet de déprotéger la feuille uniquement pour les macros. L'utilisateur ne pourra pas modifier les cellules protégées.

Pour la génération du résumé, j'ai joint un classeur qui le fait, il faut simplement changer ces deux lignes :

       sCheminFact = "D:\Test\Factures\"
       sCheminSave = "D:\Test\Factures\Save\"

en mettant les chemins des répertoires des factures et des sauvegardes (Save)

Le code est quasi-identique à celui d'un autre fil auquel j'ai répondu il y a peu de temps.

126resume.xlsm (18.98 Ko)

Merci pour ta reponse, mais du coup lorsque je veux enregistrer mon bon de commande voila ce que j'ai

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim sNewNumCde As String

If Not ShCommande.Range("J8") = Empty Then ' Modèle

If Not ShCommande.Shapes("BtChoixClient") Is Nothing Then

' Recherche du dernier numéro de commande du client dans le fichier texte

sNewNumCde = Format(LectIni(ShCommande.Range("I8"), "AFFAIRE") + 1, "000")

If ShCommande.Range("J8").Text = sNewNumCde Then

' Enregistrement du nouveau numéro de commande, si le fichier n'existe pas, il le créer

Call EcrIni(ShCommande.Range("I8").Text, "AFFAIRE", sNewNumCde)

' Suppression du bouton pour que ce ne soit plus possible d'incrémenter le compteur de commande

ShCommande.Shapes("BtChoixClient").Delete

End If

End If

End If

End Sub

Il me met cette ligne en surbrillance. C'est du a quoi ?

Bonsoir,

Si tu mets la ligne de protection juste avant la ligne de suppression du bouton en mettant ton mot de passe, cela fonctionne ?

ShCommande.Protect Password:="toto", UserInterfaceOnly:=True
ShCommande.Shapes(1).Delete

A+

Benead

Salut et merci pour ta reponse qui fonctionne.

Maintenant ce qui "ne fonctionne pas"

J'ai donc modifié les 2 lignes sur la commande comme indiqué. J'ai fait 5 tests, il m'a pris que les 2 premiers. Les autres ont etes fait de la meme facon, enregistrés au meme endroit. Je comprend pas ce qui coince.

Ensuite, sur le bon de commande, comme toutes les factures doivent etre enregistrées au meme endroit (pour que la liaison se fasse avec le classeur de resumé), est il possible de "forcer" le repertoire d'enregistrement ? C'est a dire que lorsque je clique sur "enregistrer sous", il me mette directement le repertoire (par exemple d:\test\commandes\saves) ?

En tous cas, merci pour ton aide precieuse !!!

Bonsoir

J'ai donc modifié les 2 lignes sur la commande comme indiqué. J'ai fait 5 tests, il m'a pris que les 2 premiers. Les autres ont etes fait de la meme facon, enregistrés au meme endroit. Je comprend pas ce qui coince.

Moi non plus je ne comprends pas. Qu'est-ce qui ne fonctionne pas exactement ?

Pour sauvegarder automatiquement vers un autre répertoire, il faut copier le code ci-dessous et le mettre dans le module du Classeur (dans la fenêtre VBE, il faut faire un clic droit sur ThisWorkbook/code puis coller le code).

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   Dim sSave As String, lReponse As Long

   If Not Environ("username") = "Benead" Then
      If Not bSaveAs Then
         sSave = Application.GetSaveAsFilename("d:\test\commandes\saves", FileFilter:="Fichier Excel (*.xlsx), *.xlsx", Title:="Enregistrement du classeur sans les macros...")
         If Not sSave = Empty And Not sSave = "Faux" Then
            bSaveAs = True
            Application.DisplayAlerts = False
            ThisWorkbook.SaveAs sSave, xlOpenXMLWorkbook
         Else
            Cancel = True
         End If
      ElseIf bSaveAs Then
         bSaveAs = False
         Exit Sub
      End If
      If Not bSaveAs Then Cancel = True
   End If
   Application.DisplayAlerts = True
End Sub

C'est un peu tordu mais cela fonctionne. Si tu ne veux pas que cela s'applique à tes sauvegardes, Remplace "Benead" par ton profil Windows.

Si le bon de commande doit conserver les macros, il faut remplacer xlsx par xlsm. ET remplacer xlOpenXMLWorkbook par xlOpenXMLWorkbookMacroEnabled

As-tu tester le résumé ?

A+

Benead

Merci pour ta reponse.

J'ai testé le classeur "resumé", et il fonctionne (je ne savaugardais pas mes commandes au bon endroit). Par contre il n'execute la macro que sur commande (c'est pas le plus contraignant).

Pour ce qui est de la sauvegarde, si je colle dans Thisworkbook ton code, j'efface le precedent ? Je le colle a la suite ? Actuellement il y a le code suivant:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim sNewNumCde As String

If Not ShCommande.Range("J8") = Empty Then ' Modèle

If Not ShCommande.Shapes("BtChoixClient") Is Nothing Then

' Recherche du dernier numéro de commande du client dans le fichier texte

sNewNumCde = Format(LectIni(ShCommande.Range("I8"), "AFFAIRE") + 1, "000")

If ShCommande.Range("J8").Text = sNewNumCde Then

' Enregistrement du nouveau numéro de commande, si le fichier n'existe pas, il le créer

Call EcrIni(ShCommande.Range("I8").Text, "AFFAIRE", sNewNumCde)

' Suppression du bouton pour que ce ne soit plus possible d'incrémenter le compteur de commande

ShCommande.Protect Password:="modif", UserInterfaceOnly:=True

ShCommande.Shapes("BtChoixClient").Delete

End If

End If

End If

End Sub

Merci a toi

Bonjour,

Remplace tout le code de ThisWorkbook par celui-ci :

Option Explicit
Dim bSaveAs As Boolean

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   Dim sNewNumCde As String
   Dim sSave As String, lReponse As Long

   If Not Environ("username") = "Benead" Then
      If Not bSaveAs Then
         sSave = Application.GetSaveAsFilename("d:\test\commandes\saves", FileFilter:="Fichier Excel (*.xlsx), *.xlsx", Title:="Enregistrement du classeur sans les macros...")
         If Not sSave = Empty And Not sSave = "Faux" Then
            bSaveAs = True
            If Not ShCommande.Range("J8") = Empty Then   ' Modèle
               If Not ShCommande.Shapes("BtChoixClient") Is Nothing Then
                  ' Recherche du dernier numéro de commande du client dans le fichier texte
                  sNewNumCde = Format(LectIni(ShCommande.Range("I8"), "AFFAIRE") + 1, "000")
                  If ShCommande.Range("J8").Text = sNewNumCde Then
                     ' Enregistrement du nouveau numéro de commande, si le fichier n'existe pas, il le créer
                     Call EcrIni(ShCommande.Range("I8").Text, "AFFAIRE", sNewNumCde)
                     ' Suppression du bouton pour que ce ne soit plus possible d'incrémenter le compteur de commande
                     ShCommande.Protect Password:="modif", UserInterfaceOnly:=True
                     ShCommande.Shapes("BtChoixClient").Delete
                  End If
               End If
            End If
            Application.DisplayAlerts = False
            ThisWorkbook.SaveAs sSave, xlOpenXMLWorkbook
         Else
            Cancel = True
         End If
      ElseIf bSaveAs Then
         bSaveAs = False
         Exit Sub
      End If
      Application.DisplayAlerts = True
      If Not bSaveAs Then Cancel = True
   End If
End Sub

Tu dis :

J'ai testé le classeur "resumé".../...Par contre il n'execute la macro que sur commande

Effectivement, je t'ai trouvé une solution plus sûre que de l'intégrer à la commande. Par exemple, une fois que l'utilisateur à enregistré sa commande, rien ne l'empêche de corriger une erreur ou de rajouter une ligne article...

Autre point, tu enregistres les commandes dans le répertoire "d:\test\commandes\saves" Si tu fais cela, ou enregistres-tu les commandes qui sont traitées par le résumé ?

A+

Benead

Je continue a te remercier pour ton boulot, c'est tout siomplement genial !!!

Pour mes enregistrements de commande, je les fais dans d:\test\commandes. Avant je les enregistrait en d:\test\commandes\saves, mais du coup mon classeur "resumé" ne fonctionnait pas.

Par conter, une fois enregistrés, lorsque j'active la macro sous "Resumé", les commandes sont automatiquement deplacées en "Save". C'est normal (ce n'est absolument pas genant, mais c'est pour mon info perso).

Je teste le code lundi au boulot.

MERCIIIIIIIIIIIIIIIIII

Tu as vu, je t'ai envoyé un mail ?

Tu m'as oublié l'ami ?

Rechercher des sujets similaires à "formulaire commande base donnees"