Archivage Excel VBA

Bonjour,

J'ai un fichier que doit faire un archivage hebdomadaire sur une nouvelle page créée par semaine (merci Dan). Ces données sont importées d'un autre fichier texte avec connexion. Tout marche bien mais j'aimerais pourvoir, à la création du nouvel onglet ("ARCHIV_PLAN_"), archiver seulement les données (sans les formules) des colonnes A:H

Voici le code VBA:

Sub Archive()

Dim Nosem As Byte

Dim dlg As Integer

Worksheets("DATA_PLAN").Copy after:=Sheets(Sheets.Count)

Nosem = DatePart("ww", Date, 2, 1)

If Nosem = 0 Then Nosem = 53

With ActiveSheet

.Name = "ARCHIV_PLAN_" & Year(Date) & "-S" & Nosem

.Visible = False

End With

End Sub

Merci beaucoup pour votre aide.

10plan-archiv.xlsm (110.93 Ko)

Bonjour,

Ta question est surprenante ...

Car il n'y a aucune formule dans tes colonnes A : H .....

Merci de clarifier

Bonjour,

Un exemple à adapter.

Cdlt.

6plan-archiv.xlsm (105.08 Ko)
Public Sub Archive()
Dim strPath As String, strFilename As String
Dim NoSem As Integer
    NoSem = WorksheetFunction.IsoWeekNum(Date)
    strPath = ThisWorkbook.Path & Application.PathSeparator
    strFilename = "ARCHIV_PLAN_" & Year(Date) & "-S" & Format(NoSem, "00") & ".xlsx"
    strFilename = strPath & strFilename
    ThisWorkbook.Worksheets("DATA_PLAN").Copy
    With ActiveSheet
        .UsedRange.Value = .UsedRange.Value
    End With
    With ActiveWorkbook
        .SaveAs Filename:=strFilename, FileFormat:=51
        .Close savechanges:=False
    End With
End Sub

Merci pour vos réponses:

@Jean-Eric: Le but c'est de créer une nouvelle feuille, pas un nouveau classeur (regardez les feuilles déjà cachées...). A chaque fois qu'on clique sur le bouton il fait une sauvegarde de la semaine et donne une erreur si la feuille a été déjà créée dans la semaine courante.

@James007: Je remet le fichier avec la connexion d'origine

Encore merci pour votre aide

7plan-archiv.xlsm (109.72 Ko)

Re,

Ton fichier contient donc des formules ... mais après la Colonne H ...

Pourquoi tu n'utilises pas la macro de Jean-Eric ...

Je ne comprends pas la raison derrière plusieurs archivages ...

Sub Archive2()
Dim Nosem As Integer
Dim fTest As Worksheet
Nosem = WorksheetFunction.IsoWeekNum(Date)

On Error Resume Next
  Set fTest = ActiveWorkbook.Worksheets("ARCHIV_PLAN_" & Year(Date) & "-S" & Nosem)
On Error GoTo 0

If fTest Is Nothing Then
Worksheets("DATA_PLAN").Copy after:=Sheets(Sheets.Count)
    With ActiveSheet
        .UsedRange.Value = .UsedRange.Value
        .Name = "ARCHIV_PLAN_" & Year(Date) & "-S" & Nosem
        .Visible = False
    End With
End If
End Sub

En espèrant que cela t'aide

Salut James,

Lors de l'exécution de la macro de Jean-Eric, j'ai une erreur (fichier attaché)

En fait j'importe les données d'un autre fichier texte et si je laisse la connexion lors de l'archivage, il va se mettre à jour à chaque nouvelle connexion...

4plan-archiv.xlsm (109.72 Ko)

Bonjour,

Une mise à jour à étudier.

Cdlt.

9plan-archiv.xlsm (112.24 Ko)

Salut James,

Lors de l'exécution de la macro de Jean-Eric, j'ai une erreur (fichier attaché)

En fait j'importe les données d'un autre fichier texte et si je laisse la connexion lors de l'archivage, il va se mettre à jour à chaque nouvelle connexion...

Bonjour,

Plus le sujet avance ... et moins j'arrive à comprendre ton problème ...

Re,

Si la proposition à retenir est la création d'un nouveau claseeur, essaie ainsi :

7plan-archiv-v2.xlsm (111.62 Ko)
Public Sub Archive()
Dim strPath As String, strFilename As String
Dim Nosem As Integer

    Nosem = WorksheetFunction.IsoWeekNum(Date)
    strPath = ThisWorkbook.Path & Application.PathSeparator
    strFilename = "ARCHIV_PLAN_" & Year(Date) & "-S" & Format(Nosem, "00") & ".xlsx"
    strFilename = strPath & strFilename

    ThisWorkbook.Worksheets("DATA_PLAN").Copy

    With ActiveSheet
        .UsedRange.Value = .UsedRange.Value
        .Columns("I:J").Delete
    End With

    With ActiveWorkbook
        .Connections("DATA").Delete
        .SaveAs Filename:=strFilename, FileFormat:=51
        .Close savechanges:=False
    End With

End Sub

Vous avez tous raison, je dois être plus clair….

J'exporte depuis une autre application un fichier *.txt, plusieurs fois par jour, sur C:\Temp et j'importe sur mon fichier Excel par Données/A partir du texte avec la propriété: "Actualiser les données lors de l'ouverture du fichier" sur l'onglet DATA_PLAN, donc, chaque fois que j'ouvre mon fichier Excel il se met à jour avec les dernières données.

J'ai une macro sur ce fichier Excel (qui marche bien) avec un bouton "ARCHIVER" qui crée un nouvel onglet caché "ARCHIV_PLAN_2019-S17" (ou S17 est le numéro de la semaine). Cet onglet sert à garder un archive hebdomadaire de l'année et cette manipulation est faite normalement tous les lundis matin.

Mon problème ce qui à chaque création de cet archive (nouvel onglet) la macro fait une copie la totalité de la feuille DATA_PLAN (les données ainsi que la connexion avec la source dans C:\Temp) ce qui est embêtant car le nouvel onglet

ARCHIV_PLAN_2019-Sxx va se mettre à jour à chaque ouverture…

J'aimerais que l'archivage se fasse seulement avec les données (sans la connexion) pour garder un vrai archive.

J'espère avoir été un peu plus clair.

Encore un grand merci

14plan-archiv-5.xlsm (87.37 Ko)
Rechercher des sujets similaires à "archivage vba"