OVH Cloud OVH Cloud

Cellules remplies

10 réponses
Avatar
Manu
Bonjour,

Je souhaiterais que l'on ne puisse pas quitter un fichier tant que les cases
G13 et G16 ne soient pas remplies. Si les deux cellules sont oublié il
faudrait un message stipulant "vous ne pouvez quitter tant que G13 et G16 ne
sont pas remplis" et bien sur si c'est l'un ou l'autre qui manque(ex : G16)
un message du style "vous ne pouvez quitter tant que G16 n'est pas remplis"
Merci
Manu

10 réponses

Avatar
Garette
Bonjour,

Affiche un message avant fermeture si les cellules G13 et/ou G16 ne sont pas
remplies.
Et laisse le classeur ouvert.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Then
MsgBox "G13 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "G16 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
End Sub
Avatar
Manu
ca fonctionne impec, sauf que j'ai deja Private Sub
Workbook_BeforeClose(Cancel As Boolean) qui me met un message de validation
Si je valide alors mon before close se fait sinon ca ferme sans rien faire.

Ce que je veux c'est si je valide le doc, qu'il me verifie le contenu de G13
et G16 sinon qu'il ne me fasse rien

alors j'ai fais cela mais ca ne fonctionne pas :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Then
MsgBox "G13 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "G16 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then
.......
........

Manu

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

Bonjour,

Affiche un message avant fermeture si les cellules G13 et/ou G16 ne sont
pas
remplies.
Et laisse le classeur ouvert.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Then
MsgBox "G13 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "G16 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
End Sub






Avatar
Garette
Re,

Il faut d'abord gérer le clic sur le bouton Oui ou Non

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6 'Si on clique sur Oui
If Range("G13") = "" Then
MsgBox "G13 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "G16 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
'Rajouter ici le code à executer si l'utilisateur à cliqué sur Oui
Case 7 'Si on clique sur Non
Cancel = True
End Select
End Sub

En version light :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6 'Si on clique sur Oui
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter
..."
Cancel = True
End If
Case 7 'Si on clique sur Non
Cancel = True
End Select
End Sub
Avatar
Manu
alors voila ou j'en suis,

Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

If Range("G13") = "" Then
MsgBox "Vous devez obligatoirement ...."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "Vous devez obligatoirement ......"
Cancel = True
End If
.............
.............
............
............
' si je dis non
Else
Call zaza
ThisWorkbook.Save
end if
end sub

Le probleme, c'est qu'il continu la macro avant que j'ai pu remplir G13 ou
G16, il faudrait que si je n'ai pas remplis G13 il me demande de la remplir
immediatement avant de continuer la macro et idem pour G16

Merci

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

Re,

Il faut d'abord gérer le clic sur le bouton Oui ou Non

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6 'Si on clique sur Oui
If Range("G13") = "" Then
MsgBox "G13 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
If Range("G16") = "" Then
MsgBox "G16 est vide, il faut la remplir avant de Quitter ..."
Cancel = True
End If
'Rajouter ici le code à executer si l'utilisateur à cliqué sur Oui
Case 7 'Si on clique sur Non
Cancel = True
End Select
End Sub

En version light :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6 'Si on clique sur Oui
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter
..."
Cancel = True
End If
Case 7 'Si on clique sur Non
Cancel = True
End Select
End Sub




Avatar
Garette
Re,

Je propose le scénario suivant :

L'utilisateur tente de fermer le fichier.
Apparait alors un message qui lui dit G13 et/ou G16 ne sont pas saisies
La macro active ces cellules.
L'utilisateur les remplit.
L'utilisateur tente de fermer le fichier à nouveau.
Le message "Voulez-Vous valider ce ..." apparait et tu fais le traitement
que tu as à faire.

On est obligé de sortir de ma macro pour mettre à jour les cellules G13 et
G1, à moins que l'utilsateur saisisse les données G13 et G16 à travers une
boite de dialogue ...
De toutes façons, tu ne veux pas fermer le fichier avec que G13 et G16
soient remplies.

