Problème avec beforeclose / beforesave

Le
ThierryP
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lors
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées).Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
=
--
Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
=
--
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers.parce
que je ne sais plus qui fréquente quoi !!!!!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
h2so4
Le #22788631
bonjour,

je n'ai pas cherché à comprendre ce que fait cette macro, mais j'y ai
trouvé quelques instructions qui me semblent mal placées.



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
--------------------------------------------------------------------------------------------------------
Range("A22").End(xlUp).Select
controle = True ' par defaut les controles sont corrects
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row
controle = False ' une erreur a ete trouvée
i=5:j=0: 'pour sortir de la boucle j et i si on ne doit
' pas vérifier les autres lignes et colonnes
End If
Next
Next
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
--------------------------------------------------------------------------------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub




ThierryP laid this down on his screen :
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lors
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées)....Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
--------------------------------------------------------------------------------------------------------
Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
--------------------------------------------------------------------------------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers....parce
que je ne sais plus qui fréquente quoi !!!!!



--
h2so4
ca PAN
pique DORA
.
h2so4
Le #22788621
h2so4 presented the following explanation :
rebonjour,

je pense que ceci est encore plus simple et devrait le faire.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
--------------------------------------------------------------------------------------------------------
Range("A22").End(xlUp).Select

For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row




Cancel=true
exit sub

End If
Next
Next
Application.ScreenUpdating = True

--------------------------------------------------------------------------------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub




ThierryP laid this down on his screen :
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lors
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées)....Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
--------------------------------------------------------------------------------------------------------
Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
--------------------------------------------------------------------------------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers....parce
que je ne sais plus qui fréquente quoi !!!!!





--
h2so4
ca PAN
pique DORA
.
LSteph
Le #22788781
Bonjour Thierry,

(sans passer par beforesave), ce que je ne veux



Il y a quoi d'autre part dans ton before save.

Sinon sur le principe de fermer sans avoir enregistré tu peux mettre
saved=true
ou si tu veux que cela repasse par la question lors du before save
savedúlse

Nota:/ ton PS ..qui se vexerait, tu as plus de chances sur les deux (que
nombre d'entre nous frequentent même si répondent plutôt sur l'un que
l'autre)

Cordialement.

--
LSteph


"ThierryP" news:
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lors
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées)....Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
--------------------------------------------------------------------------------------------------------
Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne " &
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
--------------------------------------------------------------------------------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date) < 10 Then
Jour = "0" & Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers....parce
que je ne sais plus qui fréquente quoi !!!!!
Gloops
Le #22789001
ThierryP a écrit, le 14/11/2010 07:58 :
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lo rs
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées)....Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
----------------------------------------------------------------------- ---------------------------------
Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne "&
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
----------------------------------------------------------------------- ---------------------------------------------
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date)< 10 Then
Jour = "0"& Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date)& Month(Date)& Jour& "_"& Range("Nom")
ActiveWorkbook.SaveAs "C:Reports"& Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers....parc e
que je ne sais plus qui fréquente quoi !!!!!



Bonjour,

