Se connecter avec
S'enregistrer | Connectez-vous

creation de fenetres a l'aide de macros

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte
Expert Programmation

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 http://www.presence-pc.com/forum/ppc/Programmation/aide... 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
Expert Programmation

Citation :
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 )

  1. For i = 1 To nbfiles
  2. specfichier = .FoundFiles(i)
  3. Workbooks.Open Filename:=specfichier
  4. specfichier = specfichier & ".xls"
  5. Application.DisplayAlerts = False
  6. ActiveWorkbook.SaveAs Filename:=specfichier, FileFormat:=xlNormal
  7. ActiveWorkbook.Close
  8. Next i


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

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 :
  1. ActiveWorkbook.SaveAs Filename:=specfichier

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
  1. specfichier = specfichier & ".xls"

merci pour cette correction mais cela ne repond toujours pas a ma question

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...

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.

Si on reprend ton programme...

  1. For i = 1 To nbfiles
  2. specfichier = .FoundFiles(i)
  3. Workbooks.Open Filename:=specfichier
  4. specfichier = specfichier & ".xls"
  5. Application.DisplayAlerts = False
  6. ActiveWorkbook.SaveAs Filename:=specfichier, FileFormat:=xlNormal
  7. ActiveWorkbook.Close
  8. 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.

  1. Dim sRep as variant
  2. Dim sfile as variant
  3.  
  4. sRep = "C:\output\" 'par exemple
  5. For i = 1 To nbfiles
  6. specfichier = .FoundFiles(i)
  7. Workbooks.Open Filename:=specfichier
  8. sfile = activeworkbook.name 'renvoie le nom du classeur sans le chemin
  9. sfile = left(sfile, instr(sfile,".") -1) & ".xls" 'change l'extention
  10. Application.DisplayAlerts = False
  11. ActiveWorkbook.SaveAs Filename:=sRep & sfile, FileFormat:=xlNormal
  12. ActiveWorkbook.Close
  13. Next i


Pas plus compliquer que ca
Expert Programmation

Ben quoi, c'est bien une bière blanche la hoegaarden, non ?

Faut associer du code à ton bouton [:spamafote]
Pour quitter :
  1. Private Sub CommandButton1_Click()
  2. Unload Me
  3. End Sub


Stro facile :sol: 

oui sa je sais pour ce type de bouton mais c un bouton qui se trouve dans une fenetre apart
voici le programme en entier :
  1. Option Explicit
  2. Public dossier
  3. Public Type BROWSEINFO
  4. hOwner As Long
  5. pidlRoot As Long
  6. pszDisplayName As String
  7. lpszTitle As String
  8. ulFlags As Long
  9. lpfn As Long
  10. lParam As Long
  11. iImage As Long
  12. End Type
  13. '32-bit API declarations
  14. Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  15. Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
  16. Declare Function SHBrowseForFolder Lib "shell32.dll" _
  17. Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
  18. Function GetDirectory(Optional Msg) As String
  19. Dim bInfo As BROWSEINFO, path As String, r As Long, x As Long, pos As Integer
  20. bInfo.pidlRoot = 0&
  21. If IsMissing(Msg) Then
  22. bInfo.lpszTitle = ""
  23. Else
  24. bInfo.lpszTitle = Msg
  25. End If
  26. bInfo.ulFlags = &H1
  27. x = SHBrowseForFolder(bInfo)
  28. path = Space$(512)
  29. r = SHGetPathFromIDList(ByVal x, ByVal path)
  30. If r Then
  31. pos = InStr(path, Chr$(0))
  32. GetDirectory = Left(path, pos - 1)
  33. Else
  34. GetDirectory = ""
  35. End If
  36. End Function
  37. Sub File_Openen()
  38. 'Doel : Files verwerken
  39. '
  40. Dim fs, i, namefile, FileNumber, specfichier, nbfiles, r, Srep, folder, ct
  41. dossier = GetDirectory("Kies een folder")
  42. If dossier <> "" Then
  43. Set fs = Application.FileSearch
  44. With fs
  45. .LookIn = dossier
  46. .SearchSubFolders = True
  47. .FileType = msoFileTypeAllFiles
  48. If .Execute() > 0 Then
  49. nbfiles = .FoundFiles.Count
  50. MsgBox "Er zijn " & nbfiles & " Files."
  51. folder = InputBox(ct, "choisir un nom : ", "nom fichier")
  52. Srep = "C:\Documents and Settings\boermansj\My Documents\" & folder & "/"
  53. MkDir ("C:\Documents and Settings\boermansj\My Documents\" & folder)
  54.  
  55. For i = 1 To nbfiles
  56. specfichier = .FoundFiles(i)
  57. Workbooks.Open Filename:=specfichier
  58. namefile = ActiveWorkbook.Name
  59. namefile = Left(namefile, InStr(namefile, ".") - 1)
  60. specfichier = namefile & ".xls"
  61. Application.DisplayAlerts = False
  62. ActiveWorkbook.SaveAs Filename:=Srep & specfichier
  63. ActiveWorkbook.Close
  64. Next i
  65. Else
  66. MsgBox "Geen files gevonden."
  67. End If
  68. End With
  69. End If
  70. End Sub

vous allez voir que l'on doit entrer un nom pour creer un dossier et je veux que quand on appui sur cancel,
on quitte le programme
(NB : il y a des choses en neerlandais je vous prie de m'en excuser mais je fais un stage chez thomson merci)
Expert Programmation

Citation :
Faut associer du code à ton bouton [:spamafote]
Pour quitter :
  1. Private Sub CommandButton1_Click()
  2. Unload Me
  3. End Sub

Stro facile :sol: 


Argggh. Pas compris que tu parlais de InputBox :/ 
J'ai l'air con maintenant, et Freeman en profite.
Spoiler
Heureusement que je l'ai mouché sur le code modifiable des modules, sinon ...

J'avais mal regardé tu créé un dossier donc c'est moins utile.
Pour le cas "" il suffit de tester la valeur de folder après l'inputbox, si il vaut "" c'est qu'il y a eu annulation enfin vérifie sur l'aide de la fonction.

Par contre je comprend pas ceci : "C:\Documents and Settings\boermansj\My Documents\" puisque juste avant tu récupère un répertoire dans la variable dossier?

je l'ai fais comme sa pour pouvoir changer le chemin.
car ce programme ne sera pas executer que sur mon pc et aussi je ne veux pas que les fichiers enregistrer soient avec les fichiers ouvert voila pour cela
J'ai un autre probleme un peu plus compliquer mais il faut que je vous donne un fichier comment faire ?
Lassé par la pub ? Créez un compte