Récupérer la valeur ancienne/précédente d'une cellule

Bonjour à tous,

J'ai deux cellules das lesquelles on entre une valeur, exemple :

B1: 1

B2: 2

Ensuite je modifie ces valeurs manuellement :

B1: 3

B2: 4

Je veux que mon bouton "Reset" remette les anciennes valeurs en B1 et B2 c'est à dire B1: 1 et B2: 2

Je vous laisse un fichier exemple pour vous éviter de créer un fichier.

Bonjour,

un petite contribution :

A l'ouverture, mise en mémoir des deux valeurs B1 et B2.

A chaque changement, mise en mémoire des nouvelles valeurs dans les tableaux respectifs et incrémentation d'un compteur

A chaque clic sur le bouton reset, décrémentation du compteur et affichage des valeurs précédentes des cellules B1 et B2.

@ bientôt

LouReeD

Merci Beaucoup LouReeD,

Ta solution fait encore plus que ce que je demandais, je laisse le sujet ouvert le temps de l'adapter au classeur sur lequel je travaille (et si jamais j'ai des questions )

Bonsoir,

on pourrait aller plus loin !

En effet, en quittant l'application il suffirait de faire la sauvegarde des tableaux et du compteur Undo sur une feuille du classeur, et à l'ouverture on le télécharge dans VBA, ainsi que Undo et on affiche les valeurs correspondantes de ce undo !

Faut voir ce que cela pourrait donner, tout dépend du nombre de données et de la pertinence de garder en mémoire les différents choix fait entre deux ouverture du fichier...

@ bientôt

LouReeD

Bonjour,

Ci joint un fichier avec mise en mémoire des différents tests "produits" sur une continuité de modification.

j'essaye de m'expliquer :

vous faite une série de modifications de cellules B1 et B2, vous avez un bouton pour faire "reset", vous pouvez "retourner à la position de départ.

Mais maintenant vous avez un bouton pour revenir à la dernière position éditée.

Si lors de ces différents déplacements vous ne modifiez pas les valeurs des cellules B1 et B2 alors tous reste en mémoire.

Pour "allonger" la mémoire du Undo, il faut se mettre sur la "plus grande valeur du undo" c'est à dire la dernière position de modification, puis reprendre cette modification des valeurs B1 et B2.

Si lorsque vous remonter , vous faites un UNDO et qu'au milieu de la série vous modifez une des deux valeurs, le UNdo repart de cette nouvelle position.

Je ne sais pas si j'ai étais assez clair

Lors de la fermetur du programme, la sérien en mémoire des Undo est sauvegardée sur la feuille 2.

Lors de la réouverture, cette série est mise en mémoire est peut être à nouveau exploité ou modifiée. les valeurs de B1 et B2 sont alors celle du Undo le plus récent.

@ bientôt

LouReeD

Bonjour,

pour le classeur sur lequel je travaille, je n'ai pas besoin d'enregistrer les valeurs, rien que la première version me satisfaisait ! Mais merci quand même et de toute façon cela servira à d'autres.

Petite question, pourquoi tu mets cet ligne "Application.EnableEvents = False" ?

parce que du coup, je ne sais pas trop pourquoi car je ne connais pas bien la gestion des erreurs mais dans cette procédure (version1), quand je l'ai testé, Application.EnableEvents est resté à FALSE.

Sub Function_Undo()
    If Val_Undo > 0 Then
        Application.EnableEvents = False
            On Error Resume Next
            ActiveSheet.Range("B1").Value = Tablo_Val_T1(Val_Undo - 1)
            ActiveSheet.Range("B2").Value = Tablo_Val_T2(Val_Undo - 1)
            If Err > 1 Then Exit Sub
            On Error GoTo 0
            Val_Undo = Val_Undo - 1
            If Val_Undo < -1 Then Val_Undo = 0
        Application.EnableEvents = True
    End If
End Sub

J'ai un autre problème, j'ai une fonction qui change les valeurs des deux cellules en même temps et du coup j'ai la valeur de la première cellule qui change puis j'ai une erreur d'exécution, je vais voir si je peux corriger ça, je vous tiens au courant !

[EDIT]

en fait, c'est moi le problème ! Mais ça ne fonctionne pas parfaitement

[EDIT2]

cela fonctionne bien, il suffisait de remplacer activesheet par le nom de ma feuille, bref je met en résolu

Bonsoir,

Ceci dit, vous devriez changer le code existant par celui du deuxième fichier :

Sub Function_Undo()
    If Val_Undo > 0 Then
        Application.EnableEvents = False
            Val_Undo = Val_Undo - 1
            ActiveSheet.Range("B1").Value = Tablo_Val_B1(Val_Undo)
            ActiveSheet.Range("B2").Value = Tablo_Val_B2(Val_Undo)
        Application.EnableEvents = True
    End If
End Sub

En effet avec le test Val_Undo >0 il ne pourra pas y avoir d'erreur, donc la gestion d'erreur n'est pas utile.

En plus j'ai fait une faute sur le code précédent : le faite de faire un Exit Sub sans remettre la surveillance événementielle à TRUE fait que le classeur reste sans réaction aux actions sur les feuilles !!!!

Je le met à FALSE car la procédure Undo écrit sur la feuille, mais cette feuille est en surveillance événementielle, donc du coup on active le code de la surveillance, et ceci peut provoquer des erreur ou des résultats inattendus...

Donc je coupe l'événementielle pour mettre à jour les valeurs suite au Undo, et ensuite je le remet...

@ bientôt

LouReeD

Du coup ça marche ou ça marche pas ? à prioris ça marche mais avec ce nouveau code ? ça marche toujours ?

Bonjour,

ça marche avec la version deux et elle me convient, je reste sur celle-ci

Merci !

Rechercher des sujets similaires à "recuperer valeur ancienne precedente"