Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2858 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Enregistrement format spécifique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Enregistrement format spécifique

n°2195812
macrosouci​s
Posté le 28-06-2013 à 13:20:41  profilanswer
 

Bonjour à tous,  
 
 
Je problème que je rencontre a lieu dans le code au niveau de l'enregistrement de ma feuille Excel.  
Le fichier que j'enregistre doit être au même format qu'initialement ( c'est à dire avant le traitement du fichier par la macro)
 
Le fichier est en .asc et est ouvert via la fonction dir par ce code:

Code :
  1. Dossier = objFolder.ParentFolder.ParseName(objFolder.Title).Path & "\" 
  2.     Fichier = Dir(Dossier & "*.asc" )
  3. While Fichier <> ""
  4.         Workbooks.OpenText Dossier & Fichier, 932, 1, xlDelimited, Tab:=True, _
  5.                   FieldInfo:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True


 
Il est enregistré par ce code:

Code :
  1. FicSav = Application.GetSaveAsFilename(, "Fichier ,*.asc" )


 
Le soucis est que le fichier est bien enregistré au bon format (.asc) mais lorsque je l'ouvre sur le logiciel ( qui gère les fichiers .asc) rien ne se passe ...je pense que le format d'enregistrement n'est pas le même que lors de l'ouverture ( il faut prendre en compte la première partie du code je pense lignes 4 et 5) mais je ne sais pas comment agir sur le code pour que ça marche...
 
Je pensais aussi au format texte avec tabulation auquel serait conjugué le .asc...je ne sais plus  :pt1cable:  
 
Merci de votre aide !

mood
Publicité
Posté le 28-06-2013 à 13:20:41  profilanswer
 

n°2195818
Marc L
Posté le 28-06-2013 à 13:38:35  profilanswer
 

macrosoucis a écrit :

Il est enregistré par ce code:

Code :
  1. FicSav = Application.GetSaveAsFilename(, "Fichier ,*.asc" )



            Certainement pas ‼    Rien qu'en lisant l'aide VBA de cette méthode …
 
            Identifiez l'instruction enregistrant le fichier afin de voir ses options dans son aide.
 
            Plus disponible jusqu'en fin d'après-midi …

n°2195824
macrosouci​s
Posté le 28-06-2013 à 13:53:28  profilanswer
 

Oui j'ai compris comme vous me l'aviez dit:
 

Citation :


En lisant l'aide de la méthode  Close  associée à un objet Workbook,  
           on s'aperçoit qu'elle (GetSaveAsFilename) est capable à la volée de sauvegarder ou pas le classeur, et même de demander un nom de fichier !  


 
Mon code d'enregistrement est:
 

Code :
  1. FicSav = Application.GetSaveAsFilename(, "Fichier ASC,*.asc" )
  2.     ActiveWorkbook.Close IIf(FicSav <> False, True, False), FicSav


 
 
Le fichier enregistré doit être en format .asc mais tabulé dans la mesure où lorsque je l'ouvre sur le Bloc Note par exemple, le format de la feuille doit être identique à celle sur Excel ( actuellement il y a pavé incompréhensible écrit en japonais)
 
Aucun soucis Marc L si vous n'êtes pas disponible cet après-midi, merci d'avoir prévenu ! :)


Message édité par macrosoucis le 28-06-2013 à 13:54:36
n°2195827
Marc L
Posté le 28-06-2013 à 14:02:57  profilanswer
 

Citation :

En lisant l'aide de la méthode  Close  associée à un objet Workbook,  
           on s'aperçoit qu'elle (GetSaveAsFilename)

                                              elle  =  Close  ‼
 
            Mais comme ce n'est plus un fichier Excel (j'avais pourtant émis un p'tit doute lors du précédent sujet …  :sarcastic: ),
            il faut retourner voir du côté de la méthode  SaveAs  et de sa propriété  FileFormat  
 
            Edit : à partir de la version 2007  (quid de la vôtre …), il y a une nouvelle fonction d'export …


Message édité par Marc L le 28-06-2013 à 14:06:33
n°2195832
macrosouci​s
Posté le 28-06-2013 à 14:30:14  profilanswer
 

D'accord ! Je n'avais pas saisi votre suggestion sur le format d'enregistrement...
 
 
Merci grâce à la méthode SaveAs associée au FileFormat c'est déjà  mieux ! La tabulation existe lorsque j'ouvre le fichier avec le bloc note...Le soucis est que j'enregistre le fichier en format Texte (séparateur: Tabulation) mais je voudrais également que ça soit en format .asc ? Je ne sais pas si c'est possible...
 
Mon code actuel qui fonctionne "provisoirement" pour l'enregistrement en format texte tabulé:

Code :
  1. FicSav = Application.GetSaveAsFilename(, "Fichier ASC,*.asc" )
  2.     ActiveWorkbook.SaveAs FileFormat:= _
  3.         xlText, CreateBackup:=False
  4.     ActiveWorkbook.Close


 
Je vais réanalyser ligne par ligne ! Merci déjà de m'avoir mis sur la bonne piste !!
 
Edit : Je dispose d'excel 2010


Message édité par macrosoucis le 28-06-2013 à 14:31:06
n°2195909
Marc L
Posté le 28-06-2013 à 18:41:50  profilanswer
 

 
            La fonction à partir de 2007 est en fait réservée aux fichiers .pdf & .xps …
 
            Un format .asc ne me dit rien.
            Mais si Excel arrive à l'ouvrir et n'est pas pourtant dans sa liste de types de fichiers,
            c'est donc un format connu, certainement un fichier texte à séparateur tabulation;
            je ne vois pas alors de difficulté …   Ne pas confondre format de fichier et nom de fichier (son extension) !
 

n°2195974
macrosouci​s
Posté le 29-06-2013 à 14:43:24  profilanswer
 

Oui Excel parvient à traiter ce type de fichier ! Je pense ( même certain) que le format de fichier doit être en texte à séparateur tabulation et son extension en .asc pour que le fichier puisse être ouvert et surtout lu par le logiciel...
 
J'espère ne pas avoir confondu format et extension ci-dessus ...
 
Merci pour cette précision !!

n°2196069
macrosouci​s
Posté le 01-07-2013 à 09:14:39  profilanswer
 

Bon après de longues tentatives, je bloque vraiment sur ce point...
 
Je comprends pas comment "organiser" le code car sur mon code précédent je dis bien que le type de fichier est : Fichier ASC; son extension en .asc et qu'il doit être enregistré en format texte tabulation...
 
Pourtant il enregistre en format texte et en .txt....

n°2196072
macrosouci​s
Posté le 01-07-2013 à 09:43:57  profilanswer
 

Bon j'ai enfin réussi à sauvegarder dans le bon format avec la bonne extension !  :pt1cable:  
 

Code :
  1. ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename( _
  2.               fileFilter:="Fichier ASC, *.asc" ), _
  3.         FileFormat:=xlText, CreateBackup:=False
  4.     ActiveWorkbook.Close


 
 
Reste maintenant à voir le problème pour la sauvegarde de plusieurs feuilles étant donné qu'en format texte, on ne peut enregistrer que feuille par feuille d'un classeur non ?
EDIT1: le problème avec le Split se confirme...lorsque je veux enregistrer 2 feuilles ( somme,median), uniquement le spectre somme est enregistré ...
 
Et j'ai un petit soucis lors de la ligne 4 du code, la fermeture du classeur n'est pas automatisée ...
EDIT2: Ce soucis est réglé il fallait simplement ajouté False ou True à la fin ...


Message édité par macrosoucis le 01-07-2013 à 10:55:08
n°2196098
Marc L
Posté le 01-07-2013 à 12:33:53  profilanswer
 

 
            Je ne visualise pas le problème du Split, cela manque de clarté …


