VBA Date cellule ne s'efface pas

Checko Rosarius

XLDnaute Nouveau
Bonjour à tous, je suis novice en VBA et je me réfère à vous en espérant une possible solution à mon petit problème de code vba. En fait, j'ai un code pour la gestion de date qui me pose problème lorsque je souhaites effacer la date d'une cellule. Dans la plage A1 à A25 dès que j'inscrit une journée, l'année et le mois s'ajoute automatiquement à la date de jour que j'ai inscris selon la valeur de "E1" Mon problème est qu'il m'est impossible de rendre à nouveau les cellules vide A1 à A25 dont j'ai inscris une valeur par la suite. Je ne souhaite pas simplement supprimer la ligne.

Merci à l'avance de votre aide.
 

Pièces jointes

  • Classeur1 v1.xlsm
    20.2 KB · Affichages: 36

TooFatBoy

XLDnaute Barbatruc
Je ne comprends toujours pas à quoi sert cette macro...
Je pense que le problème vient du fait que le format des cellules de ta colonne A n'est pas au format Texte, mais du coup le test IsDate(Target) ne servirait plus.

Début de tentative de correction de ta macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
' Janvier
Dim Saisie As Variant

    Application.EnableEvents = False

    Saisie = Target.Value

    If (Not Intersect(Target, Range("A1:A25")) Is Nothing) And (Saisie <> "") Then
        If IsDate(Saisie) Then
            d = Day(Saisie) + 1
        Else
            d = Saisie
        End If
        If IsDate(DateSerial(Year(Range("E1")), Month(Range("E1")), d)) = True Then
            Target = Year(Range("E1")) & "-" & Month(Range("E1")) & "-" & d
        Else
            Target = ""
        End If
    End If

    Application.EnableEvents = True

End Sub
 
Dernière édition:

Checko Rosarius

XLDnaute Nouveau
Merci pour l'amélioration de la macro, mais malheureusement, j'ai toujours le bog VBA lorsque j'inscris du texte.

Pour t'expliquer un peu le but de cette macro, voici ce qui suit. Je ne peux malheureusement pas attacher le fichier véritable.

En fait, cette macro sera adaptée a près de 60 classeurs Excel comportant 10 onglet chacun. Dans chacun de ces onglets, on y retrouve les 12 mois de l’année disposé de façon à ce qu’un usagé puis compiler divers données selon des sujets précis durant l’année en cours. Mais pour chacun des onglets, ceux-ci ne sont pas tous formaté ou disposé de la même façon pour des besoins différent. Il arrive, à l'occasion qu’un usagé doit inscrire un commentaire au lieu d’une date.

Présentement, pour éviter à l’usager d’inscrire la date complète à chaque donnée compilé, une personnalisation du format des cellules est utilisée. Celle -ci "2016-01-" [$-FR-CA] JJ "2016-02-" [$-FR-CA] JJ ainsi de suite pour chacun des mois et ce à chaque onglets. Donc l'usagé n'a qu'a inscrire le jour et le reste s'ajoute automatiquement selon la plage cible. À tous les ans, les documents sont sauvegardé et à l'aide d'une macro, les données sont tous effacé. Il faut re-formater tous les plages de cellule pour changer l’année. Ce qui représente énormément de cellule et qui représente un travail assez long.

À l’aide de la macro que je souhaite plus optimal, et placer dans tous les documents, je n’aurai qu’à changer la date d’une cellule maître pour modifier tous les documents associés d'un coup.

Merci de ton aide.
 

TooFatBoy

XLDnaute Barbatruc
OK ;)

Actuellement ta macro est pour le moins étrange car, en gros, elle regarde si on a entré une date et dans ce cas elle ne garde que le quantième du mois qu'elle incrémente de 1 et elle lui associe le mois et l'année de la cellule E1 ; mais si on n'a pas entré une date mais un nombre, dans ce cas elle garde ce nombre et elle lui associe le mois et l'année de la cellule E1 pour créer une date.

Est-ce réellement ça que tu veux faire ???
Veux-tu forcer les gens à n'entrer que le quantième du mois ?
Ou veux-tu au contraire leur laisser le choix d'entrer soit uniquement le quantième du mois soit la date complète ?

Et si je comprends bien, tu veux qu'on puisse aussi entrer un commentaire plutôt qu'une "date" ?
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
A défaut d'avoir trouvé autre chose, je te propose déjà ça :
Attention, il faut que la plage de cellules A1:A25 soit au format texte.
Et ton format personnel ne me semble plus utile.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim MaDate As Variant

    Application.EnableEvents = False

    If (Not Intersect(Target, Range("A1:A25")) Is Nothing) And Target <> "" Then

        If IsDate(Target) Then
            If Year(Target) = Year(Range("E1")) And Month(Target) = Month(Range("E1")) Then
                Target = Day(Target)
            Else
                GoTo PasBon
            End If
        End If

        If IsNumeric(Target) Then
            On Error GoTo PasBon
            MaDate = CDate(CDbl(Target) & "/" & Month(Range("E1")) & "/" & Year(Range("E1")))
            Target = Format(MaDate, "yyyy-mm-dd")
        End If

    End If

    GoTo Fin

PasBon:
    Target = ""
Fin:
    Application.EnableEvents = True

End Sub

Principe d'utilisation :

La première partie de la macro permet de saisir une date complète.
Si l'année et le mois de la date saisie correspondent à l'année et au mois de la date contenue en E1, alors la date est mise au format désiré et affichée dans la cellule.
Si l'année ou le mois ne correspondent pas, alors la date est rejetée et la cellule est "vidée".

La deuxième partie de la macro traite les autres cas.
Si c'est du texte qui est saisi, alors il est affiché dans la cellule.
Si c'est un nombre qui fait bien partie du mois de la cellule E1, alors la date est mise au format désiré et affichée dans la cellule.
Dans les autres cas la saisie est rejetée et la cellule est "vidée".


[edit]
Ceci dit, j'imagine (avec beaucoup de retard...) qu'il faut absolument que les cellules de la plage A1:A25 soient au format date pour la suite des traitements... :(
[/edit]

 
Dernière édition:

Checko Rosarius

XLDnaute Nouveau
c'est super, ça fonctionne impeccablement, c'est exactement ce qu'il faut... Cette dernière version de la macro me convient parfaitement. Ce code va m'aider beaucoup et du même coup, j'apprends beaucoup de cette échange. Je te dis merci Marcel32 pour l'aide et l'expérience que tu m'as apporté.

Merci :)
 

TooFatBoy

XLDnaute Barbatruc
Je suis content que la dernière version de la macro te convienne, mais je pense que celle qui est dans le classeur que j'ai joint est "mieux". ;)

Elle est mieux parce qu'elle permet de sélectionner une plage de cellules de la colonne A et d'en effacer le contenu en appuyant sur la touche <Suppr>, sans provoquer d'erreur.
Et l'effacement était justement ton problème initial. ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren