OVH Cloud OVH Cloud

rendre obligatoire la saisie dans des cellules

12 réponses
Avatar
patrick
je voudrais rendre obligatoire la saisie dans certaines=20
cellules de ma feuille. Je suppose qu'il me faut un code=20
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi =E0 chrisv

10 réponses

1 2
Avatar
Joel
Bonsoir,

par exemple, à placer dans le module privé "ThisWorkbook", et en supossant
que ce sont toujours les mêmes cellules sur les différentes feuilles qui
doivent être saisies...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim oSheet As Worksheet
Dim oCell As Range
For Each oSheet In Worksheets
For Each oCell In oSheet.Range("Plage à tester")
If oCell.Value = "" Then
MsgBox "La Cellule " & oCell.Address & Chr(10) & _
"de la feuille " & oSheet.Name & " n'a pas été saisie" & Chr(10) & _
"Le classeur ne peut pas être fermé"
oSheet.Select
oCell.Select

Cancel = rue
End If
Next
Next
End Sub

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"patrick" a écrit dans le message de
news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv
Avatar
ChrisV
merci aussi à chrisv


euh...
Bah... ça fait toujours plaisir ! ;-)

Plus sérieusement, pourrais-tu préciser ta question...
- limiter la saisie à une plage de cellules prédéfinies ?
- vérifier la présence d'infos avant fermeture (ou autre évènement...)
- etc...


ChrisV


"patrick" a écrit dans le message de
news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv

Avatar
dadda
Bonjour;
En supposant que les deux cellules qui doivent être
impérativement servies avant enregistrement du classeur
soient A1 et D5 (Tu pourras adapter), le code suivant peut
servir :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean,
Cancel As Boolean)
If Range("A1").Value = "" Then
MsgBox "Il faut servir la cellule A1 "
End If
Cancel = True
If IsEmpty(Range("A1")) = False Then
If Range("D5").Value = "" Then
Cancel = True
MsgBox "servir aussi D5"
Else
Cancel = False
End If
End If
End Sub

Amicalement

Dadda
-----Message d'origine-----
Bonsoir,

par exemple, à placer dans le module
privé "ThisWorkbook", et en supossant

que ce sont toujours les mêmes cellules sur les
différentes feuilles qui

doivent être saisies...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim oSheet As Worksheet
Dim oCell As Range
For Each oSheet In Worksheets
For Each oCell In oSheet.Range("Plage à tester")
If oCell.Value = "" Then
MsgBox "La Cellule " & oCell.Address & Chr(10) & _
"de la feuille " & oSheet.Name & " n'a pas été
saisie" & Chr(10) & _

"Le classeur ne peut pas être fermé"
oSheet.Select
oCell.Select

Cancel = rue
End If
Next
Next
End Sub

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"patrick" a écrit
dans le message de

news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv


.



Avatar
PATRICK
-----Message d'origine-----
merci aussi à chrisv


euh...
Bah... ça fait toujours plaisir ! ;-)

Plus sérieusement, pourrais-tu préciser ta question...
- limiter la saisie à une plage de cellules prédéfinies ?
- vérifier la présence d'infos avant fermeture (ou autre
évènement...)

- etc...


ChrisV


"patrick" a écrit
dans le message de

news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv


.
Sur ma feuille de calcul, j'ai en b2 une date, en d4 un n°

de piece, en d6 un nom rempli par une liste déroulante, en
d8 une quantité, en d10 une quantité et en d12 une
quantité. Mon souhait, rendre la saisie obligatoire dans
les cellules b2,d4,d6.
Si b2 ="" message saisie obligatoire,
ou peut-être plus simplement au moment de l'enregistrement.

Sans vouloir abuser de ta gentillesse pourrait tu me dire
comment faire egalement pour faire afficher une liste

déroulante de la meme facon qu'un inputbox et recuperer
dans une variable la reponse utilisateur ?

merci d'avance
patrick


Avatar
patrick
-----Message d'origine-----
Bonjour;
En supposant que les deux cellules qui doivent être
impérativement servies avant enregistrement du classeur
soient A1 et D5 (Tu pourras adapter), le code suivant
peut

servir :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As
Boolean,

Cancel As Boolean)
If Range("A1").Value = "" Then
MsgBox "Il faut servir la cellule A1 "
End If
Cancel = True
If IsEmpty(Range("A1")) = False Then
If Range("D5").Value = "" Then
Cancel = True
MsgBox "servir aussi D5"
Else
Cancel = False
End If
End If
End Sub

Amicalement

Dadda
-----Message d'origine-----
Bonsoir,

par exemple, à placer dans le module
privé "ThisWorkbook", et en supossant

que ce sont toujours les mêmes cellules sur les
différentes feuilles qui

doivent être saisies...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim oSheet As Worksheet
Dim oCell As Range
For Each oSheet In Worksheets
For Each oCell In oSheet.Range("Plage à tester")
If oCell.Value = "" Then
MsgBox "La Cellule " & oCell.Address & Chr(10) & _
"de la feuille " & oSheet.Name & " n'a pas été
saisie" & Chr(10) & _

