Date du jour figée sous condition + report de cette date

Bonjour à tous,

J'aurais besoin de remplacer les formules de mon fichier (ci-joint) par une macro permettant d'obtenir la date du jour "figée" (c'est-à-dire n'évoluant pas avec le temps).

Dans mon fichier, les formules actuelles de I9 à I13 sont : si "un certain texte" est inscrit dans H9, alors I9 affiche la date du jour, mais malheureusement non figée. J'aimerais que la date du jour soit figée, tout en respectant la condition, et il me semble que seule une macro peut répondre à ce besoin.

J'ai également une deuxième demande : que si une "date du jour figée" est présente en I9 à I13 (remarque : elle ne peut être présente que dans une et une seule de ces 5 cellules), alors celle-ci se reporte en L9, toujours de façon figée.

Merci d'avance pour votre aide et bon week-end

17date.xlsm (41.20 Ko)

Bonjour,

si "un certain texte" est inscrit dans H9

est ce que ce certain texte est "Ctrl Présence" ou "xx année" ?

re,

voici un exemple, il reste à modifier "un certain texte" pour la condition voulu.

Private Sub Worksheet_Calculate()
If Application.CountA("I9:I13") = 0 Then
    For Each c In Range("H9:H13")
      If c = "un certain texte" Then Cells(c.Row, "I") = Date: Cells(9, "I") = Date
    Next
End If
End Sub

Bonjour et merci Isabelle !

"un certain texte" est "Ctrl présence".

Je vais tester. Merci encore et bonne journée

re,

correction,

Private Sub Worksheet_Calculate()
If Application.CountA("I9:I13") = 0 Then
    For Each c In Range("H9:H13")
      If c = "un certain texte" Then Cells(c.Row, "I") = Date: Cells(9, "L") = Date
    Next
End If
End Sub

Bonjour Isabelle et merci,

J'ai testé, malheureusement ça ne semble pas fonctionner

Je pensais que c'était à cause des formules dans les cellules de la colonne H, mais même en saisissant manuellement "Ctrl Présence", la date du jour figée ne s'affiche pas en colonne I.

Comme je ne comprends pas bien ta macro, je veux bien ton éclairage...

C'est peut-être à cause du choix de Private Sub Worksheet_Calculate() [ je ne comprends pas exactement l'intérêt de Calculate ]

Si tu peux m'aider, merci d'avance

Bonjour blackmalkmus,

une nouvelle tentative,

Bonjour Isabelle et merci !

La macro fonctionne bien.

J'ai juste un seul petit problème et une question. Merci beaucoup d'avance pour votre retour

- Voici le problème : la macro fonctionne très bien, sauf dans le cas où on "rectifie" le résultat du contrôle (= par exemple passage en cellule G9 d’un résultat de + de 99% à - de 99%, c'est-à-dire que la cellule H9 affiche d'abord "Ctrl Présence", puis si le résultat en G9 devient inférieur à 99%, alors la mention "Ctrl Présence" disparaît en H9, mais la date reste en I9 alors que "Ctrl présence" a disparu en H9.

Pensez-vous qu'il y a une manière relativement simple de pallier à ce problème ?

- Et ma question : j'ai déjà une autre macro qui s'exécute sur ce même onglet (voir ci-dessous la macro). Comment intégrer votre macro à la macro déjà existante ? (autrement dit, comment faire fonctionner à la fois une macro "Private Sub Worksheet_Calculate()" et une macro "Private Sub Worksheet_Change(ByVal Target As Range)" ?

Private Sub Worksheet_Change(ByVal Target As Range)

'

Dim iTRow%, iRowUp%

Dim Nom$, Num As Long, adresse As Range

'

Application.EnableEvents = False

'Insertion de cellules vers le bas de colonnes A à I si B24 non vide

iTRow = Target.Row

iRowUp = Target.End(xlUp).Row

If Not Intersect(Target, Range("B:B")) Is Nothing Then

If Target <> "" And Target.Offset(1, -1) = "TOTAL" Then

Range("A" & iTRow + 1 & ":I" & iTRow + 1).Insert shift:=xlDown

Range("E" & iTRow + 2).FormulaLocal = "=SOMME(E" & iRowUp & ":E" & iTRow & ")"

Range("F" & iTRow + 2).FormulaLocal = "=SOMME(F" & iRowUp & ":F" & iTRow & ")"

End If

End If

Set vtarget = Intersect(Target, Columns(14))

If Not (vtarget Is Nothing) Then

For Each varea In vtarget

For Each vcell In varea

If Not (IsEmpty(vcell.Value)) Then

If vcell.Row > 17 Then

Range("K" & vcell.Row).Value = Date

End If

Else

Range("K" & vcell.Row).ClearContents

End If

Next

Next

End If

If Not Intersect(Target, Range("I9:I13")) Is Nothing Then

Range("L9").Value = Range("I8").End(xlDown).Value

Nom = ActiveSheet.Name 'Nom client sous forme de texte

Num = ActiveSheet.Range("C9").Value 'Nom client

Set adresse = Sheets("Recap_dossiers").Range("C:C").Cells.Find(Num)

Sheets("Recap_dossiers").Range("E" & adresse.Row).Value = Sheets(Nom).Range("L9").Value

Sheets(Nom).Select

End If

If Not Intersect(Target, Range("R5")) Is Nothing Then

Nom = ActiveSheet.Name

Num = ActiveSheet.Range("C9").Value

Set adresse = Sheets("Recap_dossiers").Range("C:C").Cells.Find(Num)

Sheets("Recap_dossiers").Range("G" & adresse.Row).Value = Sheets(Nom).Range("R5").Value

End If

'

Application.EnableEvents = True

'

End Sub

re,

ça ira mieux avec tout les données en main

Le voici ci-joint

Merci !

11date-complet.xlsm (87.38 Ko)

Bonjour blackmalkmus,,

à tester,

Bonjour Isabelle et merci

Malheureusement, j'ai l'impression qu'on aboutit au même résultat.

(je remets le même fichier en PJ, que j'ai renommé "Date_v3")

Si je saisis par exemple 10 en F35, le résultat en G9 devient < 99%, donc la décision en H9 devient "2e contrôle", mais la date de fin reste en I9, alors que la date de fin ne doit s'afficher en I9 uniquement si "Ctrl Présence" est présent en H9.

En fait, dès lors qu'il y a autre chose que "Ctrl Présence" en H9, H10, H11, H12 ou H13, alors il faut que la cellule correspondante en colonne I soit vide. Autrement dit, si H9 vide ou si "2e contrôle" en H9, alors I9 et L9 vides ; si H10 vide ou si "3e contrôle" en H10, alors I10 et L10 vides ; etc... jusqu'à H13.

Merci d'avance si tu trouves la solution

4date-v3.xlsm (85.07 Ko)

re,

là je comprend que tu veux que la date soit figé, mais aussi quelle puisse être effacer et remplacer.

je ne crois pas que ce soit possible.

Ce n'est pas grave, merci beaucoup pour le temps que tu as consacré à ma demande

Bonjour Isabelle,

Merci beaucoup pour ton retour sur ma demande de "Report de données d'une cellule contenant une formule". Je vais tester et faire un retour.

Je reviens vers toi sur le sujet de date figée sous condition et report de cette date. J'ai dans mon fichier la macro ci-dessous. Celle-ci inscrit la date figée en colonne K si la colonne N n'est pas vide. Si N n'est pas vide, alors la date figée s'inscrit en K, et si j'efface la donnée en N (donc N à nouveau vide) => la date s'efface en K.

Je me demandais s'il serait possible d'adapter cette macro pour dire : si "Ctrl Présence" s'inscrit en H9-H13, alors la date figée s'inscrit en I9-I13 et en L9, et si "Ctrl Présence" disparaît, alors I9-I13 et L9 redeviennent vides.

Merci d'avance de ton avis et de ton aide

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Set vtarget = Intersect(Target, Columns(14))

If Not (vtarget Is Nothing) Then

For Each varea In vtarget

For Each vcell In varea

If Not (IsEmpty(vcell.Value)) Then

If vcell.Row > 17 Then

Range("K" & vcell.Row).Value = Date

End If

Else

Range("K" & vcell.Row).ClearContents

End If

Next

Next

End If

Application.EnableEvents = True

End Sub

Bonjour blackmalkmus,

à tester,

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Set vtarget = Intersect(Target, Columns(14))
If Not (vtarget Is Nothing) Then
    For Each varea In vtarget
        For Each vcell In varea
            If Not (IsEmpty(vcell.Value)) Then
                If vcell.Row > 17 Then
                    Range("K" & vcell.Row).Value = Date
                End If
            Else
                Range("K" & vcell.Row).ClearContents
            End If
        Next
    Next
End If

For Each c In Range("H9:H13")
  If c = "Ctrl Présence" Then
    Cells(c.Row, "I") = Date
    Range("L9") = Date
  End If
Next

Application.EnableEvents = True
End Sub

re,

en espérant que cette fois ci soit la bonne

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Set vtarget = Intersect(Target, Columns(14))
If Not (vtarget Is Nothing) Then
    For Each varea In vtarget
        For Each vcell In varea
            If Not (IsEmpty(vcell.Value)) Then
                If vcell.Row > 17 Then
                    Range("K" & vcell.Row).Value = Date
                End If
            Else
                Range("K" & vcell.Row).ClearContents
            End If
        Next
    Next
End If

For Each c In Range("H9:H13")
    If c.Value = "Ctrl Présence" Then
        Cells(c.Row, "I") = Date
        Range("L9") = Date
    Else
        Cells(c.Row, "I").ClearContents
    End If
Next

If Application.CountA(Range("I9:I13")) = 0 Then Range("L9").ClearContents

Application.EnableEvents = True
End Sub

Bonjour Isabelle

Ca fonctionne ! Merci beaucoup , le seul petit souci c'est que L9 ne se reporte plus vers la colonne E de Recap_dossiers, et je ne sais pas pourquoi...

J'ai intégré tes corrections à la "macro globale de l'onglet Modele" de Date_v4.xlsm (ci-joint), au cas où tu arrives à percer ce mystère...

Merci d'avance !

Et bonne soirée

2date-v4.xlsm (82.31 Ko)

re,

quel sont les données qui doivent être transférées sur l'onglet Recap_dossiers ?

La date contenue dans L9 de l'onglet Modele (qui est aussi celle qui s'affiche en colonne I quand "Ctrl Présence" s'affiche en colonne H), qui doit se reporter sur la ligne correspondante du client en colonne E de l'onglet Recap_dossiers.

De la même manière que S2 de Modele se reporte en colonne H de Recap_dossiers.

De la même manière que R5 de Modele se reporte en colonne E de Recap_dossiers.

Merci d'avance !

Rechercher des sujets similaires à "date jour figee condition report cette"