De même que h2so4 j'ai lu très vite.
Ce qui a retenu mon attention, c'est l'absence du "Cancel = true" juste
avant les points d'exclamation.
Mais il se peut que j'aie mal compris la question. Cancel = true, c'est
pour abandonner la fermeture.
Gloops
Le #22789071
Gloops a écrit, le 14/11/2010 12:47 :
ThierryP a écrit, le 14/11/2010 07:58 :
Bonjour tout le monde !
Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais l ors
de la fermeture du fichier, donner un nom au fichier et l'enregistrer
où je le voulais, tout en supprimant le code devenu inutile. J'ai
voulu peaufiner la chose en rajoutant un controle de saisie (entre les
lignes pointillées)....Depuis, quand le code exécute le Exit Sub
(repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veu x
pas bien sûr !!!!
Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
---------------------------------------------------------------------- ----------------------------------

Range("A22").End(xlUp).Select
For j = ActiveCell.Row To 2 Step -1
For i = 1 To 4
If IsEmpty(ActiveCell.Offset(0, i)) Then
MsgBox "Vous n'avez pas complété la ligne "&
ActiveCell.Row
controle = False
Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
End If
Next
Next
controle = True
Application.ScreenUpdating = True
If Not (controle) Then Cancel = True: Exit Sub
---------------------------------------------------------------------- ----------------------------------------------

ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells
If Day(Date)< 10 Then
Jour = "0"& Trim(Day(Date))
Else
Jour = Trim(Day(Date))
End If
Nom_Fichier = Year(Date)& Month(Date)& Jour& "_"& Range("Nom")
ActiveWorkbook.SaveAs "C:Reports"& Nom_Fichier
Application.DisplayAlerts = True
End Sub


Merci d'avance !

ThierryP
PS : ne soyez pas vexés, mais je vais crossposter sur answers....par ce
que je ne sais plus qui fréquente quoi !!!!!



Bonjour,

De même que h2so4 j'ai lu très vite.
Ce qui a retenu mon attention, c'est l'absence du "Cancel = true" jus te
avant les points d'exclamation.
Mais il se peut que j'aie mal compris la question. Cancel = true, c'e st
pour abandonner la fermeture.





Ah oui h2so4 l'a mis dans son message suivant.
Je m'étais calmé pourtant avec mon habitude de répondre plus vite q ue
mon ombre :)
Gloops
Le #22789061
LSteph a écrit, le 14/11/2010 11:59 :
Sinon sur le principe de fermer sans avoir enregistré tu peux mettre
saved=true



Ah j'ai failli dire voilà ce que je cherchais Vendredi dernier.
Non en fait ce que je voulais c'était remplacer si le fichier existait
déjà, il me semblait que SaveAs avait un argument pour ça, mais ç a ne
paraissait pas probant. J'ai fini par sortir l'artillerie lourde, avec
FileSystemObject. Les puristes tiquent.
ThierryP
Le #22791431
On 14 nov, 15:52, Gloops
LSteph a écrit, le 14/11/2010 11:59 :

> Sinon sur le principe de fermer sans avoir enregistré tu peux mettre
> saved=true

Ah j'ai failli dire voilà ce que je cherchais Vendredi dernier.
Non en fait ce que je voulais c'était remplacer si le fichier existait
déjà, il me semblait que SaveAs avait un argument pour ça, mais ç a ne
paraissait pas probant. J'ai fini par sortir l'artillerie lourde, avec
FileSystemObject. Les puristes tiquent.



Bonsoir à tous,

à la lumière des différents posts, je crois qu'effectivement j'ai é té
un peu vite et que ma logique ne soit pas bonne !!
Je testerai ça demain, là il est un peu tard. Je vous donnerai le
retour.

Merci à tous ceux qui se sont penchés sur mon souci
Gloops
Le #22791681
ThierryP a écrit, le 14/11/2010 22:05 :
On 14 nov, 15:52, Gloops
LSteph a écrit, le 14/11/2010 11:59 :

Sinon sur le principe de fermer sans avoir enregistré tu peux mettr e
saved=true



Ah j'ai failli dire voilà ce que je cherchais Vendredi dernier.
Non en fait ce que je voulais c'était remplacer si le fichier exista it
déjà, il me semblait que SaveAs avait un argument pour ça, mais ça ne
paraissait pas probant. J'ai fini par sortir l'artillerie lourde, avec
FileSystemObject. Les puristes tiquent.



Bonsoir à tous,

à la lumière des différents posts, je crois qu'effectivement j'ai été
un peu vite et que ma logique ne soit pas bonne !!
Je testerai ça demain, là il est un peu tard. Je vous donnerai le
retour.

Merci à tous ceux qui se sont penchés sur mon souci



OK on va faire comme ça.

Pendant qu'on y est, si quelqu'un a une réponse pour confirmer qu'on
veut remplacer un fichier si il existe déjà ...
isabelle
Le #22792301
salut Gloops,

Le 2010-11-14 16:44, Gloops a écrit :

Pendant qu'on y est, si quelqu'un a une réponse pour confirmer qu'on
veut remplacer un fichier si il existe déjà ...



Application.DisplayAlerts = False
'ActiveWorkbook.SaveAs ......
Application.DisplayAlerts = True

isabelle
ThierryP
Le #22794371
On 14 nov, 13:09, h2so4
bonjour,

