XL 2016 Vba + formule actualisation

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

frazenbe1976

XLDnaute Nouveau
Bonjour à toutes et tous,

J'ai un problème pour actualiser un script par rapport au résultat d'une formule.
Je m'explique

J'extrais la date d'une chaine de caractère via cette formule :

=DATEVALUE(MID(I2;SEARCH("??/??/*";I2);10))

Ensuite, j'utilise un script qui me permet de sauvegarder l'ancienne date :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 9 Then Exit Sub
If Cel = "" Then Exit Sub
Application.EnableEvents = False
Target.Offset(0, 3) = Cel
Target.Offset(0, 4) = Date
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Cel = Target.Value
End Sub

Sauf que lorsque la date de la formule change, le script ne met pas à jour les données.

Pourriez-vous m'aiguiller sur la solution

Merci d'avance

je mets un exemple d'une ligne de ma table


WOORIGINASSETPARENTLIMITATIONSPRIOSTATUSMRCDESCRIPTIONWODATELAST UPDATEDate sauvegardéeDate vérif
48841349XXXXXX93022A-E40QU-93022AE403WX02Q4===== 9602186 (user =*******) at 28/08/2026 13:48:25 ===== contact ce jour avec armement +
12/10/2021​
28/08/2026​
14/08/4789​
23/07/2024​
 
Bonjour @frazenbe1976

C'est logique et normal, l'évènement "Change" n'est activé que lorsque l'utilisateur fait une modification dans une cellule, si c'est une formule qui fait ça... rien ne peut se produire
Bonjour @wDog66

Ok, je commence à comprendre l'évènement Change, mais par quoi je pourrai le remplacer ?
Je suis novice, et j'ai un peu de mal avec les évènements VBA

Merci d'avance
 
Bonjour,
Je dirais qu'il faut que tu trouves un moyen de faire un fonction personnalisée qui fait référence à la cellule que tu modifies.
Je n'ai pas compris ce que tu fais précisément (quelle cellule est modifiée, quelle cellule reçoit l'ancienne date ni à quoi sert le formule) donc je ne peux rien proposer.
 
Bonjour,
Je dirais qu'il faut que tu trouves un moyen de faire un fonction personnalisée qui fait référence à la cellule que tu modifies.
Je n'ai pas compris ce que tu fais précisément (quelle cellule est modifiée, quelle cellule reçoit l'ancienne date ni à quoi sert le formule) donc je ne peux rien proposer.
Bonjour @Dudu2 ,

La colonne Last update est mise à jour suivant la formule ( qui va rechercher la date dans Description )
Date Sauvergardée fait référence à la date ( Qui se trouve dans Last Update si Last Update est modifiée via la formule )
Date Vérif ( la date du jour si modification )

J'espère avoir été clair 🙂

Bernard
 
Je suppose aussi que ton fichier contient plusieurs lignes du type de celle que tu as copiée dans ton 1er post et que le même problème se pose pour toutes ces lignes.
Mais sans fichier difficile de savoir.
 
Dernière édition:
Avec en L2 -> =SetPreviousUpdateDate(K2) et étirer ou copier sur les lignes suivantes.
VB:
Option Explicit

Private TabLastUpdateDate() As Variant
Private TabPreviousUpdateDate() As Variant
Private Const LastUpdateDateColumn = "K"
Private Const PreviousUpdateDateColumn = "L"
Private Const WorksheetNumber = 1

Function SetPreviousUpdateDate(Cell As Range) As Date
    Dim NewLastUpdateDate As Date

    With ThisWorkbook.Worksheets(WorksheetNumber)
        NewLastUpdateDate = Cell.Value
     
        If Not CDate(TabLastUpdateDate(Cell.Row, 1)) = NewLastUpdateDate Then
            TabPreviousUpdateDate(Cell.Row, 1) = TabLastUpdateDate(Cell.Row, 1)
            TabLastUpdateDate(Cell.Row, 1) = Cell.Value
        End If
     
        SetPreviousUpdateDate = CDate(TabPreviousUpdateDate(Cell.Row, 1))
    End With
End Function

Sub LoadInitialDateValues()
    With ThisWorkbook.Worksheets(WorksheetNumber)
        TabLastUpdateDate = Intersect(.UsedRange, .Columns(LastUpdateDateColumn)).Value
        TabPreviousUpdateDate = Intersect(.UsedRange, .Columns(PreviousUpdateDateColumn)).Value
    End With
End Sub

Sub auto_open()
    Call LoadInitialDateValues
End Sub

Et si des suppressions ou insertions de lignes sont à prévoir:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'In case of delete or insert lines
    Call LoadInitialDateValues
End Sub
 
Dernière édition:
Avec en L2 -> =SetPreviousUpdateDate(K2) et étirer ou copier sur les lignes suivantes.
VB:
Option Explicit

Private TabLastUpdateDate() As Variant
Private TabPreviousUpdateDate() As Variant
Private Const LastUpdateDateColumn = "K"
Private Const PreviousUpdateDateColumn = "L"
Private Const WorksheetNumber = 1

Function SetPreviousUpdateDate(Cell As Range) As Date
    Dim NewLastUpdateDate As Date

    With ThisWorkbook.Worksheets(WorksheetNumber)
        NewLastUpdateDate = Cell.Value
    
        If Not CDate(TabLastUpdateDate(Cell.Row, 1)) = NewLastUpdateDate Then
            TabPreviousUpdateDate(Cell.Row, 1) = TabLastUpdateDate(Cell.Row, 1)
            TabLastUpdateDate(Cell.Row, 1) = Cell.Value
        End If
    
        SetPreviousUpdateDate = CDate(TabPreviousUpdateDate(Cell.Row, 1))
    End With
End Function

Sub LoadInitialDateValues()
    With ThisWorkbook.Worksheets(WorksheetNumber)
        TabLastUpdateDate = Intersect(.UsedRange, .Columns(LastUpdateDateColumn)).Value
        TabPreviousUpdateDate = Intersect(.UsedRange, .Columns(PreviousUpdateDateColumn)).Value
    End With
End Sub

Sub auto_open()
    Call LoadInitialDateValues
End Sub

Et si des suppressions ou insertions de lignes sont à prévoir:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    'In case of delete or insert lines
    Call LoadInitialDateValues
End Sub
Merci @Dudu2

Je teste et je te dis quoi

Bon w-e

Bernard
 
Si tu fais des changements dans le code ou toute autre action qui ré-initialise le projet, pense à exécuter Auto Open() ou LoadInitialDateValues(() avant tout test sinon les tables des valeurs initiales ne seront pas chargées et ça donnera une erreur.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
379
Réponses
3
Affichages
467
Réponses
15
Affichages
1 K
Retour