FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Enregistrer un grand nombre de sheets
 

Enregistrer un grand nombre de sheets

Il y a 270 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Enregistrer un grand nombre de sheets
 
Plus d'informations

Hey!
 
Je fais tourner une macro qui cree une copie d'une des pages excel, l'enregistre en .txt sous un repertoire definit puis la ferme .
 
Lors de la creation de cette copie le nom par defaut est Book1, Book2, Book3, ...  etc.
 
Le programme se bloque a Book101.  
 
Est on limite dans le nombre de sheets crees pendant que le programme tourne?
 
Comment donner un nom a cette copie lors de sa creation (eviter les Book1) avant qu'elle ne soit enregistree?
 
Merci beaucoup!


Message édité par adri1l le 07-08-2006 à 14:12:11

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

Comment donner un nom a cette copie lors de sa creation

Comment crées-tu cette "copie" ?
 

Plus d'informations

Simplement par:

Code :
  1. Sheets("FORM" ).Select
  2. Sheets("FORM" ).Copy


puis je l'enregistre.
 
Merci zeb.


Message édité par adri1l le 07-08-2006 à 14:12:43
zeb
Profil : Modérateur libre
Plus d'informations

(Merci d'utiliser les balises CODE, même pour deux lignes)  EDIT: :jap:  
 
Inutile :

Sheets("FORM" ).Select


Citation :

puis je l'enregistre.

Ben oui, mais donne la suite...


Message édité par zeb le 07-08-2006 à 14:51:12
Plus d'informations

Code :
  1. sub test()
  2. chemin = Sheets("BO" ).Range("chemin" )
  3. dossier = Sheets("BO" ).Cells(8, 7)
  4. nomtxt=Sheets("BO" ).Cells(9, 7)
  5. lettredossier=Sheets("BO" ).Cells(10, 7)
  6. Sheets("FORM" ).Select
  7. Sheets("FORM" ).Copy
  8. chemin = "C:\Documents and Settings\adri\My Documents\Programme\TOTO"
  9.                                                                                
  10. ChDir chemin
  11.                                                                                 ActiveWorkbook.SaveAs Filename:= _
  12. chemin & "\" & dossier & "\" & lettredossier & "\" & nomtxt, FileFormat:=xlText _
  13.                                                                                     , CreateBackup:=False
  14.                                                                                
  15. ActiveWorkbook.Close savechanges:=False
  16. Sheets("BO" ).Select
  17. ThisWorkbook.Activate
  18. end sub


 
Je viens de tester la meme chose sans la copie, c'est a dire en selectionnant la derniere sheet puis enregistrer le workbook. Au bout de 101 enregistrements le programme se bloque.
 
Comme il s'agit d'une creation de base de donnees, est ce qu'il n'y aurait pas des restrictions sur le nb d'importations d'internet?
 
Merci zeb.


Message édité par adri1l le 07-08-2006 à 15:41:44
zeb
Profil : Modérateur libre
Plus d'informations

http://site.voila.fr/zulu-echo-bravo/img/balisecodeppc.png
 
Tu as deux posts à modifier :
 
http://site.voila.fr/zulu-echo-bravo/img/newbie_oups_je_corrige.png
 
Après je m'énerve...

Plus d'informations

Oups desole,
 
Voila le code utilise:
 

Code :
  1. sub test()
  2. chemin = Sheets("BO" ).Range("chemin" )
  3. dossier = Sheets("BO" ).Cells(8, 7)
  4. nomtxt=Sheets("BO" ).Cells(9, 7)
  5. lettredossier=Sheets("BO" ).Cells(10, 7)
  6. Sheets("FORM" ).Select
  7. Sheets("FORM" ).Copy
  8. chemin = "C:\Documents and Settings\adri\My Documents\Programme\TOTO"
  9.                                                                                
  10. ChDir chemin
  11. ActiveWorkbook.SaveAs Filename:= _
  12. chemin & "\" & dossier & "\" & lettredossier & "\" & nomtxt, FileFormat:=xlText _
  13. , CreateBackup:=False
  14.                                                                                
  15. ActiveWorkbook.Close savechanges:=False
  16. Sheets("BO" ).Select
  17. ThisWorkbook.Activate
  18. end sub

 
 
Je viens de tester la meme chose sans la copie, c'est a dire en selectionnant la derniere sheet puis en enregistrant le workbook. Au bout de 101 enregistrements le programme se bloque ?!
 
Comme il s'agit d'une creation de base de donnees, est ce qu'il n'y aurait pas des restrictions sur le nb d'importations d'internet?  
 
Merci !!


Message édité par adri1l le 07-08-2006 à 15:41:31
zeb
Profil : Modérateur libre
Plus d'informations

Rho.... Ce n'est pas SaveAs mais SaveCopyAs qu'il faut utiliser  :o  
 
 
Exercice : Lire la doc concernant ces deux fonctions, analyser l'erreur du code précédent et donner ici la soluce :D

Plus d'informations

a écrit :

Rho.... Ce n'est pas SaveAs mais SaveCopyAs qu'il faut utiliser  :o  
 
 
Exercice : Lire la doc concernant ces deux fonctions, analyser l'erreur du code précédent et donner ici la soluce :D


 
Ca ne resoud pas le pb du nombre de copies (si je veux en absolument en faire une)  :pt1cable:  
 
J'ai fais un petit code test pour tester le nombre d'enregistrements que l'on peut faire:
 

Code :
  1. Sub test()
  2. Application.DisplayAlerts = False
  3. Sheets("FORM" ).Select
  4. chemin = Sheets("FORM" ).Range("chemin" )
  5. a = 1
  6. While a < 200
  7.     Sheets(2).Select
  8.     Range("A1" ) = a
  9.                                                                                  
  10.     ChDir chemin
  11.     ActiveWorkbook.SaveCopyAs chemin & "\" & a & ".txt"
  12.     Sheets("FORM" ).Select
  13. a = a + 1
  14. Wend
  15. End Sub


 
J'esperais retrouver dans les .txt que la valeur de a,
or ils sont plein de caracteres du type "ÐÏࡱá"   :sweat:  
 
Qu'est ce que je dois rajouter dans le code?
Merci ... :wahoo:

zeb
Profil : Modérateur libre
Plus d'informations

Rho.... Problème pour lire la doc ?  :sarcastic: En plus, tu l'as bien écris au début.
 
Ne recopie rien sans bien comprendre.
Pour ça et dans l'ordre :

  • Lire la documentation...
  • Réfléchir...
  • Demander de l'aide sur un forum. PPC par exemple :D

    Code :
    1. FileFormat:=xlText

Plus d'informations

tu veux dire?
 

Code :
  1. ActiveWorkbook.SaveCopyAs (chemin & "\" & a & ".txt" )


 
ca ne passe tjs pas.. :heink:  
 
g toujours les "ÐÏࡱá "   :bounce:
et  

Code :
  1. ActiveWorkbook.SaveCopyAs (chemin & "\" & "tata" & ".txt" ), _
  2. FileFormat:=xlText, CreateBackup:=False


a trop d'arguments


Message édité par adri1l le 08-08-2006 à 17:47:03
zeb
Profil : Modérateur libre
Plus d'informations

Exercice pour zeb : Relire la doc avant de demander à Adri1 de la lire :whistle:
 
Alors je te le fais gratos ;) pour la peine :
Testé et approuvé :o  
Sans garantie pour autant ;)
 
( Tout ça parce que SaveAs et SaveCopyAs ne sont pas équivalentes et parce que Sheets(..).SaveAs sauvegarde tout le classeur :pfff: Mais pourquoi utiliser VBA !!! )
 

Code :
  1. Option Explicit
  2. Sub Cado()
  3.     Dim wb    As Workbook
  4.     Dim ws    As Worksheet
  5.     Dim alert As Boolean
  6.     Dim tmp   As String
  7.    
  8.     tmp = Environ("TEMP" ) & "\CLS_TMP.XLS"
  9.    
  10.     alert = Application.DisplayAlerts
  11.     Application.DisplayAlerts = False
  12.    
  13.     ' // Ouverture du classeur à copier
  14.     Set wb = Workbooks.Open(Filename:="Classeur_a_copier.xls", ReadOnly:=True)
  15.     ' // On enregistre le classeur dans une copie temporaire
  16.     wb.SaveCopyAs tmp
  17.    
  18.     ' // On ouvre le classeur temporaire
  19.     Set wb = Workbooks.Open(tmp)
  20.    
  21.     ' // On supprime toutes les feuilles inutiles.
  22.     ' // Comme ça, on est sûr que ce sera la bonne.
  23.     For Each ws In wb.Sheets
  24.         If ws.Name <> "Feuil2" Then ws.Delete
  25.     Next
  26.    
  27.     ' // On enregistre comme CSV
  28.     ' // Le classeur temporaire existe toujours sur le disque dur
  29.     ' // mais il est remplacé par la feuille CSV dans Excel
  30.     wb.SaveAs Filename:="FEUIL2.CSV", FileFormat:=xlCSV
  31.    
  32.     ' // On ferme la feuille CSV
  33.     wb.Close
  34.    
  35.     ' // On supprime le classeur temporaire du disque dur.
  36.     Kill tmp
  37.    
  38.     Set wb = Nothing
  39.    
  40.     Application.DisplayAlerts = alert
  41. End Sub

Plus d'informations

C super ca tourne correctement. :wahoo:  
 
On est oblige de faire des copies en temp et non en .xls alors...
 
A retenir. ;)  
 
