[VBA] Enregistrement format spécifique

Enregistrement format spécifique [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 28-06-2013 à 13:20:41    

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 !

Reply

Marsh Posté le 28-06-2013 à 13:20:41   

Reply

Marsh Posté le 28-06-2013 à 13:38:35    

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 …

Reply

Marsh Posté le 28-06-2013 à 13:53:28    

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
Reply

Marsh Posté le 28-06-2013 à 14:02:57    

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
Reply

Marsh Posté le 28-06-2013 à 14:30:14    

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
Reply

Marsh Posté le 28-06-2013 à 18:41:50    

 
            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) !
 

Reply

Marsh Posté le 29-06-2013 à 14:43:24    

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

Reply

Marsh Posté le 01-07-2013 à 09:14:39    

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

Reply

Marsh Posté le 01-07-2013 à 09:43:57    

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
Reply

Marsh Posté le 01-07-2013 à 12:33:53    

 
            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
Reply

Marsh Posté le 01-07-2013 à 12:33:53   

Reply

Marsh Posté le 01-07-2013 à 13:53:58    

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
Reply

Marsh Posté le 01-07-2013 à 14:51:14    

 
           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 …
 

Reply

Marsh Posté le 01-07-2013 à 15:23:40    

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
Reply

Marsh Posté le 01-07-2013 à 17:24:26    

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

Reply

Marsh Posté le 01-07-2013 à 19:29:17    

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

Reply

Marsh Posté le 01-07-2013 à 19:54:34    

 
           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 …
 

Reply

Marsh Posté le 02-07-2013 à 09:11:20    

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
Reply

Marsh Posté le 02-07-2013 à 11:59:41    

 
           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
Reply

Marsh Posté le 02-07-2013 à 12:24:05    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed