VBA: Identifier et ouvrir un classeur comportant une annee N-1 dans son nom

sim

XLDnaute Occasionnel
Bonjour a toutes et a tous!

Voila je suis entrain de creer un historique.
En debut d'annee je creer un nouveau classeur du type Historical_2011.xls.
Mais j'ai besoin qu'excel, une fois avoir creer le nouveau classeur de la nouvelle annee, ouvre le classeur History_2010 pour copier une des feuilles : ("M").

Lorsque je cree le classeur en debut d'annee je le cree comme ceci

Code:
fileName = "historical_" & Format(iYear, "0000") & ".xls"

Je voudrais appeler en janvier seulement une procedure qui ferai ce que je vous ai dit plus haut:

Je commence donc comme ca:

Code:
If iYear = 0 Or Not CStr(iYear) Like "####" And HistoricalWorkBookOpen_FX(REMOTE_DIRECTORY) Then (et la j'appel la sub dont on parle)

HistoricalWorkBookOpen_FX(REMOTE_DIRECTORY) est la sub qui dit si il faut creer le nouveau classeur ou non en fonction de la date. A la fin de cette macro le nouveau classeur est donc ouvert mais invisible pour l'utilisateur.

Clairement j'aimerai pouvoir programmer

  • Ouvrir le Fichier Historical_YYYY.xls de Iyear-1 (PJ : Historical_2010.xls)
  • prendre la feuille ("M") de ce classeur et copier son contenu dans wkHisto.Sheets("M-1")

wkHisto est deja defni dans les macro precedentes, mais elles sont toutes dans le meme module donc pas besoin de le redeclarer. C'est le nouveau classeur historic qui vient d'etre creer (avec la feuille ("M-1"))

Donc dans le code
wkHisto est le classeur de destination
"M-1" est la feuille de destination
(PJ: Hisorical_2011.xls)

Tout les classeur historic sont places dans le meme repertoire donc on peu utiliser la meme constante REMOTE_DIRECTORY

On pourrait creer une constante ( je sais vraiment pas si c'est possible) du genre:

Code:
Private Const FICHIER_N-1 As String = "historical_" & Format((iYear)-1, "0000") & ".xls"


Voila, je vois a peu pres, comme vous le pouvez le voir, comment faire mais pas exactement, c'est pour ca que j'ai besoin de votre precieuse aide.

Merci d'avance a ceux qui pourront m'aider et dedole pour ce long post mais je pense que plus de detail il y a plus vous pouvez cerner la nature de ma demande :)

Cordialement.

Sim
 

Pièces jointes

  • Historical_2010.xls
    15.5 KB · Affichages: 60
  • Historical_2011.xls
    15.5 KB · Affichages: 91
Dernière édition:

eretyk_1er

XLDnaute Nouveau
Re : VBA: Identifier et ouvrir un classeur comportant une annee N-1 dans son nom

Bonjour,

Tu as regardé ce que donne l'enregistreur macro?

Ca marcherait si tu copiais non pas le contenu de la feuille mais la feuille "M" entière, et que tu l'insérais dans le nouveau classeur?
 
Dernière édition:

sim

XLDnaute Occasionnel
Re : VBA: Identifier et ouvrir un classeur comportant une annee N-1 dans son nom

Bonjour!

Merci pour ta reponse!!! :)

Oui en effet j'avais penser faire comme ca mais j'ai pris le parti de gerer les nom de feuilles a la creation du nouveau classeur...penses tu vraiement que ca change beaucoup.

Bon entre temps j'ai un peu chercher et je suis arriver a ce resultat, j'ai pas tester la partie ou je copie, je viens de l'ecrire... mais en tout cas l'ouverture du fichier fonctionne et je trouve bien le bon fichier!!!! Un jour je vainquerai VBA....bon j'en suis vraiment tres loin.

Voila je te le met si jamais tu voisun truc dangereux ou a ameliorer, et sinon je vais tester la partie copie, si jamais tu vois une meillieure facon n'hesite surtout pas!!

Code:
Private Const REMOTE_DIRECTORY As String = "Chemin"


Public Sub December_Importation()

Dim DataSource As String
Dim fileName As String



fileName = "historical_FX_" & (Year(Now) - 1) & ".xls"
DataSource = Trim(REMOTE_DIRECTORY & Trim(fileName))

        On Error GoTo FIN_Importation
        
        
    Application.EnableEvents = False
    
    If Dir(DataSource) <> "" Then
        On Error GoTo FIN_Importation
        Workbooks.Open (DataSource)
    End If
    
    With Workbooks(fileName).Sheets("M")
        .Cells.Copy.whHisto.Sheets ("M-1")




FIN_Importation:
    On Error GoTo 0
    Application.EnableEvents = True


End Sub

Merci de te pencher sur mon cas!! :)

Sim
 

sim

XLDnaute Occasionnel
Re : VBA: Identifier et ouvrir un classeur comportant une annee N-1 dans son nom

C'est géré :)
++

Oui plus ou moins, je voulais vraiement passe par une Constante mais il ne m'accepte pas le iYear - 1 dans la constante

arffff on fera comme ca du coup!!

Bon la copie ne passe pas, il doit y avoir un detail qui m'echape...je reviens histoire de te donner la solution, si tu es curieux!! :)

Merci en tout cas, on aura certanement l'aoccasion de se croiser parce que je sens que je vais avoir plein de question a poser au forum!! :)


Sim
 

sim

XLDnaute Occasionnel
Re : VBA: Identifier et ouvrir un classeur comportant une annee N-1 dans son nom

Salut!!

Alors j'avais un probleme car il fallait que les deux classeur soit ouvert donc j'ai decider de passe par des objet ADODB, me permettant d'utiliser ses propriete connexion et recordset

Le fichier de l'annee passe peut donc etre ferme, ca implique qu'il faut qu'il soit dans le meme repertoir

du coup plus besoin de l'ouvrir...

Donc voila la solution finale, qui fonctionne

Code:
Private Function ImportationDatasFichierFerme_FX() As Boolean

'Fonction qui permet l'importation des donnees de FX de l'annee passe dans le nouveau classeur historic de l'annee.

    
    Dim sh As Worksheet
    Dim fld As Variant
    Dim I As Integer
    Dim DataSource As String
    Dim wbPast As String
    Dim wbCurrent As String
    Dim wkHistoFX As Workbook
    Dim cnn As Object: Set cnn = CreateObject("ADODB.Connection")
    Dim rst As Object: Set rst = CreateObject("ADODB.Recordset")
    
    Set wkHistoFX = Nothing
    
    wbPast = "historical_FX_" & (Year(Now) - 1) & ".xls"
    wbCurrent = "historical_FX_" & Year(Now) & ".xls"
    
    Set wkHistoFX = Workbooks(wbCurrent)
    Set sh = wkHistoFX.Sheets("M-1")
    
    If Right(strDirectory, 1) <> "\" Then strDirectory = strDirectory & "\"
    
    DataSource = Trim(REMOTE_DIRECTORY & Trim(wbPast)) 'Trim(...) pour résoudre les problèmes d'espace
                                                          'Trim(...) delete eventuals spaces in the directory
    
    On Error GoTo FIN_Importation ' en cas d'erreur la macro s'arrete
                                   ' in case of error the macro stops
    Application.EnableEvents = False
    
    If Dir(DataSource) <> "" Then
        On Error GoTo FIN_Importation
         cnn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DBQ=" & DataSource
         cnn.CursorLocation = 3 'adUseClient
         Set rst = cnn.Execute("SELECT * FROM [" & "M" & "$]")
         'Ré affichage des noms de champs
         'Display of the fields names
         With wkHistoFX.Sheets("M-1")
            sh.UsedRange.ClearContents
            For Each fld In rst.Fields
                I = I + 1
                .Cells(1, I) = fld.Name
            Next
         .Range("A2").CopyFromRecordset rst
         End With
         
    End If
    

    
FIN_Importation:
    On Error GoTo 0
    Application.EnableEvents = True
    
    'Libération des objets
    'Liberation of objects
    Set rst = Nothing
    Set cnn = Nothing
    
    ImportationDatasFichierFerme = Err.Number = 0
End Function

Bien sur il faut au prealable en tete de module definir le REMOTE_DIRECTORY


Voili voilou!!

Bonne journee :)

Sim
 

Discussions similaires

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg