creation de fenetres a l'aide de macros

  • Auteur de la discussion hoegarden31
  • Date de début

hoegarden31

Expert
Lu je suis nouveau en programmation VBA
J'aimerai savoir comment on enregistre un fichier dans un endroits donner grace a une macro
Merci d'avance
 

hoegarden31

Expert
dsl j'avais pas vu le topic aide macro [strike]donc inutile de repondre merci[/strike]
 

zeb

Modérateur
Arghhhh. x_x Ici, c'est particulier : c'est chacun sa question.

Tu vois tu as créé un sujet "Programmation Macros". Tu n'as quand même pas l'intention que toutes les questions concernant la programmation et les macros tombent ici ?

Bon, dans ce sujet c'est pareil. Le titre est tellement évasif que tu penses légitime d'y poster ta question. Donc, je t'invite à modifier le titre de ton sujet et à attendre les réponses ici. Pour cela clique sur et changes-en.

Merci
 

zeb

Modérateur
Enregistrer un fichier dans un endroits donné
Qu'est-ce qui pose problème ? Juste donner un nom et/ou un chemin au fichier ou plus globalement comment enregistrer ?

N'hésite pas à publier un bout de code pour qu'on se rende compte de ce qui te manque. (/!\ à l'art de publier du code : cf. les règles )
 

hoegarden31

Expert
[cpp] For i = 1 To nbfiles
specfichier = .FoundFiles(i)
Workbooks.Open Filename:=specfichier
specfichier = specfichier & ".xls"
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=specfichier, FileFormat:=xlNormal
ActiveWorkbook.Close
Next i
[/cpp]

voici un bout du code. Je cherche a ouvrir des fichiers texte, Published...
Puis il faut les sauver sous format excel, et donc mon probleme est :
qaund j'enregistre, le fichier se trouve a l'enplacement du fichier source,
donc si j'execute le programme plusiers fois, je me trouve avec un nom de fichier trop long :
ex : nomfichier.xls.xls donc je voudrai sauvegarder les fichiers dans un autre dossier
 

Senvisage

Habitué
J'vais ptet dire une connerie (et je compte sur "Super-Zeb" pour me crever les yeux dans ce cas ^^), mais l'attribut "FileFormat" n'est pas necessaire, car Filename contient deja l'extension du fichier... ce qui donne :
[cpp]ActiveWorkbook.SaveAs Filename:=specfichier[/cpp]
 

hoegarden31

Expert
oui exact mais je l'avais mis pour voir si il mettait l'extension automatiquement mais comme ce n'etait pas le cas alors j'ai ajouter
Code:
specfichier = specfichier & ".xls"
merci pour cette correction mais cela ne repond toujours pas a ma question
 

Freeman23

Expert
En théorie c'est tout bête le chemin contenu dans specfichier est le chemin complet du fichier que tu ouvres : donc "c:\toto.txt" par exemple et devient "c:\toto.txt.xls" ce qui n'est pas terrible.

Donc créer tout bêtement une variable pour tes fichiers de sorti.
Tu peux te servir par exemple de :

- Une variable avec le répertoire de sorti
- tu récupères le nom du classeur avec activeworkbook.name
- tu vires l'extention avec instr() left() mid()
- tu rajoutes l'extention désirée.
- tu créé ton chemin complet de sorti...
 

hoegarden31

Expert
vous pouvais m'expliquer comment se servir de instr(), left() et mid()
merci beaucoups
 

hoegarden31

Expert
C bon j'ai trouver comment m'en servir mais le probleme est que le nom d'un fichier peut etre plus long donc je peux pas me servir de left() et avec right() j'obtiens que l'extention, que faire ?
 

Freeman23

Expert
C'est simple si tu as une variable contenant "c:\toto.txt" et tu veux avoir au final une copie excel des fichiers dans un autre repertoire et en format xls. Qu'est que qu'il faut faire pour cela

Récupérer le nom du fichier : Activeworkbook.name => toto.txt
Trouver la position de .txt dans le nom : Instr() => 5
Récupérer la partie à gauche de cette position : left() => toto
rajouter le repertoire et la nouvelle extention : "C:\sorti\toto.xls"

ici le mid ne sert pas mais ca fait partie des fonctions utiles à connaitre.
 

hoegarden31

Expert
ok mais le probleme est que j'ai plusieurs fichiers avec un nom different
ex toto.txt
nomfichier.txt
alors je me retrouve avec
Instr() => 5
left() => nomf
(je me trompe peut-etre ?)
 

Freeman23

Expert
Lis l'aide la fonction Instr... C'est un traitement à effectuer dans ta boucle et tout tes fichiers sont avec l'extention ".txt"... Tu devrais trouver tout seul ce qu'il faut faire.
 

hoegarden31

Expert
non justement, il peut y avoir des fichiers doc , des fichiers published ...
 

Freeman23

Expert
Ben tu as plus espérer qu'il n'y ait pas de . dans les noms de fichiers avant l'extention :D
 

hoegarden31

Expert
ok mais j'arrive pas a enregistrer dedans merci de m'aider
(dsl mais je suis tellement nul )
 

Freeman23

Expert
Si on reprend ton programme...

Code:
For i = 1 To nbfiles
    specfichier = .FoundFiles(i)
    Workbooks.Open Filename:=specfichier
    specfichier = specfichier & ".xls"
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=specfichier, FileFormat:=xlNormal
    ActiveWorkbook.Close
Next i

Normalement FoundFiles provient de l'utilisation de application.FileSearch normalement ca renvoie le nom et le chemin du fichier. donc specfichier doit valoir <chemin> + <nom> + <extention>

Tu veux sauvegarder le meme nom de fichier en changeant le répertoire et l'extention. Donc en gros i te faut une variable pour le répertoire et une pour le nom du fichier.

Code:
Dim sRep as variant 
Dim sfile  as variant 

sRep = "C:\output\" 'par exemple
For i = 1 To nbfiles
    specfichier = .FoundFiles(i)
    Workbooks.Open Filename:=specfichier
    sfile = activeworkbook.name 'renvoie le nom du classeur sans le chemin 
    sfile = left(sfile, instr(sfile,".") -1) & ".xls" 'change l'extention
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs Filename:=sRep & sfile, FileFormat:=xlNormal
    ActiveWorkbook.Close
Next i

Pas plus compliquer que ca
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 078
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut