Archivage périodique d'une plage de cellules

Parazite

XLDnaute Nouveau
Bonjour à tous !

J'essaye actuellement de concevoir un petit tableau de bord pour du suivi de projet et ma problématique est la suivante :

Je travail sur une plage de cellules dont les valeurs sont susceptibles d'être mises à jour régulièrement. Je souhaiterais pouvoir faire une copie périodique dans le temps de cette plage (par exemple tous les 15 jours) de manière à garder une trace des évolutions.
J'aurais donc au final un tableau présentant les valeurs de ma plage de cellules à t, t+15jours, t+30jours, etc.

Je ne vois pas trop comment faire celà...
Surtout qu'il est envisageable que le fichier ne soit pas ouvert tous les 15 jours... ou du moins pas pile le jour où la sauvegarde devrait avoir lieu.

Si quelqu'un a la moindre idée ça m'aiderais bien ! ;)

Merci beaucoup.
 

tototiti2008

XLDnaute Barbatruc
Re : Archivage périodique d'une plage de cellules

Bonjour Parazite,

Pour sauvegarder les valeurs de la plage sans ouvrir le fichier, ça risque d'être compliqué... sans doute envisager une macro
Juste une piste de recherche pour sauvegarder les valeurs d'un plage : les scénarios
Un scénario c'est justement la "sauvegarde" des valeurs d'une plage à un moment t
Je ne les ai pas beaucoup utilisés jusque là mais peut-être que ça pourrait te servir
En XL2003 et 2007, la limite des valeurs d'un scénario est seulement de 32 valeurs variables, c'est plutôt faible alors je ne sais pas si ça peut s'appliquer à tes valeurs

Edit : Bing, Bonjour Piga :)
 

Parazite

XLDnaute Nouveau
Re : Archivage périodique d'une plage de cellules

Bonjour Piga, bonjour Tototiti,

Merci pour vos réponses rapides !

@Piga: C'est une solution intéressante, mais la méthode présentée me pose un problème, outre le fait qu'elle est assez complexe, elle fait appel à des tâches planifiées, hors mon fichier sera utilisé sur plusieurs postes différents. Donc difficilement utilisable.
Mais je pense que je vais m'inspirer des macros proposées.

@Tototiti: effectivement l'utilisation des scénarios aurait pu être une solution assez simple mais la limitation à 32 valeurs m'ennuit un peu...

En tout cas merci beaucoup pour votre aide à tous les deux ;)

@+
 

Eric 45

XLDnaute Occasionnel
Re : Archivage périodique d'une plage de cellules

Bonjour à tous

Quelques questions avant d'aller plus loin :

- 1 - Où veux tu sauvegarder ? je pense dans le même fichier ?

- 2 - Combien de cellules comporte la plage ? et sera t elle toujours de la même taille ?

- 3 - Sur plusieurs postes ne veut pas dire : plusieurs utilisateurs en même temps ?

A te lire

Eric
 

Parazite

XLDnaute Nouveau
Re : Archivage périodique d'une plage de cellules

Bonjour Eric,

Tout d'abord merci pour l'intérêt que tu portes au problème, et voici les réponses à tes questions :

-1- Effectivement, dans le même fichier, je pense faire un onglet "Archive" dans lequel je copierai mes plages de cellules successives (en les datant si possible). Ce qui implique une détection de la dernière ligne remplie ou dernière colonne remplie, en fonction de si les copier/coller se font verticalement ou horizontalement.

-2- Pour le moment je m'intéresse à une plage de 8x6 cellules. La taille est fixe. Je n'avais pas précisé jusque là mais les valeurs de ces cellules sont obtenues par des formules. Je ne souhaite copier que les valeurs puisqu'il s'agit d'une sauvegarde à instant t.

-3- Le fichier se trouve sur un réseau. Il est donc envisageable qu'il soit consulté de différents postes et éventuellement par plusieurs utilisateurs en même temps (même si le document ne peut théoriquement pas être modifié par 2 utilisateurs à la fois puisqu'il s'ouvre en lecture seule pour le 2ème utilisateur).

J'espère avoir répondu au mieux à tes questions et toute idée reste la bienvenue !

Merci à tous.
 
Dernière édition:

Eric 45

XLDnaute Occasionnel
Re : Archivage périodique d'une plage de cellules

Bonsoir à tous
Bonsoir Parazite

Ces quelques lignes pour te donner une voie, mais je ne les ai pas testées.

Code:
Option Explicit

Dim enregistrement As Byte
Dim cell_test As Integer ' ou long

Sub test_archive() 'nom de sub pour test, sinon à placer dans Workbook_BeforeSave pour sauvegarde systematique à la fermeture

cell_test = Worksheet("feuille_archive").Range("a65536").End(xlUp).Row    'la cellule de la date du dernier enregistrement sur feuille archive
                                                                          ' ATTENTION modifier le nom de la feuille
If Date = cell_test Then enregistrement = 0: archivage: Exit Sub
If Date > cell_test Then
    If Year(Date) > Year(cell_test) Then annee_actuelle = Year(Date): enregistrement = 1: archivage: Exit Sub  ' changement d'annee
    If Month(Date) > Month(cell_test) Then mois_actuel = Month(Date): enregistrement = 1: archivage: Exit Sub  ' changement mois
' test du jour
    If Day(cell_test) > 15 And Day(cell_test) < 32 Then
        If Day(Date) < 32 Then
            enregistrement = 0
        Else
            enregistrement = 1
        End If
    Else
        If Day(Date) < 16 Then
            enregistrement = 0
        Else
            enregistrement = 1
        End If
    End If
    archivage
End If

End Sub

Sub archivage()
Dim maplage As Range
Dim tablo(47)
Dim Ws As Worksheet

Set Ws = Sheets("feuille_archive")  ' ATTENTION modifier le nom de la feuille
Set maplage = Range("A1:H6")        ' ATTENTION modifier la plage

For i = 1 To 48 ' boucle sur la plage "maplage"
    tablo(i - 1) = maplage(i)
Next i

If enregistrement = 0 Then
     Ws.Range("A" & cell_test) = Date     ' on ecrase l'enregistrement précédent dans la "feuille_archive"
     Ws.Range("A" & cell_test & ":AU" & cell_test) = tablo()
Else
     Ws.Range("A" & cell_test + 1) = Date   ' nouvel enregistrement sur la ligne suivante dans la "feuille_archive"
     Ws.Range("A" & cell_test & ":AU" & cell_test + 1) = tablo
End If
Erase tablo
End Sub

J'ai pris comme principe, que si le fichier n'est pas ouvert le 15, la sauvegarde restera à la date du dernier enregistrement : 12, 14 par exemple (pourquoi la forcer au 15 ?) mais cela peut se modifier.

Les dates sont le 15 et la fin du mois (28,29,30 ou 31), mais à toi de le changer si tu veux.

On peut certainement améliorer

Dis nous

Eric
 

Parazite

XLDnaute Nouveau
Re : Archivage périodique d'une plage de cellules

Bonjour Eric,

Je suis désolé de répondre si tard, je viens de voir ton message, j'ai dû oublier de cocher la notification par mail sur ce fil...
Merci beaucoup pour ton aide, je viens de tester rapidement ton code. Après avoir rajouté quelques déclarations de variables (annee_actuelle, mois_actuel et ta variable de parcours i) ça fonctionne !
Enfin... Il reste un soucis dans la copie de tableau (pour le moment seule la première ligne est recopiée en double) mais c'est facile à corriger. C'était surtout la gestion des dates qui me posait problème...

De mon côté j'avais un peu abandonné l'idée d'automatiser l'archivage et j'avais retenu la solution d'un bouton "archiver" qui copie ma plage de cellules dans un autre onglet en la datant (les copier/coller se mettent à la suite verticalement).
Si j'ai le temps je vais essayer de revenir sur mon boulot et d'implémenter ta solution qui est quand même plus élégante.

Encore merci Eric pour ton temps ;)
 
Dernière édition:

Misange

XLDnaute Barbatruc
Re : Archivage périodique d'une plage de cellules

Bonjour

une solution que j'utilise (manuellement mais tu peux automatiser).
plutpot que de ne recopier que le tableau d'intérêt, je recopie la feuille (avec les graphiques qui sont dessus), et je fais un copier valeurs pour figer les valeurs du tableau et du graphique associé.
Dans ma macro je choisis le nom à donner à la feuille (c'est pour tester des hypothèses) mais tu peux la nommer avec une date et demander à l'ouverture du classeur de faire une sauvegarde de la feuille en question si la précédente date de plus de 15 jours ?


Code:
Sub memorise()
'recopie la feuille res vers une couvelle feuille en supprimant les liaisons
Dim NomFeuil
Dim DrObj As DrawingObjects
Dim Graph As ChartObject, I As Integer

 'création et nommage de la feuille de destination (test pour vérifier qu'elle n'existe pas déjà
     
NomFeuil = Application.InputBox("Entrez un nom (court!) pour l'hypothèse à enregistrer", "Nom de l'hypothèse")
 On Error Resume Next
  Worksheets(NomFeuil).Select
  If Err <> 0 Then
    Sheets.Add.Name = NomFeuil
 Else
  MsgBox ("Ce nom existe déjà, donnez en un autre")
  Exit Sub
  End If
Sheets(NomFeuil).Range("w1").Value = "Hypothèse : " & NomFeuil
  
  Sheets("hypothèses").Activate
    Cells.Copy
    Sheets(NomFeuil).Paste
    Application.CutCopyMode = False
    
Sheets(NomFeuil).Activate
Set DrObj = ActiveSheet.DrawingObjects
I = DrObj.Count + 1
Application.ScreenUpdating = False
For Each Graph In ActiveSheet.ChartObjects
  Graph.CopyPicture
  ActiveSheet.Paste
  With DrObj.Item(I)
    .Left = Graph.Left
    .Top = Graph.Top
  End With
  Graph.Delete
Next Graph
ActiveWindow.RangeSelection.Select
    Cells.Copy
    Cells.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False

End Sub
 

Parazite

XLDnaute Nouveau
Re : Archivage périodique d'une plage de cellules

Bonjour Misange,

Merci bien pour ton code ! Je ne souhaite pas pour le moment récupérer l'intégralité de ma feuille, une plage de cellules me suffit. Par contre il est bien possible que j'intègre des graphs par la suite et que j'ai à les archiver également. Ta partie de copie des graphiques va bien me simplifier le travail je pense ;)

Un grand merci à tous ceux qui ont donné de leur temps pour m'aider !
 

Discussions similaires

Réponses
46
Affichages
1 K
Réponses
1
Affichages
154
Compte Supprimé 979
C

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet