mémoriser et soustraire par VBA

S

sympa

Guest
Bonjour à tous,

Je ne choisis pas quelque chose de facile comme 1er post pour mon inscription, je crois...
Je voudrais mémoriser la valeur précédente d'une cellule. D'après ce que j'ai lu sur une file de ce forum il semble que ce soit possible en VBA.
Le but étant ensuite de faire une simple soustraction: valeur actuelle - valeur précédente.
Je donne un exemple: j'ai en cellule A1 des chiffres qui se succèdent.
La valeur actuelle de A1 est 100 et la valeur précédente était 50. La différence = +50 que j'aimerais avoir en C1.
Si A1 affiche ensuite 80, la valeur précédente était donc de 100 et la différence = -20 (80-100) remplace la précédente différence en C1.
Comme vous pouvez le constater il ne s'agit pas de faire un cumul sur une série (cas traité sur l'autre file) mais de faire la différence entre les 2 derniers chiffres d'une série.

Merci pour votre aide.
(Visiteur? j'étais connecté pourtant?)

Message édité par: sympa, à: 25/04/2006 16:07
 

Hervé

XLDnaute Barbatruc
Bonjour sympa

peut etre une piste à travers le classeur ci-joint.

salut [file name=Classeur9_20060425161854.zip size=8034]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur9_20060425161854.zip[/file]
 

Pièces jointes

  • Classeur9_20060425161854.zip
    7.8 KB · Affichages: 133

Gruick

XLDnaute Accro
Salut sympa, c'est encore moi,
Après tout, c'est pas ma faute si tu as des sujets intéressants.
en macro évenementielles :

Dim sympa
Private Sub Worksheet_Activate()
sympa = Range('A1')
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Range('C1') = Range('A1') - sympa
sympa = Range('A1').Value
End Sub

La première charge la variable sympa de la valeur de A1,
La deuxième fait la différence en C1, et réinitialise sympa. (on ne sait jamais).

Jettes un coup d'oeil sur ton ancien mail,
j'ai fait un truc :)


Salut hervé, toujours aussi rapide, heureux de te recroiser

Message édité par: Gruick, à: 25/04/2006 16:24
 
S

sympa

Guest
Bonjour André et Gruick,

Merci à tous les deux de vous être penché sur mon problème. Désolé je n'ai pas pu répondre plus tôt.
Le résultat souhaité est bien celui ci. Le problème avec vos 2 macros c'est que je voulais les utiliser sur des cotations réelles que je recois automatiquement sur ma feuille sans que je touche au clavier. Dans ce cas là les macros n'enregistrent pas les changements en A1. J'ai essayé vos codes avec Private Sub Worksheet_Activate() qu'il faut employer il me semble dans ce cas précis, mais la syntaxe est sans doute différente car ça ne marche pas. En particulier 'target' n'est il pas réservé à l'événement Change?
Il ne manque donc pas grand chose mais je suis incapable de faire la bonne modification. Un dernier coup de main me rendrait bien service.

Merci encore et bonne journée.
Olivier
 

sympa

XLDnaute Nouveau
Bonjour Gruick,

J'ai laissé passer un peu de temps pour réfléchir à ta macro. Celle ci fonctionne très bien même si A1 est le résultat d'une formule par exemple A1= A5+A6 et que je change manuellement A5. Je ne comprends donc pas pourquoi elle ne fonctionne pas avec A1= une autre cellule de la feuille affichant les cotations, ta macro utilise l'événement Calculate et en général je n'ai pas de problèmes.
Aurais tu une idée car là je sèche?
Joindre un fichier n'est pas très utile car tu n'aurais pas accès aux données.

Merci et bonne journée.
Olivier
Au fait as tu reçu mon mail?
Je suis connecté alors visiteur ou pas...?
 

Gruick

XLDnaute Accro
Salut Sympa, tu viens de poster ton premier en temps que membre.

Alors sur ta feuille 1, réceptrice, en macros évenementielles :

Dim sympa
Private Sub Worksheet_Calculate()
Range('C1') = Range('A1') - sympa
sympa = Range('A1').Value
End Sub

Dans ta cellule réceptrice de données (ici A1)tu mets d'où elle vient, exemple ici Feuil2, cellule B2

=Feuil2!B2

Sur ta Feuille 2, qui émettra la donnée la macro évenementielle.

Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets('Feuil1').Activate
End Sub

En espérant que tu pourras t'en inspirer pour tes calculs.

As-tu vu mon mail s/couleurs aussi ?

A plus

Message édité par: Gruick, à: 27/04/2006 18:24
 

sympa

XLDnaute Nouveau
Salut Gruick,

Ca marche super! Merci beaucoup.
Juste pour comprendre un peu mieux ces macros événementielles: la macro se déclenche à chaque changement qui se produit dans ma feuille de données. Peut on obtenir une action seulement sur le changement d'une seule cellule de la feuille données (celle qui correspond à A1)?

Merci aussi pour le fichier couleur, j'ai compris les astuces utilisées et je vais voir l'adaptation ce weekend.

Bonne journée.
@+
 

Gruick

XLDnaute Accro
Bonjour Sympa,
Rassures-toi, j'apprends en même temps que toi, ainsi ce code m'est inspiré par la solution d'Hervé.

sur feuille 1
Code:
Dim sympa
Private Sub Worksheet_Activate()
sympa = Range('A1')
Range('A1') = Worksheets('Feuil2').Range('B2')
Range('C1') = Range('A1') - sympa
End Sub

sur feuille 2
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = 'B2' Then
    Worksheets('Feuil1').Activate
End If
End Sub

La précédente version ne marchait qu'à partir du 2e essai, la variable Sympa étant vide, le premier calcul donnait la valeur de A1.

Là, ça marche. Bonnes adaptations. En PJ l'exemple si besoin est.
A +, n'hésites pas si problème. [file name=Memoriser.zip size=7120]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Memoriser.zip[/file]
 

Pièces jointes

  • Memoriser.zip
    7 KB · Affichages: 132

Discussions similaires

Statistiques des forums

Discussions
312 223
Messages
2 086 407
Membres
103 201
dernier inscrit
centrale vet