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 :

Nom de fichier en fonction des fichiers déjà existants


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut Nom de fichier en fonction des fichiers déjà existants
    Bonjour à tous,

    Je souhaite savoir s'il est possible de créer, à partir d'une macro dans une feuille excel, un fichier Word dont le nom est une incrémentation des noms de fichiers déjà présent dans le repertoire d'enregistrement.

    Mon idée est de créer une macro sous excel. Quand on clique sur un bouton du userform, on donne l'instruction d'ouvrir un Modèle Word préparamétré (.dotx).
    Là, je vois bien une macro Word qui défini le nom du nouveau document et qui l'enregistre au bon endroit (toujours le même)
    Le modèle word s'enregistrera alors automatiquement sous le nom KMiii-XXXX, avec iii un nombre et XXX l'année de création.

    Le nombre iii doit être en fonction du dernier nombre apparut dans le repertoir d'enregistrement.
    Par exemple, si le répertoire contient
    KM001-2012
    KM002-2012
    KM003-2012

    alors le fichier à créer sera enregistré sous le nom KM004-2012

    Encore plus difficile : il faudrait que le fichier Excel récupère le chemin d'accès du fichier word qui vient d'être créé !

    Pouvez-vous me dire si c'est faisable, et si oui pouvez vous m'aiguiller sur le code associé?

    Merci d'avance

  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
    Voici un début de réponse avec une fonction qui donne le nom de fichier disponible dans un répertoire.
    Le fichier cherché et sous forme de PréfixeXXX-YYYY.docx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Str: Préfixe
    'Chemin: Chemin du réprtoire où chercher
    Function NomFich(ByVal Str As String, Chemin As String) As String
    Dim i As Integer
    Dim Fichier As String
     
    Do
        i = i + 1
        Fichier = Str & Format(i, "000") & "-" & Format(Date, "yyyy")
        If Dir(Chemin & Fichier & ".docx") = "" Then Exit Do
    Loop
    NomFich = Fichier
    End Function
    Exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    Sub Test()
     
    Msgbox NomFich("KM", "C:\Users\user\Desktop\")
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Merci mercatog pour ta réponse rapide !

    Cependant, lorsque j'envoie ce code, la msgbox me renvoie systématiquement KM001-2012
    Saurais-tu pourquoi?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    ben il existe ce fichier "KM001-2012.docx" ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Si le repertoire comporte
    KM001-2012.docx
    KM002-2012.docx
    KM003-2012.docx
    KM004-2012.docx
    la macro devrait renvoyer KM005-2012

    Or ici il me renvoie KM001-2012

    ça marche chez vous? C'est peut-être moi qui ai mal nommé mes fichiers, mais ça n'a pas l'air d'etre ça.

  6. #6
    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
    As tu adapté le chemin?
    "C:\Users\user\Desktop\"

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    Désolé, j'avais oublié un \ à la fin de mon chemin !

    Merci beaucoup.

    Donc on a une partie du code OK.

    Maintenant pourriez vous m'aiguiller sur la façon de récupérer le nom du docx (qu'on vient de créer) vers la macro d'excel ?

    J'avais dans l'idée de récupérer l'adresse du docx en cours (c'est à dire celui dont la page est ouverte). On peut faire ça, ou y-a-t-il plus simple?

  8. #8
    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
    Il faudra être précis: Tu veux piloter Word à partir d'Excel.
    Les codes sont dans Excel seulement ou aussi dans ton document Word.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    J'utilise en tache principale un fichier excel, qui gere de nombreux documents.
    Sur ce fichier, j'ai une macro avec une userform qui comportera un bouton "Nouveau Rapport". Je souhaite que quand l'utilisateur appuie sur Nouveau Rapport, un nouveau document word apparaisse, paramétré par un modèle de document.
    Grace au code que tu viens de me donner, je pourrai écrire un code pour enregistrer automatiquement ce nouveau rapport avec le bon nom (incrémenté).

    C'est ce nom (et son chemin) que je veux récupérer dans mon fichier excel, afin de pouvoir renseigner ma pseudo base de données sur la création de ce nouveau document, devant lequel on pourra mettre des informations à propos du document (observations, sujet, validité, etc...)

    En fin de compte, chaque ligne de la feuille excel comportera un lien vers un document, en regard desquels seront indiquées de nombreuses informations.

    Je sais, c'est pas vraiment claire, donc n'hésites pas à me demander plus de détails.

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Montre nous le code que tu utilise pour créer ton fichier word.

  11. #11
    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
    Exemple d'ouverture et d'enregistrement de document Word à partir d'Excel
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub GenerationDoc()
    Dim Model As String, Rep As String, NouvNom As String
    Dim App As Object, Doc As Object
    Dim NewLig As Long
     
     
    Application.ScreenUpdating = False
    Model = "C:\Users\user\Desktop\MonmodèleWord.dotx"    'Rep complet du model word
    Rep = "C:\Users\user\Desktop\ESSAI\"          'Répertoire des fichiers word
     
    Set App = CreateObject("Word.Application")
    App.Visible = True
    Set Doc = App.Documents.Open(Filename:=Model)
     
    'Travail avec Doc: le document word ouvert à partir du modèle
    '....
     
    NouvNom = NomFich("KM", Rep)
    Doc.SaveAs2 Filename:=Rep & NouvNom, FileFormat:=12
    Doc.Close
    Set Doc = Nothing
    App.Quit
    Set App = Nothing
     
    'ici on enregistre en Feuil1 les infos sur le fichier Word
    With ThisWorkbook.Worksheets("Feuil1")
        NewLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
     
        .Range("A" & NewLig).Value = NouvNom
        .Range("B" & NewLig).Value = Date
        .Hyperlinks.Add Anchor:=.Range("C" & NewLig), Address:=Rep & NouvNom & ".docx", TextToDisplay:="Lien vers fichier " & NouvNom 'création de lien hypertexte vers le fichier
        '.....
        'Autres infos
    End With
    End Sub
     
     
    'Str: Préfixe
    'Chemin: Chemin du réprtoire où chercher
    Function NomFich(ByVal Str As String, Chemin As String) As String
    Dim i As Integer
    Dim Fichier As String
     
    If Right(Chemin, 1) <> "\" Then Chemin = Chemin & "\"
    Do
        i = i + 1
        Fichier = Str & Format(i, "000") & "-" & Format(Date, "yyyy")
        If Dir(Chemin & Fichier & ".docx") = "" Then Exit Do
    Loop
    NomFich = Fichier
    End Function

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2011
    Messages : 42
    Points : 18
    Points
    18
    Par défaut
    ça marche très bien !

    Merci beaucoup mercatog !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/12/2014, 15h30
  2. Réponses: 18
    Dernier message: 17/07/2014, 14h13
  3. Telecharger des fichiers en fonction des checkbox cochées
    Par simos dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 13/01/2009, 15h25
  4. Réponses: 2
    Dernier message: 18/01/2008, 11h13
  5. Récuperer des fichiers en fonction de leur ancienneté
    Par julien000 dans le forum Langage
    Réponses: 3
    Dernier message: 24/07/2006, 17h09

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