IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enregistrer un onglet excel sous un fichier titré seulement avec la date du jour. [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut Enregistrer un onglet excel sous un fichier titré seulement avec la date du jour.
    Bonjour

    J'ai un petit problème qui me bloque depuis 2 jours. Je m'explique brièvement j'ai fais un programme qui m'enregistre un onglet excel dans mes fichiers : le voici (il marche parfaitement)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub Programme()
    
    Sheets("confirm 10").Select
        Sheets("confirm 10").Copy
        Cells.Select
        Range("A4").Activate
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
    NomFichier = Range("O7") & "_" & Range("O8") & "_" & Range("O12") & "_" & Range("O14")
        ActiveWorkbook.SaveAs Filename:= _
            "Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades\Avril 2012\20120419\" & NomFichier & ".xls" _
            , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False
            
            
            
            ActiveWindow.Close
    
    
    End Sub


    Si on se penche sur le chemin on remarque que j'ai rentré a la main 20120419 qui est un fichier sous le lecteur Z (qui correspond a la date du 19 Avril 2012)

    Donc dans cette optique il faudrait tous les jours changer de nom de fichier 20120420 20120421 ect ect donc j'aimerais que ma macro prenne en compte une variable date. Est ce possible?

    J'avais imaginé une variable date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaDate = Format(Now, "DD-MM-YY h-mm-ss")

    puis apres un chemin qui prendrait cette allure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades\Avril 2012\MaDate\" & NomFichier & ".xls" _

    Mais cela ne fonctionne pas. En même temps j'ai des heures minutes et secondes dans ma variable date.

    PS: J'ai excel 2003

    Comment donc integrer cette variable date a mon programme pour que quotidiennement la macro enregistre dans les fichier 20120420 20120421 ect ect sans y toucher! Merci

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Le code ci_après va créer le sous répertoire du Mois (Avril 2012 dans ton exemple) au cas où il n'existe pas et au sein duquel va créer un sous répertoire correspondant au jour.

    Étudie la logique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub Programme()
    Dim Rep As String, RepMois As String, RepJour As String, NomFichier As String
     
    Application.ScreenUpdating = False
    Rep = "Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades"
    'Si le répertoir père existe
    If Dir(Rep, vbDirectory) <> "" Then
        'On va chercher si le sous répertoire du mois existe au sein du répertoire père, on le crée s'il n'existe pas
        RepMois = Rep & "\" & Format(Date, "mmmm yyyy")
        If Dir(RepMois, vbDirectory) = "" Then MkDir RepMois
        'On v chercher si le sous répertoire du jour existe au sein du sous répertoire du mois, on le crée s'il n'existe pas
        RepJour = RepMois & "\" & Format(Date, "yyyymmdd")
        If Dir(RepJour, vbDirectory) = "" Then MkDir RepJour
     
        ThisWorkbook.Worksheets("confirm 10").Copy
        With ActiveWorkbook
            With .Worksheets(1)
                With .UsedRange
                    .Value = .Value
                End With
                NomFichier = .Range("O7") & "_" & .Range("O8") & "_" & .Range("O12") & "_" & .Range("O14")
            End With
            .SaveAs Filename:=RepJour & "\" & NomFichier & ".xls", FileFormat:=xlNormal
            .Close
        End With
    End If
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, pour la création d'un dossier, j'utiliserais plutôt ceci ( à adapter ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
     
    Private Declare Function SHCreateDirectoryEx Lib "Shell32.dll" Alias "SHCreateDirectoryExA" _
                                                 (ByVal hwnd As Long, ByVal pszPath As String, ByVal lngsec As Long) As Long
     
    Dim Rep As Long,sDossier as string
     
         Sdossier="Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades"
     
    ' Pour valeur retournée par Rep
    '   Voir http://msdn.microsoft.com/en-us/library/bb762131(VS.85).aspx
    '   et   http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
     
        Rep = SHCreateDirectoryEx(0&, sDossier, 0&)

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    Merci Mercatog!

    ça marche du tonnerre! Et la logique est parfaire Rep, dir (Rep, Vbdirectory), RepMois RepJour. Merci d'avoir ajouté des commentaires

    Juste un petit truc (), en fait tous jour je crée le fichier de la veille. Donc A la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RepJour = RepMois & "\" & Format(Date, "yyyymmdd")
    J'ai mi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RepJour = RepMois & "\" & Format(Date - 1, "yyyymmdd")
    Mais si on est le lundi j'aimerais bien qu'il remonte au vendredi et non au dimanche?

  5. #5
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub Programme()
    Dim Rep As String, RepMois As String, RepJour As String, NomFichier As String
    Dim MaDate As Date
     
    Application.ScreenUpdating = False
    Rep = "Z:\Risques et documentation OPCVM\Rapprochement Front Back\Confirmation Trades"
    'Si le répertoir père existe
    If Dir(Rep, vbDirectory) <> "" Then
        'Dans maDate on récuppère la date de la veille (si c'est un dimanche ou lundi, on prend vendredi précédent
        'Ici appel à la fonction veille
        MaDate = Veille
     
        'On va chercher si le sous répertoire du mois existe au sein du répertoire père, on le crée s'il n'existe pas
        RepMois = Rep & "\" & Format(MaDate, "mmmm yyyy")
        If Dir(RepMois, vbDirectory) = "" Then MkDir RepMois
        'On v chercher si le sous répertoire du jour existe au sein du sous répertoire du mois, on le crée s'il n'existe pas
        RepJour = RepMois & "\" & Format(MaDate, "yyyymmdd")
        If Dir(RepJour, vbDirectory) = "" Then MkDir RepJour
     
        ThisWorkbook.Worksheets("confirm 10").Copy
        With ActiveWorkbook
            With .Worksheets(1)
                With .UsedRange
                    .Value = .Value
                End With
                NomFichier = .Range("O7") & "_" & .Range("O8") & "_" & .Range("O12") & "_" & .Range("O14")
            End With
            .SaveAs Filename:=RepJour & "\" & NomFichier & ".xls", FileFormat:=xlNormal
            .Close
        End With
    End If
    End Sub
     
    Private Function Veille() As Date
    Dim d As Byte
     
    d = DatePart("w", Date, vbSunday)                'Si Date est Dimanche ou Lundi, on prend Vendredi comme étant la veille. 'Sinon, on prend j-1
    Veille = Date - IIf(D <= 2, d + 1, 1)
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Etudiant
    Inscrit en
    Janvier 2012
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 118
    Points : 35
    Points
    35
    Par défaut
    MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Aide: Macro pour enregistrer des onglets excel en fichiers txt.
    Par Josecito dans le forum Excel
    Réponses: 5
    Dernier message: 05/08/2015, 15h20
  2. Enregistrer un onglet excel sous un nouveau fichier tous les jours
    Par Naoned005 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/04/2012, 12h41
  3. Réponses: 7
    Dernier message: 18/04/2012, 12h45
  4. [AC-2003] Export d'un fichier en CSV avec la date du jour dans le nom du fichier
    Par thomasmbai dans le forum VBA Access
    Réponses: 3
    Dernier message: 19/01/2012, 04h16
  5. Sauvegarde : Fichier de sortie avec la date du jour
    Par Alexandre T dans le forum Administration
    Réponses: 2
    Dernier message: 18/12/2008, 10h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo