OVH Cloud OVH Cloud

Workbook_BeforeClose

9 réponses
Avatar
Manu
Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il me
pose tjrs la question, avez vous une idée ?
Merci

Manu

9 réponses

Avatar
MichDenis
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il me
pose tjrs la question, avez vous une idée ?
Merci

Manu
Avatar
Manu
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable (il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il me
pose tjrs la question, avez vous une idée ?
Merci

Manu





Avatar
MichDenis
Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable (il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il me
pose tjrs la question, avez vous une idée ?
Merci

Manu





Avatar
Manu
j'ouvre un fichier xls en lecture seul , puis je lui demande de se mettre en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je dis
oui ton code de suppression des macros fonctionne bien (il me supprime bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il ne
supprime que les macros dans thisworkbook et non les macros des modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. + jour +
mois + année
Repertoire = "C:Documents and SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " " &
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable (il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu










Avatar
MichDenis
Essaie ceci :

A ) Déclarations des variables se fait en début de procédure
ça rend le code plus lisible
B ) Apporter une attention à l'indentation du code facilite aussi
sa lecture et la compréhension de ce dernier.

C ) Qand tu emploie l'exprenssion "ActiveWorkbook", est-ce
du classeur actif dont tu parles ou le classeur qui contient le code
dont tu fais référence ? Le résultat n'est pas le même .

Ce code n'a pas été testé. Nom feuille à adapter.
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String

Repertoire = "C:Documents and SettingsAdministrateur" & _
"BureauHistorique Bon de Commande"

With Worksheets("Feuil1") ' Nom de la feuille à adapter
Fichier = "Com" & " " & .Cells(3, 3).Value & " " & _
.Cells(3, 5).Value & " " & .Cells(13, 7).Value & _
" " & Day(Now) & "-" & Month(Now) & "-" & _
Year(Now) & ".xls"
End With

'test si On valide ou pas
If MsgBox("Voulez-Vous valider ce Bon de Commande et " & _
"mettre à jour votre historique ?", vbYesNo) = vbYes Then
'Met le fichier en écriture
Call Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en
'commencant par Bon com. + jour + mois année

'Est-ce le fichier qui contient ce code que tu veux
'enregistrer ou un autre classeur qui est
'le classeur actif ouvert ?
ThisWorkbook.SaveAs Filename:=Repertoire & Fichier

'Supprime les macros du classeur final

nomFichier = ThisWorkbook.Name
' il appelle le code michdenis
SupprimeToutCodeEtFormulaire nomFichier
ThisWorkbook.Save
Else
'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1
ThisWorkbook.Save
End If
End Sub
'------------------------------------





"Manu" a écrit dans le message de news:
Owr$
j'ouvre un fichier xls en lecture seul , puis je lui demande de se mettre en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je dis
oui ton code de suppression des macros fonctionne bien (il me supprime bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il ne
supprime que les macros dans thisworkbook et non les macros des modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. + jour +
mois + année
Repertoire = "C:Documents and SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " " &
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable (il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu










Avatar
Manu
Merci, je suis en déplacement pendant 2 jours, je travaille dessus et te
tiens au courant jeudi.

Merci encore !

Manu

"MichDenis" a écrit dans le message de news:

Essaie ceci :

A ) Déclarations des variables se fait en début de procédure
ça rend le code plus lisible
B ) Apporter une attention à l'indentation du code facilite aussi
sa lecture et la compréhension de ce dernier.

C ) Qand tu emploie l'exprenssion "ActiveWorkbook", est-ce
du classeur actif dont tu parles ou le classeur qui contient le code
dont tu fais référence ? Le résultat n'est pas le même .

Ce code n'a pas été testé. Nom feuille à adapter.
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String

Repertoire = "C:Documents and SettingsAdministrateur" & _
"BureauHistorique Bon de Commande"

