Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA beforeclose

6 réponses
Avatar
altais
Bonjour à tous,

J'ai longuement parcouru les forums et lu nombre de post mais je ne trouve pas de reponse à mon problème.
Je suis un vrais novice en macro ou VBA. J'ai créé un classeur excel avec plusieur onglet pour des besoin commerciaux.
Ma feuil1 nommé "R1" est une feuille de qualification commecial d'un RDV, je souhaite pouvoir contraindre mes ptits commerciaux à remplir tous les champs ex cellule B2 = Nom de la société, B3 Adresse de la société etc....
J'ai donc tenter un Beforeclose, mais je n'arrive pas a le faire fonctionner sur plusieur cellule.
Si vous aviez une solution pour moi. Merci

6 réponses

Avatar
Jacky
Bonjour,
Par exemple, en adaptant la plage de saisie obligatoire b2:b5 dans l'exemple
'-----------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set plage = Sheets("R1").[b2: b5]
If Application.CountA(plage) < plage.Count Then
MsgBox "Informations manquantes en feuille R1." & vbLf & "Veuillez compléter.", 64, "Erreurs"
Sheets("R1").Select
Cancel = True
End If
End Sub
'-----------------

--
Salutations
JJ


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

Bonjour à tous,

J'ai longuement parcouru les forums et lu nombre de post mais je ne trouve pas
de reponse à mon problème.
Je suis un vrais novice en macro ou VBA. J'ai créé un classeur excel avec
plusieur onglet pour des besoin commerciaux.
Ma feuil1 nommé "R1" est une feuille de qualification commecial d'un RDV, je
souhaite pouvoir contraindre mes ptits commerciaux à remplir tous les champs ex
cellule B2 = Nom de la société, B3 Adresse de la société etc....
J'ai donc tenter un Beforeclose, mais je n'arrive pas a le faire fonctionner
sur plusieur cellule.
Si vous aviez une solution pour moi. Merci
Avatar
MichD
Bonjour,

Voici un fichier exemple : http://cjoint.com/?AKnqXbxwupZ

Pour les feuilles suivantes "Feuil1", "toto", "titi"
Si une de ces cellules est vides, "B1", "B3", "C5", "D10", "G20"
tu ne peux pas quitter la feuille avant que toutes ces cellules soient remplies
et tu ne peux pas fermer le classeur avant que la feuille active soit remplie...



MichD
------------------------------------------
"altais" a écrit dans le message de groupe de discussion :

Bonjour à tous,

J'ai longuement parcouru les forums et lu nombre de post mais je ne trouve pas
de reponse à mon problème.
Je suis un vrais novice en macro ou VBA. J'ai créé un classeur excel avec
plusieur onglet pour des besoin commerciaux.
Ma feuil1 nommé "R1" est une feuille de qualification commecial d'un RDV, je
souhaite pouvoir contraindre mes ptits commerciaux à remplir tous les champs ex
cellule B2 = Nom de la société, B3 Adresse de la société etc....
J'ai donc tenter un Beforeclose, mais je n'arrive pas a le faire fonctionner
sur plusieur cellule.
Si vous aviez une solution pour moi. Merci
Avatar
MichD
Oublie l'autre classeur,

Correction apportée, utilise ce classeur comme exemple : http://cjoint.com/?AKnrmt561JV



MichD
------------------------------------------
Avatar
altais
MichD a écrit le 13/11/2011 à 17h13 :
Oublie l'autre classeur,

Correction apportée, utilise ce classeur comme exemple :
http://cjoint.com/?AKnrmt561JV



MichD
------------------------------------------


tout d'abord merci pour ta réponse et merci aussi à Jacky. J'ai regardé ton fichier et je suis cidérer par la taille du code.
Je vais essayer de me pencher dessus et de le mettre à ma sauce (comme qui dirai) car je n'ai besoin que d'un blocage de l'onglet 1 (R1 dans mon classeur) et je voudrais que le MsgBox soit personnalisé en fonction de la cellule non rempli ex : "la cellule siret n'est pas complété".
il y a de forte chance pour que vous ayez déjà une sollution :).
Avatar
MichD
Si cela s'applique qu'à une seule feuille,

Tu n'as qu'à copier le code du ThisWorkbook du classeur exemple dans le
Thisworkbook de ton classeur. http://cjoint.com/?AKnxaAtfY20

Cependant, l'apprentissage est à son minimum!




MichD
------------------------------------------
"altais" a écrit dans le message de groupe de discussion :

MichD a écrit le 13/11/2011 à 17h13 :
Oublie l'autre classeur,

Correction apportée, utilise ce classeur comme exemple :
http://cjoint.com/?AKnrmt561JV



MichD
------------------------------------------


tout d'abord merci pour ta réponse et merci aussi à Jacky. J'ai regardé ton
fichier et je suis cidérer par la taille du code.
Je vais essayer de me pencher dessus et de le mettre à ma sauce (comme qui
dirai) car je n'ai besoin que d'un blocage de l'onglet 1 (R1 dans mon classeur)
et je voudrais que le MsgBox soit personnalisé en fonction de la cellule non
rempli ex : "la cellule siret n'est pas complété".
il y a de forte chance pour que vous ayez déjà une sollution :).
Avatar
Gloops
altais a écrit, le 13/11/2011 21:01 :
MichD a écrit le 13/11/2011 à 17h13 :
Oublie l'autre classeur,

Correction apportée, utilise ce classeur comme exemple :
http://cjoint.com/?AKnrmt561JV



MichD
------------------------------------------


tout d'abord merci pour ta réponse et merci aussi à Jacky. J'ai reg ardé ton
fichier et je suis cidérer par la taille du code.
Je vais essayer de me pencher dessus et de le mettre à ma sauce (comm e qui
dirai) car je n'ai besoin que d'un blocage de l'onglet 1 (R1 dans mon c lasseur)
et je voudrais que le MsgBox soit personnalisé en fonction de la cell ule non
rempli ex : "la cellule siret n'est pas complété".
il y a de forte chance pour que vous ayez déjà une sollution :).




Bonjour,

Histoire de ne pas trop compliquer le code, je verrais bien affecter un
code de couleur aux cellules de saisie, une couleur pour les saisies
obligatoires, une pour les autres.

Ainsi le code a juste à parcourir toutes les cellules de UsedRange, et
réagir en fonction de la couleur. Si les cellules de saisie sont toutes
dans la même colonne, ça permet d'avoir une colonne cachée à cô té, avec
les messages d'erreur correspondants.

ça n'empêche pas d'affecter en plus l'attribut déverrouillé aux c ellules
de saisie, et de verrouiller la feuille, pour que le déplacement d'une
cellule de saisie à l'autre soit plus facile.