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.
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
Moi non plus je ne comprends pas. Qu'est-ce qui ne fonctionne pas exactement ?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.
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 :
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...J'ai testé le classeur "resumé".../...Par contre il n'execute la macro que sur commande
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 ?