Message édité par Marc L le 01-07-2013 à 12:35:47
mood
Publicité
Posté le 01-07-2013 à 12:33:53  profilanswer
 

n°2196115
macrosouci​s
Posté le 01-07-2013 à 13:53:58  profilanswer
 

Voici mon code actuel pour la partie enregistrement:
 

Code :
  1. '    Set objworkbooksource = ActiveWorkbook
  2.     choix = InputBox("Type de spectre à choisir: somme, median ou moyenne", "Titre", XXX)
  3. '    MsgBox choix
  4.     Worksheets(Split(choix, "," )).Copy
  5.     ActiveWorkbook.SaveAs Filename:=Application.GetSaveAsFilename( _
  6.               fileFilter:="Fichier ASC, *.asc" ), _
  7.         FileFormat:=xlText, CreateBackup:=False
  8.     ActiveWorkbook.Close True


 
 
Le soucis apparaît à la ligne 4 ...Imaginons que je souhaite enregistrer les feuilles "somme et median", je rentre donc : somme,median   dans la boite de dialogue et bien juste la feuille somme du classeur est enregistré et non les feuilles sommes et médians...
 
Peut être faut-il mettre en place une fonction ( Dir ?) pour dire que lorsque je séléctionne plusieurs feuilles d'un classeur à copier puis à enregistrer, l'enregistrement de chaque feuille se fasse successivement ...  En effet avec mon code actuel, il est logique de ne pas pouvoir sauvegarder 2 feuilles d'un classeur dans un même fichier texte unique ...
 
 
je sais pas si vous y voyez plus clair ...
 
 
merci déjà en tout cas !! Vous êtes le seul forumeur actif j'ai l'impression c'est vraiment sympa :)


Message édité par macrosoucis le 01-07-2013 à 13:55:31
n°2196126
Marc L
Posté le 01-07-2013 à 14:51:14  profilanswer
 

 
           Et oui en fait c'est logique car le fichier enregistré n'est plus un classeur Excel composé de feuilles
           mais un simple fichier texte créé à partir de la feuille active !
 
           Donc toute la logique est à revoir !
           Il faut en fait créer un nouveau classeur puis y regrouper dans une feuille unique les données à exporter en fichier texte …
 

n°2196128
macrosouci​s
Posté le 01-07-2013 à 15:23:40  profilanswer
 

Oui et non ...
 
 
Je pensais créer une boucle agissant sur toutes les feuilles d'un classeur donnée...Donc imaginons qu'un classeur contienne 2 feuilles, je voudrais alors que l'opération de sauvegarde agisse sur chacune des feuilles...
 
 
Mon code actuel qui ne marche pas:
 

Code :
  1. Dim Ws As Worksheet
  2.  
  3. '    Set objworkbooksource = ActiveWorkbook
  4.     choix = InputBox("Type de spectre à choisir: somme, median ou moyenne", "Titre", XXX)
  5. '    MsgBox choix
  6.     Worksheets(Split(choix, "," )).Copy
  7.    
  8.     For Each Ws In Worksheets
  9.    
  10.     Ws.SaveAs Filename:=Application.GetSaveAsFilename( _
  11.               fileFilter:="Fichier ASC, *.asc" ), _
  12.         FileFormat:=xlText, CreateBackup:=False
  13.    
  14.     MsgBox Ws.Name
  15.     Next
  16.     ActiveWorkbook.Close True


Message édité par macrosoucis le 01-07-2013 à 15:35:50
n°2196158
Marc L
Posté le 01-07-2013 à 17:24:26  profilanswer
 

 
           Et qu'est-ce qui ne marche pas ?   Message d'erreur ?
 

n°2196179
macrosouci​s
Posté le 01-07-2013 à 19:29:17  profilanswer
 

Oui un message d'erreur...
 

Citation :

