Microsoft 365 générer automatiquement une date selon la condition d'une cellule

BOILEAU

XLDnaute Junior
Bonsoir,
Je n'arrive pas à écrire ma formule VBA. Et pourtant cela me semble simple et j'ai un peu honte de vous demander de l'aide. je suis sur Mac.

J'ai une plage de cellules (E20:BM21) mes cellules sont fusionnées deux par deux (E20etF20 _ G20etH20_.....) pour chacune des lignes 35 et 36. Je souhaiterais inscrire automatiquement la date de modification si une cellule fusionnée par exemple E20etF20 est vide.
En clair :
Si (E20/F20) ou (E21etF21) n'est pas vide, la date du jour de la modification de cette cellule fusionnée doit s'inscrire dans la cellule du dessous E22/F22.. La date de modification ne doit pas se mettre à jours à chaque ouverture du fichier.

Cette procédure ce reproduit sur plusieurs ligne dans ma feuille. Document joint.

Un grand merci d'avance à ceux qui pourront m'aider.

Bonne soirée

Frédéric
 

Pièces jointes

  • PLANNING HDG MODELE VIERGE.xlsm
    152.9 KB · Affichages: 30
Solution
Modifiée comme suit, la procédure semble faire ce que vous souhaitez en plus :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim DtMod, TDatM(), C&, M&, TMois(1 To 1, 1 To 12)
   If Intersect([D:BM], Target) Is Nothing Then Exit Sub
   If Cells(Target.Row, "C") = "DATE MODIF" Then Exit Sub
   If Not IsEmpty(Target(1, 1).Value) Then DtMod = Date
   Set Target = Target(2, 1)
   If Cells(Target.Row, "C") <> "DATE MODIF" Then
      If Not IsEmpty(Target.Value) Then DtMod = Date
      Set Target = Target(2, 1)
   ElseIf Not IsEmpty(Target(-1, 1).Value) Then
      DtMod = Date
      End If
   If Cells(Target.Row, "C") <> "DATE MODIF" Then Exit Sub
   Target.Value = DtMod
   TDatM = Intersect([D:BM], Target.EntireRow).Value
   For...

Phil69970

XLDnaute Barbatruc
Bonjour @BOILEAU, le forum

Je te propose ce fichier :

Tu remarqueras que j'ai fais la modif sur tout le mois de janvier ==> j'ai mis les lignes en vert pale dans les cellules ou il y a la formule pour pouvoir les distinguer. ;)

As toi de continuer pour les autres mois....;)

1618272884842.png

Tu remarqueras que la formule marche grâce à une fonction personnalisé....

1618273282864.png


@Phil69970
 

Pièces jointes

  • PLANNING HDG MODELE VIERGE-V 1.xlsm
    190.8 KB · Affichages: 9
Dernière édition:

BOILEAU

XLDnaute Junior
Bonjour @BOILEAU, le forum

Je te propose ce fichier :

Tu remarqueras que j'ai fais la modif sur tout le mois de janvier ==> j'ai mis les lignes en vert pale dans les cellules ou il y a la formule pour pouvoir les distinguer. ;)

As toi de continuer pour les autres mois....;)

Regarde la pièce jointe 1101994
Tu remarqueras que la formule marche grâce à une fonction personnalisé....

Regarde la pièce jointe 1101995

@Phil69970
Bonjour,
Merci pour ta réactivité et ta solution qui me semble être la bonne.
Sois je suis très mal réveillé, sois je suis débile ! mais comment je dois faire pour trouver la formule que tu as mise dans les lignes vertes ? Je n'ai pas de fichier joint, juste une image en PNG.
La fonction personnalisé est ok.
Merci de ton éclaircissement.
Bonne journée.
Frédéric
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je dirais, dans le module de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Column < 4 Then Exit Sub
   Set Target = Target(2, 1)
   If Cells(Target.Row, "C") <> "DATE MODIF" Then Set Target = Target(2, 1)
   If Cells(Target.Row, "C") <> "DATE MODIF" Then Exit Sub
   Target.Value = Date
   End Sub
 

Dranreb

XLDnaute Barbatruc
Je ne comprends vraiment pas ce qui, dans la solution de @Phil69970, empêcherait la date de changer tout le temps, qu'une cellule au dessus soit modifiée ou non.
Cette version supprimerait la date si on effaçait les deux cellules au dessus :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim DtMod
   If Target.Column < 4 Then Exit Sub
   If Cells(Target.Row, "C") = "DATE MODIF" Then Exit Sub
   If Not IsEmpty(Target(1, 1).Value) Then DtMod = Date
   Set Target = Target(2, 1)
   If Cells(Target.Row, "C") <> "DATE MODIF" Then
      If Not IsEmpty(Target.Value) Then DtMod = Date
      Set Target = Target(2, 1)
   ElseIf Not IsEmpty(Target(-1, 1).Value) Then
      DtMod = Date
      End If
   If Cells(Target.Row, "C") <> "DATE MODIF" Then Exit Sub
   Target.Value = DtMod
   End Sub
 
