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.

57gestion-perso.xlsm (23.66 Ko)

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. Je suis enfin parvenu à solutionner mon problème.

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.

Rechercher des sujets similaires à "effacer contenu vide"