Ci-dessous le code adapté :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6
'Inscrire ici le traitement souhaité si l'utilisateur clique sur
Oui
ActiveWorkbook.Save
Case 7
Cancel = True
End Select
End If
End Sub
Avatar
Manu
Voici le code en totalité, ton idée est excellente, c'est exactement ce que
je souhaite, mais je n'arrive pas à bien mettre tes codes là où il faut,
voir ci dessous, à noter que le fichier est en lecture seule à l'ouverture.
Je ne sais pas ou mettre cela :
Case 7
Cancel = True
End Select


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String
'-------------------------------------------
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else

Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture

Repertoire = "C:Documents and SettingsAdministrateurBureaudev"
Fichier = "Cal." & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " " &
Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier
nomFichier = ThisWorkbook.Name
......
.....
ActiveWorkbook.Saved = True

End If
End Sub

Manu


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

Re,

Je propose le scénario suivant :

L'utilisateur tente de fermer le fichier.
Apparait alors un message qui lui dit G13 et/ou G16 ne sont pas saisies
La macro active ces cellules.
L'utilisateur les remplit.
L'utilisateur tente de fermer le fichier à nouveau.
Le message "Voulez-Vous valider ce ..." apparait et tu fais le traitement
que tu as à faire.

On est obligé de sortir de ma macro pour mettre à jour les cellules G13 et
G1, à moins que l'utilsateur saisisse les données G13 et G16 à travers une
boite de dialogue ...
De toutes façons, tu ne veux pas fermer le fichier avec que G13 et G16
soient remplies.

Ci-dessous le code adapté :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6
'Inscrire ici le traitement souhaité si l'utilisateur clique
sur Oui
ActiveWorkbook.Save
Case 7
Cancel = True
End Select
End If
End Sub





Avatar
Manu
Je pense avoir réussi (et je ne sais pas comment) avec cela, mais....
j'explique apres ... :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

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

'-------------------------------------------
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else

'-------------------------------------------

'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

Fichier_Lecture_Ecriture

Repertoire = "C:Documents and SettingsAdministrateurBureaudev"
Fichier = "Cal" & " " & 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
nomFichier = ThisWorkbook.Name
SupprimeToutCodeEtFormulaire nomFichier
ActiveWorkbook.Saved = True

End If

If Msg = 7 Then

Fichier_Lecture_Ecriture
....
.....

ThisWorkbook.Save
End If
End If
End Sub

Le soucis est que meme si je dis Non à mon msgbox, il me demande de remplir
G13 ou G16, si je dis Non, ca ne m'interesse pas de remplir quoi que ce soit
je veux tout de suite qu'il passe à :

Fichier_Lecture_Ecriture
....
.....

ThisWorkbook.Save
End If
End If
End Sub


"Manu" a écrit dans le message de news:
%
Voici le code en totalité, ton idée est excellente, c'est exactement ce
que je souhaite, mais je n'arrive pas à bien mettre tes codes là où il
faut, voir ci dessous, à noter que le fichier est en lecture seule à
l'ouverture.
Je ne sais pas ou mettre cela :
Case 7
Cancel = True
End Select


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String
'-------------------------------------------
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else

Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture

Repertoire = "C:Documents and SettingsAdministrateurBureaudev"
Fichier = "Cal." & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & " "
& Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier
nomFichier = ThisWorkbook.Name
......
.....
ActiveWorkbook.Saved = True

End If
End Sub

Manu


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

Re,

Je propose le scénario suivant :

L'utilisateur tente de fermer le fichier.
Apparait alors un message qui lui dit G13 et/ou G16 ne sont pas saisies
La macro active ces cellules.
L'utilisateur les remplit.
L'utilisateur tente de fermer le fichier à nouveau.
Le message "Voulez-Vous valider ce ..." apparait et tu fais le
traitement que tu as à faire.

On est obligé de sortir de ma macro pour mettre à jour les cellules G13
et G1, à moins que l'utilsateur saisisse les données G13 et G16 à travers
une boite de dialogue ...
De toutes façons, tu ne veux pas fermer le fichier avec que G13 et G16
soient remplies.

Ci-dessous le code adapté :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6
'Inscrire ici le traitement souhaité si l'utilisateur clique
sur Oui
ActiveWorkbook.Save
Case 7
Cancel = True
End Select
End If
End Sub









Avatar
Manu
C'est bon Garette, je pense avoir trouvé, merci de ton aide. Je vais bien
testé.

Manu

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


Je pense avoir réussi (et je ne sais pas comment) avec cela, mais....
j'explique apres ... :