Erreur d'exécution '1004':
La méthode 'SaveAs' de l'objet'_Worksheet' a échoué


 
 
Je ne sais pas pourquoi....

n°2196184
Marc L
Posté le 01-07-2013 à 19:54:34  profilanswer
 

 
           De toute manière avec la ligne n°9 toutes les feuilles sont enregistrées sans se préoccuper du choix ! …
 
           Dans le cas où chacune des feuilles dans choix doivent être exportées séparément dans des fichiers .asc distincts,
           c'est assez simple.   Sinon, je n'ai pas assez de précisions afin de proposer une solution …
 

n°2196208
macrosouci​s
Posté le 02-07-2013 à 09:11:20  profilanswer
 

Je suis d'accord avec vous pour la ligne n°9...cette ligne est censée enregistrer toutes les feuilles présentes dans le nouveau classeur généré par choix . Seulement 1, 2 ou 3 feuilles sont générées par choix dont seules ces 3 feuilles peuvent être enregistrées non ?
Ce que je souhaite c'est enregistré chacune des feuilles de choix (classeur généré (ne contenant pas la macro) contenant les feuilles entrées dans la Inputbox) successivement ce format et extension (texte avec tabulation .asc)...en gros faire une boucle d'enregistrement pour chaque feuille du classeur .
 
Cependant il y a tout d'abord ce message d'erreur que je ne comprends pas ....
 
Je ne sais pas si vous y voyez mieux ?


Message édité par macrosoucis le 02-07-2013 à 09:12:46
n°2196226
Marc L
Posté le 02-07-2013 à 11:59:41  profilanswer
 

 
           Pas vraiment mais si la réponse à ma question est oui :

Code :
  1.     choix = InputBox(vbLf & "Type de spectre à choisir:" & vbLf & _
  2.                      vbLf & "somme, median ou moyenne" )
  3.    
  4.     If choix > "" Then
  5.         Application.ScreenUpdating = False
  6.          Application.DisplayAlerts = False
  7.         Worksheets(Split(choix, "," )).Copy
  8.    
  9.         For Each Ws In ActiveWorkbook.Worksheets
  10.             Ws.Activate
  11.             ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Export " & Ws.Name & " .asc", xlText
  12.         Next
  13.    
  14.         ActiveWorkbook.Close False
  15.          Application.DisplayAlerts = True
  16.         Application.ScreenUpdating = True
  17.     End If


Message édité par Marc L le 02-07-2013 à 12:00:40
n°2196227
macrosouci​s
Posté le 02-07-2013 à 12:24:05  profilanswer
 

Et bien merci beaucoup !! Je ne sais pas comment vous remercier ! Cela fonctionne mais j'ai remplacé une partie votre ligne 11 par celle-ci étant donné que je voulais vraiment la boite de dialogue Enregistrer sous afin de nommer à souhait le fichier.  

Code :
  1. Filename:=Application.GetSaveAsFilename( _
  2.               fileFilter:="Fichier ASC, *.asc" ), _
  3.         FileFormat:=xlText, CreateBackup:=False


Il me reste encore bien des choses à comprendre...En tout cas, ça donne vraiment envie d'aider les autres ce que vous faites...
Je n'hésite plus à lire les problèmes postés et à m'y intéresser pour apprendre !


Message édité par macrosoucis le 02-07-2013 à 12:40:15

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Enregistrement format spécifique

 

Sujets relatifs
VBA et chaine de caractèresenvoie d'un array php au format json
[Resolu] [VBA] Impression Fichier .pdf (Hyperliens)[VBA] Excel 2010: remplacer FileSearch de Excel 2003
Bd Access, champs liés à la source Excel avec VBAproblème de variables VBA
[VBA] soustraire une variable à une heureChronomètre VBA Excel
[VBA] Enregistrement feuille excel dans un répertoire 
Plus de sujets relatifs à : [VBA] Enregistrement format spécifique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR