Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
7
Affichages
351
Réponses
1
Affichages
168
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…