bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 7 juil. 2009 à 14:14
pas besoin de faire une usine à gaz !
dans le code de ThisWorkBook tu ajoutes ceci:
Private Sub Workbook_Open()
SaveByCode = False
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveByCode = False then
Cancel = True
Else
Cancel = false
End If
If Cancel = True Then MsgBox "Ce fichier ne peut etre sauvé par l'utilisateur ! " & vbCrLf & _
"Veuillez utiliser le bouton prevu a cet effet!", vbExclamation
End Sub
En haut d'un module tu mets ceci:
Public SaveByCode As Boolean
et dans le code de ton bouton pour la sauvegarde tu mets:
Private Sub CommandButton1_Click()
SaveByCode = True
ThisWoorkBook.Save
SaveByCode = False
End Sub
vwtroudy
Messages postés4Date d'inscriptionvendredi 19 septembre 2008StatutMembreDernière intervention 9 juillet 2009 7 juil. 2009 à 16:55
je vais tester demain soir et je vous tiens au courant mais quand bigfish parle de ça:"
En haut d'un module tu mets ça"... chui un peu novice, c'est ou le module???
merci de votre aide précieuse
Vwtroudy
Vous n’avez pas trouvé la réponse que vous recherchez ?
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 7 juil. 2009 à 18:01
pfffff !... bon voici quelques explications:
la fenetre dans la quelle on ecrit le code s'appelle VBE(Visual Basic Editor).
A gauche de la fenetre VBE il devrait y avoir le "Projects Explorer" (l'explorateur de projets) si ce n'est pas le cas tu vas dans le menu affichage et tu le coches.
Dans l'explorateur de projets tu vas trouver ton projet qui s'appel: VBAProject (nom de ton classeur.xls)
dans VBAProject (nom de ton classeur.xls) tu vas trouver une icone qui represente un repertoire "Microsoft Excel Objects" et qui contient le code des feuilles de ton classeur et le code du classeur lui meme "ThisWorkBook". Puis tu double clicks sur "ThisWorkBook" pour ouvrir la page de code.
Donc dans la page de code de ThisWorkBook tu y colles ceci:
Private Sub Workbook_Open()
SaveByCode = False
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If SaveByCode = False then
Cancel = True
Else
Cancel = false
End If
If Cancel = True Then MsgBox "Ce fichier ne peut etre sauvé par l'utilisateur ! " & vbCrLf & _
"Veuillez utiliser le bouton prevu a cet effet!", vbExcla de code mation
End Sub
En suite tu click droit sur: VBAProject (nom de ton classeur.xls)
et dans le petit menu contextuel qui apparait tu fais : insertion, module
tu double clicks sur module1 et tu lui colle : Public SaveByCode As Boolean
Enfin pour le bouton il suffit de le créer dans ta feuille puis de faire un click droit dessus et de selectionner : Visualiser le code
Cela aura pour consequence de te basculer le vbe, directement dans la page de code de la feuille dans la quelle ta as créé le bouton.
Dans cette page de code tu vas y trouver ceci:
Private Sub CommandButton1_Click()
End Sub
il te faut maintenant rajouter 3 ligne de code pour obtenir ceci:
Private Sub CommandButton1_Click()
SaveByCode = True
ThisWoorkBook.Save
SaveByCode = False
End Sub
maintenant tu sauve ton classeur (dans excel pas dans le vbe)
Tu le fermes et tu le réouvre.
voila essai Ctrl+S ou de sauver par la methode classique
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 8 juil. 2009 à 00:31
Bonsoir,
Une p'tit optimisation du code :
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveByCode Then
MsgBox "Ce fichier ne peut etre sauvé par l'utilisateur ! " & vbCrLf & _
"Veuillez utiliser le bouton prevu a cet effet!", vbExclamation
Cancel = True
End If
End Sub
C'est un peu (voir beaucoup) pour le plaisir...
Ensuite, je signale un bug... oui, c'est bizarre, mais vrai. IL y a un bug, si le classeur n'a jamais était enregistré une fois avant le code proposé... Le bug se situe sur ThisWoorkBook.Save... avec Objet requis.... En effet, Save ne peut fonctionner que si SaveAs a fonctionné une fois au moins...
Je propose :
Private Sub CommandButton1_Click()
SaveByCode = True
ActiveWorkbook.Save
SaveByCode = False
End Sub