je n'ai pas cherché à comprendre ce que fait cette macro, mais j'y ai
trouvé quelques instructions qui me semblent mal placées.

Private Sub Workbook_BeforeClose(Cancel As Boolean)



> Application.ScreenUpdating = False
> Application.DisplayAlerts = False
> ----------------------------------------------------------------------- ---------------------------------
> Range("A22").End(xlUp).Select
> controle = True ' par defaut les controles sont corrects
> For j = ActiveCell.Row To 2 Step -1
>     For i = 1 To 4
>         If IsEmpty(ActiveCell.Offset(0, i)) Then
>             MsgBox "Vous n'avez pas complété la ligne " &
> ActiveCell.Row
>             controle = False ' une erreur a ete trouvée
>             i=5:j=0: 'pour sortir de la boucle j et i s i on ne doit
>             ' pas vérifier les autres lignes et colonnes
>         End If
>     Next
> Next
> Application.ScreenUpdating = True
> If Not (controle) Then Cancel = True: Exit Sub
> ----------------------------------------------------------------------- ---------------------------------------------
> ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
> Scenarios:=True
> ActiveSheet.EnableSelection = xlUnlockedCells
> If Day(Date) < 10 Then
>     Jour = "0" & Trim(Day(Date))
> Else
>     Jour = Trim(Day(Date))
> End If
> Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
> ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
> Application.DisplayAlerts = True
> End Sub

ThierryP laid this down on his screen :



> Bonjour tout le monde !
> Avec la macro ci-dessous, enregistrée dans un modèle, je pouvais lo rs
> de la fermeture du fichier, donner un nom au fichier et l'enregistrer
> où je le voulais, tout en supprimant le code devenu inutile. J'ai
> voulu peaufiner la chose en rajoutant un controle de saisie (entre les
> lignes pointillées)....Depuis, quand le code exécute le Exit Sub
> (repéré par !!!!!!!!!!!!), Excel me demande si je veux sauvegarder le
> fichier "modèle1.xls" (sans passer par beforesave), ce que je ne veux
> pas bien sûr !!!!
> Après avoir essayé plein de trucs, je fais appel aux gurus du mpfe !!!

> Private Sub Workbook_BeforeClose(Cancel As Boolean)
> Application.ScreenUpdating = False
> Application.DisplayAlerts = False
> ----------------------------------------------------------------------- ---------------------------------
> Range("A22").End(xlUp).Select
> For j = ActiveCell.Row To 2 Step -1
>     For i = 1 To 4
>         If IsEmpty(ActiveCell.Offset(0, i)) Then
>             MsgBox "Vous n'avez pas complété la ligne " &
> ActiveCell.Row
>             controle = False
>             Exit Sub !!!!!!!!!!!!!!!!!!!!!!!!
>         End If
>     Next
> Next
> controle = True
> Application.ScreenUpdating = True
> If Not (controle) Then Cancel = True: Exit Sub
> ----------------------------------------------------------------------- ---------------------------------------------
> ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
> Scenarios:=True
> ActiveSheet.EnableSelection = xlUnlockedCells
> If Day(Date) < 10 Then
>     Jour = "0" & Trim(Day(Date))
> Else
>     Jour = Trim(Day(Date))
> End If
> Nom_Fichier = Year(Date) & Month(Date) & Jour & "_" & Range("Nom")
> ActiveWorkbook.SaveAs "C:Reports" & Nom_Fichier
> Application.DisplayAlerts = True
> End Sub

> Merci d'avance !

> ThierryP
> PS : ne soyez pas vexés, mais je vais crossposter sur answers....parc e
> que je ne sais plus qui fréquente quoi !!!!!

--
h2so4
ca PAN
pique DORA
.



Bonsoir à tous,

H2SO4 avait raison......Le "Cancel=True" était bien dans la proc, mais
pas au bon endroit ! Et en reprenant tout à l'heure, je me suis dit
que j'avais vraiment écrit n'importe quoi !!
Pour LStpeh, en fait dans le beforesave, je supprime tout le code, qui
ne sert plus à rien une fois le fichier rempli. Donc je ne dois passer
dans le beforesave que quand tout est vraiment OK

Merci à tout le monde :-))))
Publicité
Poster une réponse
Anonyme