With Worksheets("Feuil1") ' Nom de la feuille à adapter
Fichier = "Com" & " " & .Cells(3, 3).Value & " " & _
.Cells(3, 5).Value & " " & .Cells(13, 7).Value & _
" " & Day(Now) & "-" & Month(Now) & "-" & _
Year(Now) & ".xls"
End With

'test si On valide ou pas
If MsgBox("Voulez-Vous valider ce Bon de Commande et " & _
"mettre à jour votre historique ?", vbYesNo) = vbYes Then
'Met le fichier en écriture
Call Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en
'commencant par Bon com. + jour + mois année

'Est-ce le fichier qui contient ce code que tu veux
'enregistrer ou un autre classeur qui est
'le classeur actif ouvert ?
ThisWorkbook.SaveAs Filename:=Repertoire & Fichier

'Supprime les macros du classeur final

nomFichier = ThisWorkbook.Name
' il appelle le code michdenis
SupprimeToutCodeEtFormulaire nomFichier
ThisWorkbook.Save
Else
'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1
ThisWorkbook.Save
End If
End Sub
'------------------------------------





"Manu" a écrit dans le message de news:
Owr$
j'ouvre un fichier xls en lecture seul , puis je lui demande de se mettre
en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je
dis
oui ton code de suppression des macros fonctionne bien (il me supprime
bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il
ne
supprime que les macros dans thisworkbook et non les macros des modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour
votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. + jour
+
mois + année
Repertoire = "C:Documents and SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " "
&
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs
avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable
(il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu















Avatar
Manu
Bonsoir,
J'ai trouvé une solution de rechange, Mich ton code faisait tout pareil que
le précédent, il me demandait tjrs d'enregistrer à la fin, du coup j'ai
juste déplacer ma macro "mis-a-jour" qui etait dans un module et je l'ais
mis dans thisworkbook, et ca fonctionne, apparement ca ne lui plaisait pas
de supprimer le module. Il enregistrait (sans le demander) un coup la
suppression des macros de thisworkbook et pour confirmer la suppression du
module il me demandait à nouveau l'enregistrement si je disait oui c'etait
bon sinon il me gardait tjrs la macro du module.

Ceci dis il reste un elements etrange, dans le fichier final il n'y a plus
de macros nul part, j'ai vérifier et pourtant à l'ouverture il me demande si
je veux activer les macros .... Bizarre non ? comment que ca se fait ?

Merci encore

Manu

"Manu" a écrit dans le message de news:

Merci, je suis en déplacement pendant 2 jours, je travaille dessus et te
tiens au courant jeudi.

Merci encore !

Manu

"MichDenis" a écrit dans le message de news:

Essaie ceci :

A ) Déclarations des variables se fait en début de procédure
ça rend le code plus lisible
B ) Apporter une attention à l'indentation du code facilite aussi
sa lecture et la compréhension de ce dernier.

C ) Qand tu emploie l'exprenssion "ActiveWorkbook", est-ce
du classeur actif dont tu parles ou le classeur qui contient le code
dont tu fais référence ? Le résultat n'est pas le même .

Ce code n'a pas été testé. Nom feuille à adapter.
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String

Repertoire = "C:Documents and SettingsAdministrateur" & _
"BureauHistorique Bon de Commande"

With Worksheets("Feuil1") ' Nom de la feuille à adapter
Fichier = "Com" & " " & .Cells(3, 3).Value & " " & _
.Cells(3, 5).Value & " " & .Cells(13, 7).Value & _
" " & Day(Now) & "-" & Month(Now) & "-" & _
Year(Now) & ".xls"
End With

'test si On valide ou pas
If MsgBox("Voulez-Vous valider ce Bon de Commande et " & _
"mettre à jour votre historique ?", vbYesNo) = vbYes Then
'Met le fichier en écriture
Call Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en
'commencant par Bon com. + jour + mois année

'Est-ce le fichier qui contient ce code que tu veux
'enregistrer ou un autre classeur qui est
'le classeur actif ouvert ?
ThisWorkbook.SaveAs Filename:=Repertoire & Fichier

