Obliger à remplir une cellule [Résolu]

Signaler
Messages postés
317
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
22 juin 2021
-
Messages postés
317
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
22 juin 2021
-
Bonjour, j'ai encore besoin de vous !
Sur une feuille, j'ai une cellule (J6) qui doit absolument être remplie par le préposé.
Je veux donc rendre ce remplissage obligatoire. Pour cela j'ai fais une boucle :
if ("J6")="" then
msgbox "vous devez remplir la cellule J6"
end if

Le problème est que le message apparait bien, mais le programme continue que la cellule soit remplie ou non.
J'ai donc précédé mon code par
Do While ("J6")<> ""
et terminé par Loop

et ici ça tourne sans arret et le seul moyen que j'ai eu pour sortir de mon programme fut d'arrêter Excel]. et pas moyen d'aller inscrire quelque chose dans J6.

Merci de votre aide

1 réponse

Messages postés
1710
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
137
Salut,

ici ça tourne sans arret
Ça veut dire que ta macro se lance dès l'ouverture du classeur en question et s'arrête lorsque tu fermes le classeur, non ?

Ton code VBA ressemble à ça ?

do while range("J6").value = ""
    msgbox "Vous devez remplir la cellule J6"
loop


Dans ce code, on ne laissera jamais la possibilité d'écrire dans J6, ni dans d'autres cellules.

Tu as 2 options. La première est la plus simple. En imaginant que l'utilisateur va fermer le classeur, tu lances, dans le gestionnaire d'événements, la macro lorsque l'utilisateur ferme le classeur pour le contraindre à remplir cette cellule.
Ou, mieux, car s'il a passé 3h dans le classeur et qu'il veut à tout prix sortir de celui-ci, la contrainte va plus l'énerver qu'autre chose. Tu ajoutes dans le do while un inputbox :

do while range("J6").value = ""
    range("J6").value = inputbox("Vous devez remplir la cellule J6.")
loop
do while vartype(range("J6").value) <> vbString
    range("J6").value = inputbox("La cellule J6 doit contenir du texte."
loop
Messages postés
317
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
22 juin 2021
26
Merci beaucoup,
je met immédiatement ceci en test.

c'est super, ça marche très bien SAUF que ... j'avais omis de dire que dans J6 j'ai une liste déroulante ...
et mon input box ne me le permet pas.
Aurais tu une alternative ?

merci
Messages postés
1710
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021
137 >
Messages postés
317
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
22 juin 2021

Salut,

Je fais de la programmation, mais, VBA, je connais peu.
Rien n'empêche de faire autant d'inputbox que d'éléments à entrer dans la liste déroulante.

Imaginons que ta liste déroulante doive contenir 5 éléments : ["avion", "voiture", "moto", "vélo", "bateau"]
Tu crées un Array de String de 5 éléments. Et tu boucles 5 fois un inputbox.

Par contre, je viens de me rendre compte que dans mon message 1, la première option va bloquer Excel, donc, il ne faut pas la faire.
Messages postés
317
Date d'inscription
mardi 19 février 2008
Statut
Membre
Dernière intervention
22 juin 2021
26 >
Messages postés
1710
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
13 mai 2021

Merci, par contre, j'ai trouvé (pas seul mais avec l'aide d'un internaute) la solution suivante qui me convient :
For Each c In [Obligatoires]
If c.Value = "" Then nb = nb + 1
Next c
'If [K47] = "" And ([W44] = "autre service" Or [W44] = "PRS directe") Then nb = nb + 1
If nb > 0 Then MsgBox "Il manque " & nb & " champs obligatoires": Exit Sub

je vais donc mettre ce post en résolu.
merci de ton aide. et bon week end