Stocker une variable pendant un certain temps

Résolu/Fermé
nat1639 - Modifié par nat1639 le 23/07/2013 à 10:41
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 juil. 2013 à 14:56
Bonjour,

Je ne parvient pas à trouver ce que je cherche, je voudrai qu'une cellule attribue sa valeur à une autre cellule pendant un certain temps et lorsque je sort de ce créneau, que cette cellule garde la dernière valeur.

Par exemple sur une journée (le lundi).

La cellule A1 change de valeur au cour de la journée, ce qui change la valeur de A2 associée à A1 mais lorsque je change de jours et que l'ont passe à mardi, je voudrai que A2 ce fige pour garder la dernière valeur stocker.

J'espère que vous comprendrez ce que je veux dire.

Je ne pense pas qu'un simple if avec un créneau de deux dates puisse suffire.

Merci pour votre aide.



4 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 23/07/2013 à 11:17
Bonjour,
Avec une macro événementielle c'est possible.
Je t'ai fait plusieurs cas, à toi de choisir et supprimer les lignes qui ne t'intéressent pas.
Le code :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
'Ici Target = A1
Application.EnableEvents = False
'Change le contenu de la cellule A2 uniquement le 23 juillet 2013 :
If Date = "23/07/2013" Then Range("A2") = Target
'Change A2 le mardi seulement :
If Weekday(Date, vbTuesday) = 1 Then Range("A2") = Target
'Change uniquement le 23 juillet 2013 entre 10h15m25s et 11h15m23s :
If Now > "23/07/2013 10:15:25" And Now < "23/07/2013 11:15:23" Then Range("A2") = Target
Application.EnableEvents = True
End Sub


Pour appliquer ce code : clic droit sur l'onglet de la feuille concernée / Visualiser le code, copier-coller le code donné + haut dans la fenêtre VBA Editor, fermer cette fenêtre pour retourner sur la feuille et changer la valeur de A1... le bon jour à la bonne heure!
Cordialement,
Franck P
0
merci pour ta rapidité. Le troisième cas est exactement ce que je cherchais par contre ça ne marche pas. Les premières lignes avant les trois cas correspondes à quoi?
J'ai déjà fait quelques macros mais seulement des petites bidouilles.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
23 juil. 2013 à 11:45
Le 3ème est celui avec les horaires c'est bien ce que tu veux??

Les premières lignes avec les trois cas correspondes à quoi? je l'ai indiqué en commentaire dans la macro
Le premier test If : If Target.Address <> "$A$1" Then Exit Sub n'exécute pas la procédure si tu changes une autre cellule que A1. C'est ta demande. En fait, lors d'un changement dans la cellule A1, la macro vérifie les conditions et si elles sont remplies stocke A1 dans A2.
Les conditions données sont les suivantes :
Si on est le 23 juillet 2013 :
If Date = "23/07/2013" Then 

Si on est mardi :
If Weekday(Date, vbTuesday) = 1

Si il est entre 10h15 et 11h15 le 23 juillet :
If Now > "23/07/2013 10:15:25" And Now < "23/07/2013 11:15:23"
0
Oui c'est bien ça, merci pour le détail.

Voila ce que j'ai mis:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
'Ici Target = A1
Application.EnableEvents = False

If Now > "22/07/2013 10:15:25" And Now < "28/07/2013 11:15:23" Then Range("A2") = Target
Application.EnableEvents = True
End Sub

Le créneau est sur une semaine
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
23 juil. 2013 à 12:29
As tu bien placé ce code dans le module de la feuille concernée?
Parce que j'ai testé et ça fonctionne plutôt bien chez moi.....
Regarde ce classeur test et change la valeur en A1...
0
Ouai nickel ça marche! Juste si je veu que ma cible provienne d'une autre feuille c'est possible en mettant le nom de la feuille et la cellule ou ça ne concerne que la feuille comportant la macro?

En tout cas merci

edit:Par contre quand je change la date pour être en dehors du créneau la cellule prend quand même la valeur
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
23 juil. 2013 à 14:25
Par contre quand je change la date pour être en dehors du créneau la cellule prend quand même la valeur
Non.
tu as du te tromper.
J'ai essayé :
If Now > "24/07/2013 10:15:25" And Now < "28/07/2013 11:15:23" 

ça ne me change pas la valeur de A2...

Pour faire varier la cellule d'une autre feuille, il suffit d'ajouter... le nom de la feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
'Ici Target = A1
Application.EnableEvents = False

If Now > "22/07/2013 10:15:25" And Now < "28/07/2013 11:15:23" Then Sheets("Feuil3").Range("A2") = Target
Application.EnableEvents = True
End Sub
0
Ah oui ça fonctionne avec les jours, mais pas avec les mois et années. ne faut-il pas changer le format d'écriture de la date?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
23 juil. 2013 à 14:35
et si, enfin, tu nous disais ce que tu veux exactement???
0
^^ désolé je pensai pouvoir l'adapter. Si on est sur le même créneau de jour mais des mois diffèrent ça fait comme si c'été vraix.

If Now > "22/08/2013" And Now < "30/08/2013"

Ce créneau marche, on est vrai pour les jour mais pas pour les mois, c'est pour cette raison que je me demandai si ça ne venais pas du format.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 23/07/2013 à 14:49
et si, enfin, tu nous disais ce que tu veux exactement???

Edit :
Transformons donc nos String en Date :
If Now > CDate("22/08/2013 10:15:25") And Now < CDate("28/08/2013 11:15:23") Then Sheets("Feuil3").Range("A2") = Target
0