'Supprime les macros du classeur final

nomFichier = ThisWorkbook.Name
' il appelle le code michdenis
SupprimeToutCodeEtFormulaire nomFichier
ThisWorkbook.Save
Else
'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1
ThisWorkbook.Save
End If
End Sub
'------------------------------------





"Manu" a écrit dans le message de news:
Owr$
j'ouvre un fichier xls en lecture seul , puis je lui demande de se mettre
en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La
macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je
dis
oui ton code de suppression des macros fonctionne bien (il me supprime
bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il
ne
supprime que les macros dans thisworkbook et non les macros des modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour
votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. +
jour +
mois + année
Repertoire = "C:Documents and SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " "
&
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs
avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable
(il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les
macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux
pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu



















Avatar
MichDenis
| fichier final il n'y a plus de macros nul part, j'ai vérifier et pourtant à l'ouverture il me
demande si
| je veux activer les macros .... Bizarre non ?

le classeur ne doit pas contenir des modules "standard",
de "classe" ou "Formulaire" mais ci ces derniers objets ne
contiennent pas de code.



"Manu" a écrit dans le message de news:

Bonsoir,
J'ai trouvé une solution de rechange, Mich ton code faisait tout pareil que
le précédent, il me demandait tjrs d'enregistrer à la fin, du coup j'ai
juste déplacer ma macro "mis-a-jour" qui etait dans un module et je l'ais
mis dans thisworkbook, et ca fonctionne, apparement ca ne lui plaisait pas
de supprimer le module. Il enregistrait (sans le demander) un coup la
suppression des macros de thisworkbook et pour confirmer la suppression du
module il me demandait à nouveau l'enregistrement si je disait oui c'etait
bon sinon il me gardait tjrs la macro du module.

Ceci dis il reste un elements etrange, dans le fichier final il n'y a plus
de macros nul part, j'ai vérifier et pourtant à l'ouverture il me demande si
je veux activer les macros .... Bizarre non ? comment que ca se fait ?

Merci encore

Manu

"Manu" a écrit dans le message de news:

Merci, je suis en déplacement pendant 2 jours, je travaille dessus et te
tiens au courant jeudi.

Merci encore !

Manu

"MichDenis" a écrit dans le message de news:

Essaie ceci :

A ) Déclarations des variables se fait en début de procédure
ça rend le code plus lisible
B ) Apporter une attention à l'indentation du code facilite aussi
sa lecture et la compréhension de ce dernier.

C ) Qand tu emploie l'exprenssion "ActiveWorkbook", est-ce
du classeur actif dont tu parles ou le classeur qui contient le code
dont tu fais référence ? Le résultat n'est pas le même .

Ce code n'a pas été testé. Nom feuille à adapter.
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String

Repertoire = "C:Documents and SettingsAdministrateur" & _
"BureauHistorique Bon de Commande"

With Worksheets("Feuil1") ' Nom de la feuille à adapter
Fichier = "Com" & " " & .Cells(3, 3).Value & " " & _
.Cells(3, 5).Value & " " & .Cells(13, 7).Value & _
" " & Day(Now) & "-" & Month(Now) & "-" & _
Year(Now) & ".xls"
End With

'test si On valide ou pas
If MsgBox("Voulez-Vous valider ce Bon de Commande et " & _
"mettre à jour votre historique ?", vbYesNo) = vbYes Then
'Met le fichier en écriture
Call Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en
'commencant par Bon com. + jour + mois année

'Est-ce le fichier qui contient ce code que tu veux
'enregistrer ou un autre classeur qui est
'le classeur actif ouvert ?
ThisWorkbook.SaveAs Filename:=Repertoire & Fichier

'Supprime les macros du classeur final

nomFichier = ThisWorkbook.Name
' il appelle le code michdenis
SupprimeToutCodeEtFormulaire nomFichier
ThisWorkbook.Save
Else
'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1
ThisWorkbook.Save
End If
End Sub
'------------------------------------