Merci beaucoup zeb !! :hello:

zeb
Profil : Modérateur libre
Plus d'informations

Euh, si, si. La copie est en XLS. Temp, c'est le dossier où est copié le fichier temporaire au format XLS. Pour t'en convaincre, exécute ce petit bout de code :

Msgbox Environ("TEMP" )


Ou alors, n'exécute pas la commande (Ligne 37)

Kill tmp


et va voir le fichier Environ("TEMP" ) & "\CLS_TMP.XLS". C'est bien un fichier Excel.
 
La transformation en texte (CSV), c'est ligne 31.
 
A méditer....

Plus d'informations

Oui c'est ce que je voulais dire, :)  
 
On est oblige de passer par une copie temp du workbook en .xls pour eviter la limitation de copies de la page,
 
de supprimer toutes les pages-1,
 
pour enfin enregistrer cette copie en format voulu...  :ange:  
 
Hier encore mon programme s'est encore bloque a 86 .txt :sweat: , va falloir que je regarde encore de plus pres, j' ai des milliers de txt a faire... Tu ne serais pas au courant d'autres restrictions?
 

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

d'autres restrictions ?


Je ne sais pas, c'est toi qui a mis le doigt sur celle-là :) !


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Enregistrer un grand nombre de sheets
 

Annonces Google
Publicité