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 :

Créer une multitude de répertoires selon la date ! [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut Créer une multitude de répertoires selon la date !
    Bonjour à tous,

    Je souhaiterais enregistrer les fichiers automatiquement durant l'utilisation de la macro que j'utilise dans plusieurs dossiers emboités, je m'explique par exemple lorsque j'utilise ma macro je souhaiterais que le fichier se sauvegarde dans les répertoires
    C:/Test/2017/Juin/[ICI], sachant que les répertoires 2017 et Juin n'existe pas

    - Y'a t'il une fonctionnalité permettant de créer tous les répertoires inexistant d'une traite ? Je pensais à les créer un par un mais je trouve la syntaxe un peu lourde.

    - Egalement j'aimerais savoir si il est possible d'utiliser la fonction Month() pour avoir un retour en français ou alors l'utilisation d'une autre macro pour faire correspondre les nombres aux mois est indispensable.


    Voici ma partie pour créer le répertoire au même endroit que celui au départ à la date d'aujourd'hui

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    nom_rep = Workbooks("OST pour BOT.xlsx").Path
        jour = Format(Now(), "ddmmyyyy")
    nom_rep = nom_rep & "\" & "sauvegarde"
    MsgBox nom_rep
    nom_rep = nom_rep & "\" & Year(Now())
    If Dir(nom_rep, vbSystem + vbDirectory + vbHidden) = "" Then
    MkDir nom_rep
    End If
    nom_rep = nom_rep & "\" & Month(Now())
    If Dir(nom_rep, vbSystem + vbDirectory + vbHidden) = "" Then
    MkDir nom_rep
    End If
    Je pense pouvoir trouver une solution viable bien qu'un peu lourde mais je cherche à enrichir mes connaissances en VBA d'où ce post !

    Merci à tous !

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Opal_m Voir le message
    - Y'a t'il une fonctionnalité permettant de créer tous les répertoires inexistant d'une traite ? Je pensais à les créer un par un mais je trouve la syntaxe un peu lourde.
    Il faut effectivement utiliser MkDir pour créer un répertoire et Dir pour vérifier si un répertoire existe.

    Mais encore faut-il le faire au bon endroit.
    Quand on créer un nouveau répertoire, il faut se placer dans le répertoire qui va l'accueillir.
    https://msdn.microsoft.com/fr-fr/vba...hdir-statement

    Idem quand on cherche un répertoire ou un fichier avec un Dir() (à moins de mettre le chemin complet dans la fonction).

    - Egalement j'aimerais savoir si il est possible d'utiliser la fonction Month() pour avoir un retour en français ou alors l'utilisation d'une autre macro pour faire correspondre les nombres aux mois est indispensable.
    La seule méthode que je vois est de placer une fonction MOIS() dans une cellule de feuille de calcul avec une propriété FormulaLocal.
    De récupérer dans une variable la valeur renvoyée avec une propriété Text appliqué à Range de cette cellule.
    Puis d'effacer le contenu de la cellule pour faire le ménage.

    Pas très propre comme méthode mais on peut être sûr qu'elle marche.
    Avec un Evaluate ou un WorksheetFunction, pas sûr qu'il soit possible d'obtenir une réponse en français.

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Merci beaucoup Menhir ! La solution est top
    Je vous marque mon code, il fonctionne bien qu'un peu chargé ...

    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
    Nom_rep = Workbooks("OST pour BOT.xlsx").Path
        jour = Format(Now(), "ddmmyyyy")
    Nom_rep = Nom_rep & "\" & "sauvegarde"
    MsgBox Nom_rep
    Nom_rep = Nom_rep & "\" & Year(Now())
    If Dir(Nom_rep, vbSystem + vbDirectory + vbHidden) = "" Then
    MkDir Nom_rep
    End If
    Mois = Month(Now())
    MsgBox Mois
    Mois2 = MoisEnLettre(Mois)
    Nom_rep = Nom_rep & "\" & Mois2
    MsgBox Nom_rep
    If Dir(Nom_rep, vbSystem + vbDirectory + vbHidden) = "" Then
    MkDir Nom_rep
    End If
    Nom_rep = Nom_rep & "\" & jour
    MsgBox Nom_rep
    If Dir(Nom_rep, vbSystem + vbDirectory + vbHidden) = "" Then
    MkDir Nom_rep
    End If
    Avec la fonction suivante

    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
    40
    41
    42
    Function MoisEnLettre(Mois As Integer) As String
     
    If Mois = 1 Then
    MoisEnLettre = "Janvier"
    End If
    If Mois = 2 Then
    MoisEnLettre = "Fevrier"
    End If
    If Mois = 3 Then
    MoisEnLettre = "Mars"
    End If
    If Mois = 4 Then
    MoisEnLettre = "Avril"
    End If
    If Mois = 5 Then
    MoisEnLettre = "Mai"
    End If
    If Mois = 6 Then
    MoisEnLettre = "Juin"
    End If
    If Mois = 7 Then
    MoisEnLettre = "Juillet"
    End If
    If Mois = 8 Then
    MoisEnLettre = "Aout"
    End If
    If Mois = 9 Then
    MoisEnLettre = "Septembre"
    End If
    If Mois = 10 Then
    MoisEnLettre = "Octobre"
    End If
    If Mois = 11 Then
    MoisEnLettre = "Novembre"
    End If
    If Mois = 12 Then
    MoisEnLettre = "Decembre"
    End If
     
     
     
    End Function

    Merci encore de ta réponse, je clos le sujet sur ce

  4. #4
    Expert confirmé
    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
    Par défaut
    Salut, une remarque : Balise ton code

    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
    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
     
    Private Function CreationDossier(sDossier) As Long
    Dim Rep As Long
        ' 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&)
    End Function
     
    Sub Tst_01()
    Dim sDossier As String
        sDossier = "c:\a\b\c"
        MkDir sDossier
    End Sub
     
    Sub Tst_02()
    Dim sDossier As String
        sDossier = "c:\a\b\c\d\e\f\g\h\i\j"
        CreationDossier sDossier
    End Sub

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    @menhir
    sauf erreur de ma part mkdir ne fait rien si le dossier existe donc test dir on peu s'en passer si ma mémoire et bonne
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre averti
    Homme Profil pro
    Etudiant - Stage MOA
    Inscrit en
    Juin 2017
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Stage MOA
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2017
    Messages : 36
    Par défaut
    Merci à tous de votre aide, le code fonctionne mais je n'ai pas bien compris ce que tu appelles balises, je regarderais l'hyperlink que tu m'as envoyé je suis un peu occupé au travail , toujours curieux d'appréhender d'autres voies trouver des solutions !
    Le mkdir servira pour les nouveaux mois je pense ! Et éviter les erreurs si le dossier existe, j'avoue que j'ai toujours procédé de cette manière mais si tu as une idée pour alléger mon code c'est avec plaisir

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function MoisEnLettre(Mois As Integer) As String
    MoisEnLettre=Array("","Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre")(Mois)
    End Function

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/11/2009, 16h15
  2. Script retournant la liste des fichiers d'un répertoire selon la date et la taille
    Par desolation1985 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 11/06/2009, 18h29
  3. Créer une arborescence de répertoires pris dans une liste
    Par ouskel'n'or dans le forum Contribuez
    Réponses: 2
    Dernier message: 02/09/2008, 15h48
  4. Réponses: 4
    Dernier message: 26/05/2008, 09h20
  5. [MFC] Créer une multitude d'infos bulles sur une vue
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 03/02/2006, 10h57

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