"Manu" a écrit dans le message de news:
Owr$
j'ouvre un fichier xls en lecture seul , puis je lui demande de se mettre
en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La
macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je
dis
oui ton code de suppression des macros fonctionne bien (il me supprime
bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il
ne
supprime que les macros dans thisworkbook et non les macros des modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour
votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. +
jour +
mois + année
Repertoire = "C:Documents and SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " "
&
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs
avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable
(il
me supprime bien toutes les macros) si je dis non, ton code fonctionne à
moitié (il ne supprime que les macros dans thisworkbook et non les
macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux
pas
qu'il me pose cette question je veux qu'il enregistre sans rien me dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire, il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu



















Avatar
Manu
bonjour,
tu as raison, il y a deux case à cocher dans le fichier et si je les enleves
il ne me demande plus d'activer les macros, c'est tout de meme etonnant....
Les cases à cocher ne sont pas affectées à une macro...

Merci

Manu

"MichDenis" a écrit dans le message de news:

| fichier final il n'y a plus de macros nul part, j'ai vérifier et pourtant
à l'ouverture il me
demande si
| je veux activer les macros .... Bizarre non ?

le classeur ne doit pas contenir des modules "standard",
de "classe" ou "Formulaire" mais ci ces derniers objets ne
contiennent pas de code.



"Manu" a écrit dans le message de news:

Bonsoir,
J'ai trouvé une solution de rechange, Mich ton code faisait tout pareil
que
le précédent, il me demandait tjrs d'enregistrer à la fin, du coup j'ai
juste déplacer ma macro "mis-a-jour" qui etait dans un module et je l'ais
mis dans thisworkbook, et ca fonctionne, apparement ca ne lui plaisait pas
de supprimer le module. Il enregistrait (sans le demander) un coup la
suppression des macros de thisworkbook et pour confirmer la suppression du
module il me demandait à nouveau l'enregistrement si je disait oui c'etait
bon sinon il me gardait tjrs la macro du module.

Ceci dis il reste un elements etrange, dans le fichier final il n'y a plus
de macros nul part, j'ai vérifier et pourtant à l'ouverture il me demande
si
je veux activer les macros .... Bizarre non ? comment que ca se fait ?

Merci encore

Manu

"Manu" a écrit dans le message de news:

Merci, je suis en déplacement pendant 2 jours, je travaille dessus et te
tiens au courant jeudi.

Merci encore !

Manu

"MichDenis" a écrit dans le message de news:

Essaie ceci :

A ) Déclarations des variables se fait en début de procédure
ça rend le code plus lisible
B ) Apporter une attention à l'indentation du code facilite aussi
sa lecture et la compréhension de ce dernier.

C ) Qand tu emploie l'exprenssion "ActiveWorkbook", est-ce
du classeur actif dont tu parles ou le classeur qui contient le code
dont tu fais référence ? Le résultat n'est pas le même .

Ce code n'a pas été testé. Nom feuille à adapter.
'------------------------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String

Repertoire = "C:Documents and SettingsAdministrateur" & _
"BureauHistorique Bon de Commande"

With Worksheets("Feuil1") ' Nom de la feuille à adapter
Fichier = "Com" & " " & .Cells(3, 3).Value & " " & _
.Cells(3, 5).Value & " " & .Cells(13, 7).Value & _
" " & Day(Now) & "-" & Month(Now) & "-" & _
Year(Now) & ".xls"
End With

'test si On valide ou pas
If MsgBox("Voulez-Vous valider ce Bon de Commande et " & _
"mettre à jour votre historique ?", vbYesNo) = vbYes Then
'Met le fichier en écriture
Call Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en
'commencant par Bon com. + jour + mois année

'Est-ce le fichier qui contient ce code que tu veux
'enregistrer ou un autre classeur qui est
'le classeur actif ouvert ?
ThisWorkbook.SaveAs Filename:=Repertoire & Fichier

