XL 2019 Comment archiver des données horaires sur plusieurs années avec VBA

azertyazertyazerty

XLDnaute Nouveau
bonjour,

je souhaiterais archiver les données d'une feuille horaire.

Je m'explique :

- j'ai crée un fichier me permettant de notifier tous mes horaires de travail, C.P, A.T, vacances scolaires …
- dans ce fichier, il y a 4 feuilles.
Calendrier (feuille de synthèse, vision globale des infos importantes).
Feuille_1 (feuille principal dans laquelle toutes les données sont détaillées).
Archives (feuille permettant archiver une certaine plage de données de la feuille Feuille_1 ). Cette feuille devra être masquée.
Sources (feuille qui contient des listes de choix présentent dans la feuille Feuille_1 ). Cette feuille restera masquer.

Une toupie dans la feuille Calendrier, me permettant d'incrémenter / décrémenter les années des tableaux des feuilles Calendrier et Feuille_1 .

Problématique :

Je souhaiterais que toutes les données (ex: 2021) de la feuille_1 comprise entre C3 : Q375 soit "stockées" dans la feuille Archives, puis restituer lorsque cette même année est sélectionnée.
Idem pour 2020, 2022 …

Dans le fichier ci-joint, j'ai utilisé ce code dans la feuille_1.
Le problème est que je ne peux plus rien écrire ou effacer.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Archives")
    .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15) = [C3:Q375].Value 'copie les valeurs
End With
End Sub

Private Sub Worksheet_Calculate()
Application.EnableEvents = False 'désactive les évènements
With Sheets("Archives")
    [C3:Q375] = .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15).Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
End Sub

Je cherche donc des âmes charitables qui pourraient m'aider.

Je vous remercie par avance.
 

Pièces jointes

  • 2022.xlsm
    277.5 KB · Affichages: 12
Solution
Bonsoir azertyazertyazerty,

Il faut modifier le code en Feuil_1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Archives")
    .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15) = [C3:Q375].Value 'copie les valeurs
End With
End Sub

Private Sub Worksheet_Calculate()
Application.OnTime 1, Me.CodeName & ".MAJ" 'lancement différé pour être exécuté après Worksheet_Change
End Sub

Sub MAJ()
Application.EnableEvents = False 'désactive les évènements
With Sheets("Archives")
    [C3:Q375] = .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15).Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
De cette manière la macro MAJ s'exécute après...

job75

XLDnaute Barbatruc
Bonsoir azertyazertyazerty,

Il faut modifier le code en Feuil_1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheets("Archives")
    .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15) = [C3:Q375].Value 'copie les valeurs
End With
End Sub

Private Sub Worksheet_Calculate()
Application.OnTime 1, Me.CodeName & ".MAJ" 'lancement différé pour être exécuté après Worksheet_Change
End Sub

Sub MAJ()
Application.EnableEvents = False 'désactive les évènements
With Sheets("Archives")
    [C3:Q375] = .Cells(Application.Match([A3], .[A:A], 0), 2).Resize(373, 15).Value 'copie les valeurs
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
De cette manière la macro MAJ s'exécute après Worksheet_Change.

A+
 

Discussions similaires

Réponses
11
Affichages
396