Effacer contenu cellule si cellule vide
Bonjour,
Faisant suite à cette discussion https://forum.excel-pratique.com/excel/problemes-avec-evenements-feuille-t91639.html , Theze que je salue m'avait aidé à trouver une solution.
Aujourd'hui, je m'aperçois que j'avais omis une condition sur mon fichier de travail.
Avec ce code, j’insère une validation en colonne C. Je voudrais après avoir fait une sélection avec cette validation,
vider la cellule si la cellule B est vide (en B, on doit saisir une date).
Et ce, pour ne pas permettre la suite des renseignements sur la ligne sans date.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cel As Range
If Intersect(Range("C9:C1048576"), Target) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
Set Cel = Cells(Target.Row, 3).End(xlUp).Offset(1)
If Cel.Address = Target.Address Or Cel.Value <> "" Then
If Target.Value = "" Then InsererValidation
Else
Application.EnableEvents = False
Cel.Select
Application.EnableEvents = True
End If
End Sub
En vous remerciant. Le code que j'ai essayé a fait planté excel (excel a cassé de fonctionner) à la suite d'un message 'mémoire insuffisante'.
bonjour
mon avis perso rien que de moi
ton idée n'est pas conforme à la pratique du travail sur logiciel applicatif : on n'efface pas automatiquement des données sous le nez de l'utilisateur. Par contre on l'avertit des erreurs de saisie. Par un message, ou par une MFC. si on peut on guide sa saisie (listes déroulantes) mais pas possible ici.
Mets une MFC (cellule date en rouge si vide). Simple et fiable.
Bonjour Jmd,
Merci pour tes conseils. En fait, J'avais prévu un message mais comme mon code avait planté excel, je n'ai pas osé le poster.
L'idée de départ était d'insérer par macro un liste de validation au fur et à mesure sans possibilité de lignes vides (saut de ligne).
La macro fonctionne bien. Mais j'ai voulu ajouter la contrainte de la date, c-à-d pour éviter des lignes sans date d'où l'idée d'afficher un message et vider la cellule.
J'ai réussi à faire quelque chose le seul problème, la macro initiale ne fonctionne plus. On peut avoir des lignes vides.
Voici le code que j'ai rajouté
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
If Intersect(Range("c9:c1048576"), Target) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
Set Cel = Cells(Target.Row, 3).End(xlUp).Offset(1)
If Cel.Address = Target.Address Or Cel.Value <> "" Then
If Target.Value <> "" And Target.Offset(0, -1).Value = "" Then
Target.ClearContents
MsgBox "Date obligatoire", vbCritical, "Date"
Else
Application.EnableEvents = False
Cel.Offset(,-1).Select
Application.EnableEvents = True
End If
End If
End Sub
Merci beaucoup.
oui, je comprends
mais c'est les macros. On ne peut rien faire évoluer sans créer un problème.
c'est pourquoi je déconseille les macros.
un tableau se met sous forme de tableau
et on saisit des lignes les unes sous les autres
autant de listes de validation que tu veux
des MFC à la pelle si tu veux
des TCD pour les états
c'est tout
rapide, facile, et maintenable sans difficulté
pas de VBA ni usf
si tu veux à tout prix du VBA, je passe la parole à des spécialistes. Il y en des excellents ici.
bonne journée
Encore merci.
Il fallait juste supprimer la ligne au lieu de vider la cellule.
Target.EntireRow.Delete au lieu de Target.ClearContents.
Mais je voudrais bien savoir, pourquoi après effacement la cellule n'est plus considérée comme vide.
J'ai essayé IsEmpty mais ça n'a pas fonctionné (toujours considérée comme non vide).
Merci pour la participation. C'est du vba que je voulais.