Figer des valeurs pour historiser

Résolu/Fermé
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - 24 févr. 2015 à 10:58
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - 25 févr. 2015 à 12:29
Bonjour,

Bonjour la communauté
Je m'adresse à vous une nouvelle fois pour un petit coup de main.

J'ai besoin d'historiser certaines valeurs, à récupérer dans un TCD qui existe déjà.
Ces valeurs évoluent au jour-le-jour, et idéalement j'aurais besoin de récupérer ces valeurs au dernier jour du mois. Mais le fichier n'est pas forcément ouvert chaque dernier jour du mois, pour peu qu'il tombe un dimanche 31.
Donc j'ai pensé recopier systématiquement, à chaque ouverture de mon fichier, le contenu des 4 cellules qui m'intéressent, et ceci jusqu'à ce que le mois change, puis stop.

Je récupère facilement mes valeurs avec la formule :
=SI(MOIS(AUJOURDHUI())<MOIS(C4);"Pas de modif";SI(MOIS(AUJOURDHUI())>MOIS(C4);"Pas de modif2";LIREDONNEESTABCROISDYNAMIQUE("TitreCOL";Stats!$A$3;"Equipes";"Equipe1")))

Mais dans ce cas, bien sûr, la formule
SI(Condition ; MaFormule;NeRienFaire )
ne permet pas de ne PAS modifier la valeur numérique si la condition est fausse. Je doute de pouvoir me passer d'une macro dans ce cas.
Avez-vous une idée lumineuse ?

Un exemple de fichier sur : https://www.cjoint.com/c/EBylcBLYSQc

Merci d'avance du coup de main !


5 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
24 févr. 2015 à 11:34
Bonjour,

Pas de TCD dans ton classeur donc en supposant qu'il ne change pas de taille, à mettre dans ThisWorbook :
Private Sub Workbook_Open()
    If Month([D10]) <> Month(Date) Then
        [D11:D14] = [D3:D6].Value
        [D10] = Date - 1
    End If
End Sub

La date mémorisée est celle de la veille de l'ouverture.

eric

0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
Modifié par touroul le 24/02/2015 à 12:36
Bonjour Eric

Merci bien.
En effet pas de TCD dans mon fichier Exemple, mais peu importe la source des données pour le moment.
Je ne suis pas sûr d'avoir tout compris ...
Tu utilises la cellule D10 pour revenir d'1 jour, pourquoi ?
Ou peut-être que tu voulais plutôt dire D2 ?
Ensuite : je dois refaire le même type de code pour les autres mois, c'est bien ça ?
Enfin, comment spécifier que les cellules auxquelles on fait référence se trouvent sur une autre feuille : puis-je écrire
 If Month(['Historique'!D10]) = Month(Date) Then
?

Merci pour le SAV
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
24 févr. 2015 à 12:37
Tu utilises la cellule D10 pour revenir d'1 jour, pourquoi ?
Oui, une erreur. J'avais historisé la date de la veille comme tu parlais des données du dernier jour du mois mais c'est bien la date du jour qu'il faut historiser ([D10] = Date) pour un fonctionnement correct.
Il faut stocker cette date pour savoir que c'est fait pour ce mois et ne plus écraser les données sauvegardées.

Ensuite : je dois refaire le même type de code pour les autres mois, c'est bien ça ?
Non, ce code suffit.

Enfin, comment spécifier que les cellules auxquelles on fait référence se trouvent sur une autre feuille
Private Sub Workbook_Open()
    With Sheets("Histo")
        If Month(.[A1]) <> Month(Date) Then
            .[A2:A5] = Sheets("Feuil1").[D3:D6].Value
            .[A1] = Date
        End If
    End With
End Sub

Et si tu veux un historique de l'historique ajoute
.[A:A].Insert Shift:=xlToRight
juste après le if

eric
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
25 févr. 2015 à 10:09
Bonjour

Après adaptation du code d'Eric, j'obtiens ceci :
Private Sub Workbook_Open()
'Historisation
With Sheets("Histo")
If Month(.[D2]) = Month(Date) Then
.[D3:D6] = Sheets("Histo").[D11:D14].Value
.[A1] = Date
End If
End With
End Sub


Par contre ce code ne fonctionne que pour le mois de février (D2).
Je pourrais recopier ce code pour chaque mois, mais ce n'est pas très joli. Y aurait-il possibilité de l'adapter pour qu'il recherche le mois actuel dans C2:N2 et qu'il recopie la plage D11:D14 sur les lignes 3 à 6 du mois correspondant ?

Enfin, dans la boucle If, il n'y a pas de Else : donc au changement de mois, les valeurs du mois précédent seront-elles conservées ?

Le fichier modifié : https://www.cjoint.com/c/EBzkuI4zjVA

Mes remerciements pour l'adaptation ...
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
25 févr. 2015 à 11:02
Bonjour,

Quand tu adaptes, adapte correctement et ça marchera bien.
Comme ta tournure de phrase fait que tu t'adresses à d'autres que moi je vais m'en tenir là et laisser la place.
eric
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
25 févr. 2015 à 11:33
Bonjour Eric

Je ne te voyais pas sur le forum ce matin, d'où la formulation généraliste.
Mon travail m'empêche d'être présent les après-midi sur le forum.
Même si tu ne veux pas donner suite, je renouvèle mes remerciements ainsi que toute l'admiration sincère que j'ai pour tes compétences et ton sens de l'aide. En aucun cas je n'ai voulu te blesser, excuse-moi.

Je reprends donc ton code d'origine que je ne semble pas avoir compris :
Le stockage de la date actuelle se fait en A1.
Dans l'expression If Month(.[A1]) <> Month(Date) par exemple je ne comprends pas pourquoi tu poses la condition <> car on recherche bien le mois en cours dans le tableau ...

Merci d'avance
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
25 févr. 2015 à 11:43
If Month(.[A1]) <> 
et
.[A1] = Date
sont sur la même cellule.
je ne comprends pas pourquoi tu poses la condition <> car on recherche bien le mois en cours dans le tableau ...
Non, on regarde si le mois en cours est <> du mois mémorisé. S'il l'est c'est qu'on a changé de mois et qu'il faut enregistrer.

eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
25 févr. 2015 à 12:02
Merci d'avoir répondu, merci bien.

Je veux vraiment comprendre, ne serait-ce que pour progresser.
Je comprends que ton code sert à figer les valeurs D3:D6 si on ne se trouve pas dans le mois en cours.
Puis-je te demander encore quelques explications ?
Pourquoi passer par A2:A5 qui restent vides après exécution de la macro à l'ouverture ?
Dans le fichier : https://www.cjoint.com/c/EBzmmOtAJkm D11:D14 ne se recopient pas en D3:D6

Mes remerciement anticipés Eric
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
25 févr. 2015 à 12:16
Pourquoi passer par A2:A5
J'ai pris A2:A5 car tu as parlé d'une feuille Histo qui n'existait pas et que je pensais dédiée mais tu mets où tu veux.
qui restent vides après exécution de la macro à l'ouverture ?
Ben oui, puisque tu as une date en février en A1 et qu'on est en février c'est que l'historisation a eu lieu.
Attend mars maintenant, ou met une date en janvier en A1 (ou ailleurs tant que le code reste cohérent).
eric
0
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
25 févr. 2015 à 12:29
D'accord je comprends mieux à présent.
Cette fois je vais pouvoir adapter le code correctement.
A vrai dire au départ je n'avais pas pris ton code dans le bon sens, je pensais que tu recopiais alors qu'en fait tu empêchais la copie, d'où mon incompréhension.

Au plaisir de te retrouver. Mille mercis.
0