Obliger à remplir une cellule

Résolu/Fermé
simkmil Messages postés 481 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 24 décembre 2024 - 18 mars 2021 à 20:19
simkmil Messages postés 481 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 24 décembre 2024 - 21 mars 2021 à 11:36
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

dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149
18 mars 2021 à 22:10
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
1
simkmil Messages postés 481 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 24 décembre 2024 35
Modifié le 19 mars 2021 à 16:20
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
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 149 > simkmil Messages postés 481 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 24 décembre 2024
19 mars 2021 à 16:45
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.
0
simkmil Messages postés 481 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 24 décembre 2024 35 > dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021
21 mars 2021 à 11:36
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
0