"Le classeur ne peut pas être fermé"
oSheet.Select
oCell.Select

Cancel = rue
End If
Next
Next
End Sub

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"patrick" a écrit
dans le message de

news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv

a dada
merci de ton aide


.j'ai mis ton code comme indiqué dans wookbook, cela ne
fonctionne pas correctement car sur ma feuille j'ai créer


une procedure d'enregistrement perso a partir d'un menu.
Cet enregistrement comporte une macro qui remet a zero
toutes les zones de ma feuille ce qui embrouille un peu
ton code qui veut lui que les cellules soient non vides.
j'ai donc mis ton code dans une macro nommée control que
j'ai ajouter au debut de mes macros composants ma
procedure d'enregistrement afin qu'il control avant
d'enregistrer. ce qu'il me faudrait c'est que si une des
cellules n'est pas remplie il affiche un message, mais
surtout que cela bloque tout le reste des macros qui sont
derriere et que l'utilisateur soit obligé de saisir cette
cellule.
je ne suis peut etre pas très clair, mais j'espere que tu
comprendras.
encore merci pour ton aide

.





Avatar
Shnoulle
Salut Patrick,

Tu transforme ta macro en fonction

function TestVal() as boolean
testvalúlse
' La série de test
est tu remplace cancel par testval
end function

Et tu lance ta macro par

sub main()

if not(tesval()) then
tes macros
endif

endsub




patrick wrote:
-----Message d'origine-----
Bonjour;
En supposant que les deux cellules qui doivent être
impérativement servies avant enregistrement du classeur
soient A1 et D5 (Tu pourras adapter), le code suivant


peut

servir :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As


Boolean,

Cancel As Boolean)
If Range("A1").Value = "" Then
MsgBox "Il faut servir la cellule A1 "
End If
Cancel = True
If IsEmpty(Range("A1")) = False Then
If Range("D5").Value = "" Then
Cancel = True
MsgBox "servir aussi D5"
Else
Cancel = False
End If
End If
End Sub

Amicalement

Dadda

-----Message d'origine-----
Bonsoir,

par exemple, à placer dans le module


privé "ThisWorkbook", et en supossant

que ce sont toujours les mêmes cellules sur les


différentes feuilles qui

doivent être saisies...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim oSheet As Worksheet
Dim oCell As Range
For Each oSheet In Worksheets
For Each oCell In oSheet.Range("Plage à tester")
If oCell.Value = "" Then
MsgBox "La Cellule " & oCell.Address & Chr(10) & _
"de la feuille " & oSheet.Name & " n'a pas été


saisie" & Chr(10) & _

"Le classeur ne peut pas être fermé"
oSheet.Select
oCell.Select

Cancel = rue
End If
Next
Next
End Sub

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"patrick" a écrit


dans le message de

news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv

a dada



merci de ton aide

.j'ai mis ton code comme indiqué dans wookbook, cela ne



fonctionne pas correctement car sur ma feuille j'ai créer
une procedure d'enregistrement perso a partir d'un menu.
Cet enregistrement comporte une macro qui remet a zero
toutes les zones de ma feuille ce qui embrouille un peu
ton code qui veut lui que les cellules soient non vides.
j'ai donc mis ton code dans une macro nommée control que
j'ai ajouter au debut de mes macros composants ma
procedure d'enregistrement afin qu'il control avant
d'enregistrer. ce qu'il me faudrait c'est que si une des
cellules n'est pas remplie il affiche un message, mais
surtout que cela bloque tout le reste des macros qui sont
derriere et que l'utilisateur soit obligé de saisir cette
cellule.
je ne suis peut etre pas très clair, mais j'espere que tu
comprendras.
encore merci pour ton aide

.






Avatar
-----Message d'origine-----
Salut Patrick,

Tu transforme ta macro en fonction

function TestVal() as boolean
testvalúlse
' La série de test
est tu remplace cancel par testval
end function

Et tu lance ta macro par

sub main()

if not(tesval()) then
tes macros
end if

end sub
salut et merci a toi shnoulle
voici suivant tes conseils ma macro transformée en

function
j'ai donc mis en tete de ma macro d'enregistrement ta
macro main,cela crontrol mais n'arrete pas le reste des
macros présentent derriere.

Function Testval() As Boolean
Testval = False

If Range("B2").Value = "" Then
MsgBox "Il faut saisir la date "
Testval = True
End If
If IsEmpty(Range("B2")) = False Then
If Range("D4").Value = 0 Then
Testval = True
MsgBox "Il faut saisir le N° de Pièce"
Else
Testval = False
End If
End If

End Function


Sub main()

If Not (Testval()) Then ?
End If

End Sub





Avatar
Shnoulle
Salut anonymous

Actuellement je suppose que pour lancer ta macro qui marche bine, tu
clique sur un bouton qui lance MaMacroQuiMarcheDuTonnerre