Private Sub Workbook_BeforeClose(Cancel As Boolean)

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

'-------------------------------------------
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else

'-------------------------------------------

'test si On valide ou pas
Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

Fichier_Lecture_Ecriture

Repertoire = "C:Documents and SettingsAdministrateurBureaudev"
Fichier = "Cal" & " " & 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
nomFichier = ThisWorkbook.Name
SupprimeToutCodeEtFormulaire nomFichier
ActiveWorkbook.Saved = True

End If

If Msg = 7 Then

Fichier_Lecture_Ecriture
....
.....

ThisWorkbook.Save
End If
End If
End Sub

Le soucis est que meme si je dis Non à mon msgbox, il me demande de
remplir G13 ou G16, si je dis Non, ca ne m'interesse pas de remplir quoi
que ce soit je veux tout de suite qu'il passe à :

Fichier_Lecture_Ecriture
....
.....

ThisWorkbook.Save
End If
End If
End Sub


"Manu" a écrit dans le message de news:
%
Voici le code en totalité, ton idée est excellente, c'est exactement ce
que je souhaite, mais je n'arrive pas à bien mettre tes codes là où il
faut, voir ci dessous, à noter que le fichier est en lecture seule à
l'ouverture.
Je ne sais pas ou mettre cela :
Case 7
Cancel = True
End Select


Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim Repertoire As String
Dim Fichier As String
Dim nomFichier As String
'-------------------------------------------
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter ..."
Range("G13,G16").Select
Cancel = True
Else

Msg = MsgBox("Voulez-Vous valider ce doc ?", 4)
If Msg = 6 Then

'met le fichier en lecture ecriture
Fichier_Lecture_Ecriture

Repertoire = "C:Documents and SettingsAdministrateurBureaudev"
Fichier = "Cal." & " " & Cells(3, 3).Value & " " & Cells(3, 5).Value & "
" & Cells(13, 7).Value & " " & Day(Now) & _
"-" & Month(Now) & "-" & Year(Now) & ".xls"

ActiveWorkbook.SaveAs Filename:=Repertoire & Fichier
nomFichier = ThisWorkbook.Name
......
.....
ActiveWorkbook.Saved = True

End If
End Sub

Manu


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

Re,

Je propose le scénario suivant :

L'utilisateur tente de fermer le fichier.
Apparait alors un message qui lui dit G13 et/ou G16 ne sont pas saisies
La macro active ces cellules.
L'utilisateur les remplit.
L'utilisateur tente de fermer le fichier à nouveau.
Le message "Voulez-Vous valider ce ..." apparait et tu fais le
traitement que tu as à faire.

On est obligé de sortir de ma macro pour mettre à jour les cellules G13
et G1, à moins que l'utilsateur saisisse les données G13 et G16 à
travers une boite de dialogue ...
De toutes façons, tu ne veux pas fermer le fichier avec que G13 et G16
soient remplies.

Ci-dessous le code adapté :

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Range("G13") = "" Or Range("G16") = "" Then
MsgBox "G13 ou G16 est vide, il faut les remplir avant de Quitter
..."
Range("G13,G16").Select
Cancel = True
Else
Select Case MsgBox("Voulez-Vous valider ce doc ?", 4)
Case 6
'Inscrire ici le traitement souhaité si l'utilisateur clique
sur Oui
ActiveWorkbook.Save
Case 7
Cancel = True
End Select
End If
End Sub













Avatar
Garette
En fait, soit tu veux tester d'abord le contenu des cellules G13 et G16 et
on ne fait rien tant qu'elles ne sont pas remplies.
Soit tu veux afficher le Message d'avertissement et apres tester si G13 et
G16 sont vides.

Dans les 2 cas, c'est une histoire d'imbrication des tests If.
Avatar
Manu
C'est exactement ce que j'ai fait mais avec bcp de temps, j'ai pris ta
réponse et l'ai mis dans divers endroits de la macro et à force .... et
comme on dis, petit a petit ....

Merci encore

"Garette" a écrit dans le message de news:
%
En fait, soit tu veux tester d'abord le contenu des cellules G13 et G16 et
on ne fait rien tant qu'elles ne sont pas remplies.
Soit tu veux afficher le Message d'avertissement et apres tester si G13 et
G16 sont vides.

Dans les 2 cas, c'est une histoire d'imbrication des tests If.