OVH Cloud OVH Cloud

Pb d'écriture

2 réponses
Avatar
Alpha
Je souhaite intégrer cette proc directement dans thisworkbook, mais malgré 2
heures de test, cela ne fonctionne pas.
Merci
Alpha

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Long
Sheets("saisie").Select
n = Application.CountA([A3:A10000])
If Application.CountA([B3:B10000]) <> n And _
Application.CountA([C3:C10000]) <> n And _
Application.CountA([D3:D10000]) <> n And _
Application.CountA([E3:E10000]) <> n And _
Application.CountA([F3:F10000]) <> n Then

MsgBox "Il y a une anomalie !" & vbNewLine & "Vous devez saisir correctement
les données dans ce tableau ! " & vbNewLine & "", vbExclamation, " Données
mal saisies !": Exit Sub
Sheets("saisie").Select
End If
Exit Sub
Else
ThisWorkbook.Save
Application.Quit
End Sub

2 réponses

Avatar
Jean-François Aubert
Salut Alpha,
Le Exit Sub que tu as placé ne fait que de sortir de la macro exécutée avant la fermeture du
classeur,
mais n'empêche pas sa fermeture.
Il faut donc utilisé le Cancel.
Si la condition du If n'est pas remplie, on met Cancel à True,
et le classeur ne ferme pas, sinon on sauve le classeur et on quitte Excel.


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Long
Sheets("saisie").Select
n = Application.CountA([A3:A10000])
If Application.CountA([B3:B10000]) <> n And _
Application.CountA([C3:C10000]) <> n And _
Application.CountA([D3:D10000]) <> n And _
Application.CountA([E3:E10000]) <> n And _
Application.CountA([F3:F10000]) <> n Then

MsgBox "Il y a une anomalie !" & vbNewLine & _
"Vous devez saisir correctement les données dans ce tableau ! " & _
vbNewLine & "", vbExclamation, " Données mal saisies !":

Cancel = True ' le classeur ne ferme pas
Else
ThisWorkbook.Save
Application.Quit
End If
End Sub


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Alpha" a écrit dans le message de
news:%
Je souhaite intégrer cette proc directement dans thisworkbook, mais malgré 2
heures de test, cela ne fonctionne pas.
Merci
Alpha

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Long
Sheets("saisie").Select
n = Application.CountA([A3:A10000])
If Application.CountA([B3:B10000]) <> n And _
Application.CountA([C3:C10000]) <> n And _
Application.CountA([D3:D10000]) <> n And _
Application.CountA([E3:E10000]) <> n And _
Application.CountA([F3:F10000]) <> n Then

MsgBox "Il y a une anomalie !" & vbNewLine & "Vous devez saisir correctement
les données dans ce tableau ! " & vbNewLine & "", vbExclamation, " Données
mal saisies !": Exit Sub
Sheets("saisie").Select
End If
Exit Sub
Else
ThisWorkbook.Save
Application.Quit
End Sub




Avatar
Alpha
Merci beaucoup Jean-François, c'est très sympa de ta part, tes explications
sont très claires.
Alpha

"Jean-François Aubert" <à a écrit dans le message de
news:
Salut Alpha,
Le Exit Sub que tu as placé ne fait que de sortir de la macro exécutée
avant la fermeture du

classeur,
mais n'empêche pas sa fermeture.
Il faut donc utilisé le Cancel.
Si la condition du If n'est pas remplie, on met Cancel à True,
et le classeur ne ferme pas, sinon on sauve le classeur et on quitte
Excel.



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Long
Sheets("saisie").Select
n = Application.CountA([A3:A10000])
If Application.CountA([B3:B10000]) <> n And _
Application.CountA([C3:C10000]) <> n And _
Application.CountA([D3:D10000]) <> n And _
Application.CountA([E3:E10000]) <> n And _
Application.CountA([F3:F10000]) <> n Then

MsgBox "Il y a une anomalie !" & vbNewLine & _
"Vous devez saisir correctement les données dans ce tableau ! " &
_

vbNewLine & "", vbExclamation, " Données mal saisies !":

Cancel = True ' le classeur ne ferme pas
Else
ThisWorkbook.Save
Application.Quit
End If
End Sub


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Alpha" a écrit dans le message de
news:%
Je souhaite intégrer cette proc directement dans thisworkbook, mais
malgré 2


heures de test, cela ne fonctionne pas.
Merci
Alpha

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim n As Long
Sheets("saisie").Select
n = Application.CountA([A3:A10000])
If Application.CountA([B3:B10000]) <> n And _
Application.CountA([C3:C10000]) <> n And _
Application.CountA([D3:D10000]) <> n And _
Application.CountA([E3:E10000]) <> n And _
Application.CountA([F3:F10000]) <> n Then

MsgBox "Il y a une anomalie !" & vbNewLine & "Vous devez saisir
correctement


les données dans ce tableau ! " & vbNewLine & "", vbExclamation, "
Données


mal saisies !": Exit Sub
Sheets("saisie").Select
End If
Exit Sub
Else
ThisWorkbook.Save
Application.Quit
End Sub