[resolu] Copie de feuilles ...

Copie de feuilles ... [resolu] - VB/VBA/VBS - Programmation

Marsh Posté le 22-11-2005 à 15:44:19    

Bonjour,
 
J'ai un double soucis...
 
J'ai une macro Excel "magique" qui copie des feuilles d'un fichier vers d'autres fichiers (environ 700/800 copies). Cette macro fonctionne pas trop mal mais semble planter lamentablement apres 80/90 copies...
 
Ma première question est : comment faire pour eviter que Excel affiche a chaque ouverture du fichier destination le-dit fichier Excel faisant apparaitre puis disparaitre un element dans la barre des taches de Windows
 
Ma seconde question est : comment savoir simplement ou a planter la macro (je cherche pour l'instant une solution simple)
 
Le code : (les corrections peuvent etre utiles si des gourous du vb/vba passent...)
 

Code :
  1. Sub GenerateExcelFile()
  2.     ' Repertoire courant
  3.     Const CurrentDir As String = "C:\Projets\excel\"
  4.     ' Repertoire d'export des fichiers Excel a générer
  5.     Const ExcelExportDir As String = CurrentDir & "xls_built\"
  6.     ' Nom de la feuille "rappel" du contenu des fichier Excel générés
  7.     Const ContentSheet As String = "content"
  8.    
  9.     ' Compteurs de boucle
  10.     Dim l, c, i, n As Integer
  11.     ' Nom du fichier Excel en cours de traitement
  12.     Dim workFileName As String
  13.     ' Nom du modele a reprendre pour la feuille Excel a générer
  14.     Dim ModelSheetName As String
  15.     ' WorkBook de travail pour les modeles de feuille
  16.     Dim ModelWorkBook As Object
  17.     ' Classe des equipements a traiter
  18.     Dim EquipementClassCell()
  19.    
  20.     ' Initialisation des zones de classes d'equipement
  21.     EquipementClassCell = Array(8, 9)
  22.     ' Traitements non interactif
  23.     Application.ScreenUpdating = False
  24.     Application.DisplayAlerts = False
  25.    
  26.     ' Recuperation du WorkBook courant
  27.     Set ModelWorkBook = ActiveWorkBook
  28.    
  29.     ' Boucle sur tous les equipements de la feuille "Tempo"
  30.     'l = 750
  31.     'Do While l < 770
  32.     'n = 1
  33.     'Do While ModelWorkBook.Worksheets("Tempo" ).Cells(n, 1) <> ""
  34.     '    n = n + 1
  35.     'Loop
  36.     'l = 1
  37.     l = ModelWorkBook.Worksheets("Application" ).Cells(10, 5).Value
  38.     n = ModelWorkBook.Worksheets("Application" ).Cells(10, 6).Value
  39.     Do While l <= n
  40.         For x = LBound(EquipementClassCell) To UBound(EquipementClassCell)
  41.             c = EquipementClassCell(x)
  42.        
  43.             ' Recuperation du nom du modele
  44.             ModelSheetName = ModelWorkBook.Worksheets("Tempo" ).Cells(l, c)
  45.            
  46.             ' Si la classe d'equipement est defini
  47.             If ModelSheetName <> "" Then
  48.                
  49.                 ' Construction du nom du fichier Excel a générer ou a ouvrir
  50.                 workFileName = ExcelExportDir & ModelSheetName & ".xls"
  51.                 If Dir(workFileName) = "" Then
  52.                     Dim MonExcel As Object
  53.                     Set MonExcel = New Excel.Application
  54.                     MonExcel.Workbooks.Add
  55.                     i = 3
  56.                     Do While i > 1
  57.                         MonExcel.ActiveWorkBook.Worksheets(i).Delete
  58.                         i = i - 1
  59.                     Loop
  60.                    
  61.                     MonExcel.ActiveWorkBook.Worksheets(1).Name = ContentSheet
  62.                     'Range("F5:I5" ).Select
  63.                     'MonExcel.ActiveWorkBook.Worksheets(1).Selection.Font.Bold = True
  64.                     MonExcel.ActiveWorkBook.Worksheets(1).Cells(1, 1).Value = "Numéro de feuille"
  65.                     MonExcel.ActiveWorkBook.Worksheets(1).Cells(1, 2).Value = "CODE_TOTO"
  66.                     MonExcel.ActiveWorkBook.Worksheets(1).Cells(1, 3).Value = "REP_TOTO"
  67.                     MonExcel.ActiveWorkBook.Worksheets(1).Cells(1, 4).Value = "Description"
  68.                     MonExcel.ActiveWorkBook.Worksheets(1).Range("A1:E1" ).Font.Bold = True
  69.                     MonExcel.ActiveWorkBook.SaveAs workFileName
  70.                     MonExcel.ActiveWorkBook.Close
  71.                 End If
  72.                
  73.                 Set Dest = Workbooks.Open(workFileName)
  74.                
  75.                 ModelWorkBook.Worksheets(ModelSheetName).Copy After:=Dest.Worksheets(Dest.Worksheets.Count)
  76.                 Dest.Worksheets(ContentSheet).Cells(Dest.Worksheets.Count, 1).Value = Format(Dest.Worksheets.Count - 1, "000" )
  77.                 Dest.Worksheets(ContentSheet).Cells(Dest.Worksheets.Count, 2).Value = ModelWorkBook.Worksheets("Tempo" ).Cells(l, 1)
  78.                 Dest.Worksheets(ContentSheet).Cells(Dest.Worksheets.Count, 3).Value = ModelWorkBook.Worksheets("Tempo" ).Cells(l, 4)
  79.                 Dest.Worksheets(ContentSheet).Cells(Dest.Worksheets.Count, 4).Value = ModelWorkBook.Worksheets("Tempo" ).Cells(l, 3)
  80.                 Dest.Worksheets(ContentSheet).Columns("A:E" ).AutoFit
  81.                 'Dest.Worksheets(ContentSheet).PageSetup.PrintArea = "$A:$E"
  82.                 'Dest.Worksheets(ContentSheet).PageSetup.FitToPagesWide = 1
  83.                 'Dest.Worksheets(ContentSheet).PageSetup.FitToPagesTall = 1
  84.                 Dest.Worksheets(Dest.Worksheets.Count).Name = Format(Dest.Worksheets.Count - 1, "000" )
  85.                 Dest.Worksheets(Dest.Worksheets.Count).Cells(3, 2).Value = ModelWorkBook.Worksheets("Tempo" ).Cells(l, 1)
  86.                 Dest.Worksheets(Dest.Worksheets.Count).Cells(4, 2).Value = ModelWorkBook.Worksheets("Tempo" ).Cells(l, 4) & " - " & ModelWorkBook.Worksheets("Tempo" ).Cells(l, 3)
  87.                 Dest.Save
  88.                 Dest.Close
  89.             End If
  90.         Next x
  91.         l = l + 1
  92.         Call UpdateProgress(l / n)
  93.     Loop
  94.     Unload FrmProgression
  95.     MsgBox "Génération terminée"
  96.     End Sub


Message édité par senternal le 25-11-2005 à 08:51:51
Reply

Marsh Posté le 22-11-2005 à 15:44:19   

Reply

Marsh Posté le 23-11-2005 à 20:11:21    

Slaut,  
 
Pour ta 2eme question, tu peux utiliser le pas à pas détailler en appuyant sur F8. Mais si ta macro plante, le débogueur devrait normalement t' indiquer l aligne ou se situe l' erreur...
 

Reply

Marsh Posté le 25-11-2005 à 08:51:32    

PGreg a écrit :

Slaut,  
 
Pour ta 2eme question, tu peux utiliser le pas à pas détailler en appuyant sur F8. Mais si ta macro plante, le débogueur devrait normalement t' indiquer l aligne ou se situe l' erreur...


 
Merci pour la réponse mais je viens de modifier et simplifier la macro. Pour le debug, j'ai rapidement abandonné vu le temps que ca prenait...
 

Reply

Sujets relatifs:

Leave a Replay

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