'Supprime les macros du classeur final

nomFichier = ThisWorkbook.Name
' il appelle le code michdenis
SupprimeToutCodeEtFormulaire nomFichier
ThisWorkbook.Save
Else
'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1
ThisWorkbook.Save
End If
End Sub
'------------------------------------





"Manu" a écrit dans le message de news:
Owr$
j'ouvre un fichier xls en lecture seul , puis je lui demande de se
mettre
en
lecture ecriture sous un autre nom comme tu le verras ci dessous. La
macro
fonctionne impec, il enregistre tres vite sous un autre nom sans rien
demander, mais à la fin il me redande de réenregistrer le fichier. si je
dis
oui ton code de suppression des macros fonctionne bien (il me supprime
bien
toutes les macros) mais si je dis non, ton code fonctionne à moitié (il
ne
supprime que les macros dans thisworkbook et non les macros des
modules).

J'espere avoir été plus clair.

Manu


Private Sub Workbook_BeforeClose(Cancel As Boolean)


'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce Bon de Commande et mettre à jour
votre
historique ?", 4)
If Msg = 6 Then
Fichier_Lecture_Ecriture
'Enregistre le fichier dans l'historique en commencant par Bon com. +
jour +
mois + année
Repertoire = "C:Documents and
SettingsAdministrateurBureauHistorique
Bon de Commande"
Fichier = "Com" & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & "
"
&
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier


'Supprime les macros du classeur final
Dim nomFichier As String
nomFichier = ThisWorkbook.Name ' Ou le nom d'un autre fichier
SupprimeToutCodeEtFormulaire nomFichier ' il appelle le code michdenis

Else

Fichier_Lecture_Ecriture 'met le fichier en lecture ecriture
mis_a_jour 'appelle d'un macro dans un module
[E3] = [E3] - 1

ActiveWorkbook.Saved = True


ActiveWorkbook.Save
End If
End Sub

"MichDenis" a écrit dans le message de news:

Il faut prendre le temps de poser ta question :

La procédure que tu mentionnes supprimes toutes les procédures
d'un classeur. Si c'est ce classeur que tu veux fermer sans qu'il te
demande rien, tu devrais utiliser ceci :

Workbooks(nomFichier).Save

NomFichier est le nom du fichier auquel la procédure fait référence !

Quel est ton besoin, ce n'est pas évident.


"Manu" a écrit dans le message de news:
OwRx$
Oui, mais rien n'y fait.
tu m'avais donner cela :

Sub SupprimeToutCodeEtFormulaire(nomFichier As String)
Dim VBComp As Object
Dim VBComps As Object

Set VBComps = Workbooks(nomFichier).VBProject.VBComponents

For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
ThisWorkbook.Save
end sub
Que j'ai integré dans mon Private Sub Workbook_BeforeClose(Cancel As
Boolean) et à la fin il me demande si je veux enregistrer les modifs
avant
de quitter.
Alors 2 choses se passent, si je dis oui ton code fonctionne impecable
(il
me supprime bien toutes les macros) si je dis non, ton code fonctionne
à
moitié (il ne supprime que les macros dans thisworkbook et non les
macros
des modules)
Je ne comprend rien.

"MichDenis" a écrit dans le message de news:
%
| je veux enregistrer les modifs, je ne veux pas qu'il me pose cette
question

As-tu essayé ceci :
ThisWorkbook.save


"Manu" a écrit dans le message de news:

Bonjour,

a la fin d'un : Private Sub Workbook_BeforeClose(Cancel As Boolean)

il me demande toujours si je veux enregistrer les modifs, je ne veux
pas
qu'il me pose cette question je veux qu'il enregistre sans rien me
dire
alors j'ai mis cela : ActiveWorkbook.Saved = True Mais rien à faire,
il
me
pose tjrs la question, avez vous une idée ?
Merci

Manu