J'ai un code qui doit ouvrir un MsgBox si les conditions ne sont pas respectées :
Code:
Sub MesPerso3(Art, Col)
MsgBox "Veuillez renseigner l'intégralité des champs avant de débuter la saisie des données.", vbExclamation, "Module de gestion"
ActiveCell.ClearContents
End Sub
Mon soucis est que la MsgBox s'affiche et la cellule active se vide mais ensuite impossible de fermer la MsgBox après avoir cliqué sur "OK".
Quelqu'un à t il une idée, une solution à me proposer ?
Sub MesPerso3(Art, Col)
If MsgBox("Veuillez renseigner l'intégralité des champs avant de débuter la saisie des données.", vbExclamation, "Module de gestion") = vbOK Then
activecell.ClearContents
End Sub
N'ayant pas de fichier exemple, il est difficile de se prononcer. Un cas qui me vient à l'esprit est celui où votre procédure MesPers3 serait appelée via une procédure évènementielle de feuille de type Worksheet_Change(ByVal Target As Range).
Dans ce cas:
la procédure MesPerso3 affiche la boite de dialogue MsgBox
un clique sur le bouton referme la boîte de dialogue Msgbox
on efface ensuite la cellule ActiveCell
ce faisant, Excel détecte une modification de la cellule ActiveCell
Excel relance donc la procédure évènementielle Worksheet_Change(...) qui elle-même relance MesPerso3
la procédure MesPerso3 affiche la boite de dialogue MsgBox
un clique sur le bouton referme la boîte de dialogue Msgbox
on efface ensuite la cellule ActiveCell
ce faisant, Excel détecte une modification de la cellule ActiveCell
Excel relance donc la procédure évènementielle Worksheet_Change(...) qui elle-même relance MesPerso3
la procédure MesPerso3 affiche la boite de dialogue MsgBox
un clique sur le bouton referme la boîte de dialogue Msgbox
on efface ensuite la cellule ActiveCell
ce faisant, Excel détecte une modification de la cellule ActiveCell
Excel relance donc la procédure évènementielle Worksheet_Change(...) qui elle-même relance MesPerso3
la procédure MesPerso3 affiche la boite de dialogue MsgBox
etc.
et ainsi de suite, jusqu'à la fin des temps... (et c'est loin la fin des temps!)
à moins d'appuyer sur Ctrl+Pause
Pour éviter cela, il faut empêcher la détection des évènements par Excel avant d'effacer la cellule ActiveCell et la rétablir après l'effacement.
- Leakim : j'avais déjà essayé cette solution mais cela ne fonctionnait pas non plus.
- Mapomme : vous avez bien cerné la chose et la modification de mon code par le votre résout parfaitement mon problème.
Merci pour vos deux réponses et m'avoir permis d'avancer sur mon fichier.