Dernière édition:

BOILEAU

XLDnaute Junior
Re
je viens d'essayer les deux versions et tout semble ok.
Je vais attendre demain matin pour voire si les dates n'ont pas bougées.

Autre petite question : Je voudrais compter le nombre de cellules de la ligne (D22:BM22) ayant le même mois ? et que ce résultat apparaisse dans une autre cellule ?
Cela veut dire, que si je modifie dans "2 mois" une cellule de la plage (D20:BM21), le compteur de mois doit se mettre à jour.

Merci d'avance !!!

Frédéric
 

BOILEAU

XLDnaute Junior
Re

A mettre dans une cellule (colonne "CA" par exemple)
=NB.SI(D22:BM22;"<"&AUJOURDHUI_STATIC())

@Phil69970
Merci Phil69970
J'ai collé la formule dans une cellule. Mais le nombre reste à zéro.
Peut-être me suis-je mal exprimé. Toutes mes excuses.
Sur la ligne D22:BM22, j'ai deux cellules que j'ai modifiées (lignes 20 ou 21), donc la date de ce jour (14/04/21) s'est automatiquement inscrite dans les deux cellules correspondantes de la ligne 22.
Mais la cellule dans laquelle j'ai collé la formule ci-dessus devrait être égale à 2.
Sur cette ligne 22, je vais avoir des dates différentes et/ou identiques (fonction des modifications). Je peux avoir (14/04/21 ou 18/05/21 ou 26/08/2......). Certaines avec le même mois et d'autres avec un mois différent. L'objectif est que je puisse avoir pour chaque mois de l'année le nombre de cellules qui ont le même mois.
Encore désolé, si je me suis mal exprimé.
Merci d'avance de ton aide.
Frédéric
 

BOILEAU

XLDnaute Junior
Moi il me semble que la formule pourrait parfois être réévaluée à tort.
Alors je préfère mettre à jour la date quand on modifie une cellule au dessus.

Moi il me semble que la formule pourrait parfois être réévaluée à tort.
Alors je préfère mettre à jour la date quand on modifie une cellule au dessus.
Bonjour Dranreb

C'est top et ce matin en ouvrant le fichier la date n'a pas changée.
Après plusieurs test, même si la solution de Phil69970 fonctionne très bien, le fait d'intégrer une fonction dans chacune des cellules (mon tableau est déjà bourré de formules) alourdi considérablement sa rapidité.
Je préfère partir sur ta solution qui consiste à n'avoir qu'une formule VBA pour l'ensemble de la feuille.
Juste un petit soucis, est-il possible de limiter l'intégration automatique de la date de modif aux cellules des des colonnes et lignes intitulées "Date modif" ? Parce que en ce moment des que je modifie n'importe quelle cellule de la feuille, la date de modif s'inscrit dans une cellule en dessous. C'est un peu gênant.

Pourrais-tu me rendre un dernier service ?

Par exemple sur la ligne D22:BM22, j'ai des cellules que j'ai modifiées (lignes 20 ou 21), donc la date du jour de la modification (14/04/21) s'est automatiquement inscrite dans les deux cellules correspondantes de la ligne 22.
Sur cette ligne 22, je vais avoir des dates différentes et/ou identiques (en fonction du jour des modifications). Je peux avoir (14/04/21 ou 18/05/21 ou 26/08/2......). Certaines cellules avec le même mois et d'autres avec un mois différent.
L'objectif est que je puisse créer un tableau (de janvier à décembre) pour chaque mois de l'année et inscrire dans chaque mois de ce tableau le nombre de cellules ayant le même mois.
Pour le mois de Janvier, je vais avoir un tableau (de janvier à décembre) et dans ce tableau obtenir le nombre de cellules ayant le même mois de modification. Et cela pour chaque mois de mon tableau actuel et pour chaque ligne "date modif"
Je te joins le fichier avec le tableau à partir de la colonne CC et des exemples inscrites manuellement.
J'espère avoir été le plus clair possible

Mille merci pour ton aide précieuse.

Frédéric
 

Pièces jointes

  • PLANNING HDG MODELE que VBA.xlsm
    161.2 KB · Affichages: 6

Dranreb

XLDnaute Barbatruc
Bonjour.

Je ne comprends pas vos explications: la date ne peut être changée qu'aux lignes portant "DATE MODIF" en colonne C. Par contre ça s'applique à l'ensemble des colonnes à partir de la D. Vous n'aviez pas dit qu'il y avait d'autre choses au delà de la BM. Peut être vaudrait il mieux remplacer
If Target.Column < 4 Then Exit Sub
par
VB:
   If Intersect([D:BM], Target) Is Nothing Then Exit Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87