Alors ca fait

sub TestLesConditions()

if not(TesVal()) then MaMacroQuiMarcheDuTonnerreDeDieu

End sub

Oh Zut , remplacé MaMacroQuiMarcheDuTonnerreDeDieu par
MaMacroQuiMarcheDuTonnerre selon mes suppositions

Et tu remplace la macro associé à ton bouton par TestLesConditions

En espérant que ca fonctionne

A+

Le shnoulle




wrote:
-----Message d'origine-----
Salut Patrick,

Tu transforme ta macro en fonction

function TestVal() as boolean
testvalúlse
' La série de test
est tu remplace cancel par testval
end function

Et tu lance ta macro par

sub main()

if not(tesval()) then
tes macros
end if

end sub
salut et merci a toi shnoulle


voici suivant tes conseils ma macro transformée en
function
j'ai donc mis en tete de ma macro d'enregistrement ta
macro main,cela crontrol mais n'arrete pas le reste des
macros présentent derriere.


Function Testval() As Boolean


Testval = False
If Range("B2").Value = "" Then
MsgBox "Il faut saisir la date "
Testval = True
End If
If IsEmpty(Range("B2")) = False Then
If Range("D4").Value = 0 Then
Testval = True
MsgBox "Il faut saisir le N° de Pièce"
Else
Testval = False
End If
End If

End Function


Sub main()

If Not (Testval()) Then ?
End If

End Sub








Avatar
patrick
-----Message d'origine-----

-----Message d'origine-----
Salut Patrick,

Tu transforme ta macro en fonction

function TestVal() as boolean
testvalúlse
' La série de test
est tu remplace cancel par testval
end function

Et tu lance ta macro par

sub main()

if not(tesval()) then
tes macros
end if

end sub
salut et merci a toi shnoulle
voici suivant tes conseils ma macro transformée en

function
j'ai donc mis en tete de ma macro d'enregistrement ta
macro main,cela crontrol mais n'arrete pas le reste des
macros présentent derriere.

Function Testval() As Boolean
Testval = False

If Range("B2").Value = "" Then
MsgBox "Il faut saisir la date "
Testval = True
End If
If IsEmpty(Range("B2")) = False Then
If Range("D4").Value = 0 Then
Testval = True
MsgBox "Il faut saisir le N° de Pièce"
Else
Testval = False
End If
End If

End Function


Sub main()

If Not (Testval()) Then ?
End If

End Sub





.




Avatar
ChrisV
Bonjour Patrick,

Il pourrait y avoir un message d'alerte (toutes les x secondes) afin de
prévenir l'utilisateur de la nécessité de renseigner ces cellules...
(et puis faire un p'tit contrôle avant fermeture ou/et enregistrement du
classeur, comme le proposait dada...)

Avec la plage B2, D4 et D6 nommée ici Zn

Dans un module

Option Explicit
Public timR As Variant
Public Const proC = "alerT"

Sub ctrL()
timR = TimeValue(Now + TimeValue("00:00:30"))
Application.OnTime timR, proC
End Sub

Sub alerT()
If Application.CountA([Zn]) < 3 Then msG
ctrL
End Sub

Sub msG()
MsgBox "Vous devez renseigner: " _
& [Zn].SpecialCells(xlCellTypeBlanks).Address(0, 0), vbExclamation
End Sub


Dans la feuille de code de ThisWorkbook

Private Sub Workbook_Open()
alerT
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Application.CountA([Zn]) < 3 Then
msG
Cancel = True
End If
End Sub


ChrisV


"PATRICK" a écrit dans le message de
news:4d0a01c473d0$d95ba430$

-----Message d'origine-----
merci aussi à chrisv


euh...
Bah... ça fait toujours plaisir ! ;-)

Plus sérieusement, pourrais-tu préciser ta question...
- limiter la saisie à une plage de cellules prédéfinies ?
- vérifier la présence d'infos avant fermeture (ou autre
évènement...)

- etc...


ChrisV


"patrick" a écrit
dans le message de

news:06ba01c4733d$24e31e40$
je voudrais rendre obligatoire la saisie dans certaines
cellules de ma feuille. Je suppose qu'il me faut un code
vba dans worksheet, mais lequel ?

Merci de votre aide

merci aussi à chrisv


.
Sur ma feuille de calcul, j'ai en b2 une date, en d4 un n°

de piece, en d6 un nom rempli par une liste déroulante, en
d8 une quantité, en d10 une quantité et en d12 une
quantité. Mon souhait, rendre la saisie obligatoire dans
les cellules b2,d4,d6.
Si b2 ="" message saisie obligatoire,
ou peut-être plus simplement au moment de l'enregistrement.

Sans vouloir abuser de ta gentillesse pourrait tu me dire
comment faire egalement pour faire afficher une liste

déroulante de la meme facon qu'un inputbox et recuperer
dans une variable la reponse utilisateur ?

merci d'avance
patrick


1 2