Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2012, 17h59   #1
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
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
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 18h25   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
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 :
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 :
1
2
3
4
5
6
 
 
Sub Test()
 
Msgbox NomFich("KM", "C:\Users\user\Desktop\")
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 19h00   #3
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
Merci mercatog pour ta réponse rapide !

Cependant, lorsque j'envoie ce code, la msgbox me renvoie systématiquement KM001-2012
Saurais-tu pourquoi?
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h12   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
ben il existe ce fichier "KM001-2012.docx" ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 21
Vieux 14/01/2012, 19h29   #5
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
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.
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h32   #6
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
As tu adapté le chemin?
"C:\Users\user\Desktop\"
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 19h40   #7
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
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?
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h48   #8
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Il faudra être précis: Tu veux piloter Word à partir d'Excel.
Les codes sont dans Excel seulement ou aussi dans ton document Word.
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 20h04   #9
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
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.
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 20h29   #10
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
Montre nous le code que tu utilise pour créer ton fichier word.
bbil est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 14/01/2012, 20h44   #11
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Exemple d'ouverture et d'enregistrement de document Word à partir d'Excel
Code :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/01/2012, 20h11   #12
Invité de passage
 
Homme
Inscription : mars 2011
Messages : 36
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : mars 2011
Messages : 36
Points : 4
Points : 4
ça marche très bien !

Merci beaucoup mercatog !
glc29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h34.


 
 
 
 
Partenaires

Hébergement Web