macro excel qui imprime si la feuille existe uniquement

macro excel qui imprime si la feuille existe uniquement - VB/VBA/VBS - Programmation

Marsh Posté le 07-10-2012 à 20:08:06    

Bonsoir à tous,
je sollicite votre aide car j'ai tant bien que mal créé une macro répondant à mon besoin : celui d'imprimer une feuille Excel bien spécifique  ; si elle n'existe pas, rien ne doit être imprimé.
Je mets donc On Error Resume Next pour éviter de rencontrer l'erreur. Le problème est que cette petite ligne provoque l'impression de la feuille active lors de l'ouverture du classeur !!!
Pouvez-vous m'aider svp ?
Merci d'avance, et bonne soirée
 
 
 
Sub Macro2()
'
Dim wb As Workbook, wb2 As Workbook
Dim sPath As String, sFilename As String
Dim NbRows As Integer, rg As Range
 
Application.ScreenUpdating = False
 
sPath = Range("B10" ).Value       'Répertoire souhaité saisi dans la cellule b10
sFilename = Dir(sPath & "*.xls*" )        'ouvre tous les fichiers .xls*
 
Do While Len(sFilename) > 0
    Set wb2 = Workbooks.Open(sPath & sFilename)           'Ouvre le fichier
     
   On Error Resume Next
       
   Sheets("Compte 2014" ).Select
     
    ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
    ActiveWindow.Close
    sFilename = Dir
         
Loop
Application.ScreenUpdating = True
 
End Sub

Reply

Marsh Posté le 07-10-2012 à 20:08:06   

Reply

Marsh Posté le 08-10-2012 à 07:34:25    

Bonjour,
tu peux parcourir les onglets pour trouver celui que tu cherches.
S'il existe, tu l'imprime, sinon, tu passes.
 

Code :
  1. Sub Macro2()
  2. '
  3. Dim wb As Workbook, wb2 As Workbook
  4. Dim sPath As String, sFilename As String
  5. Dim NbRows As Integer, rg As Range
  6. dim Ws as worksheet
  7. Application.ScreenUpdating = False
  8. sPath = Range("B10" ).Value       'Répertoire souhaité saisi dans la cellule b10
  9. sFilename = Dir(sPath & "*.xls*" )        'ouvre tous les fichiers .xls*
  10. Do While Len(sFilename) > 0
  11.     Set wb2 = Workbooks.Open(sPath & sFilename)           'Ouvre le fichier
  12.    
  13.    On Error Resume Next
  14.    for each Ws in w2.sheets   
  15.        if Ws.name = "Compte 2014" then 
  16.               Sheets("Compte 2014" ).Select
  17.               ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
  18.        end if
  19.    next Ws
  20.     ActiveWindow.Close
  21.     sFilename = Dir
  22.        
  23. Loop
  24. Application.ScreenUpdating = True
  25. End Sub


 
J'ai pas testé mais ça doit pas en être loin.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 08-10-2012 à 09:21:59    

Bonjour,
 
J'ai rectifié en suivant tes conseils (voir code ci-dessous), néanmoins il y a toujours une impression qui est lancée même pour les fichiers Excel qui ne contiennent pas la page demandée.
 
 
 
------------
 
Sub Macro2()
 
Dim wb As Workbook, wb2 As Workbook
Dim sPath As String, sFilename As String
Dim NbRows As Integer, rg As Range
Dim Ws As Worksheet
 
Application.ScreenUpdating = False
 
sPath = Range("B10" ).Value       'Répertoire
sFilename = Dir(sPath & "*.xls*" )        'ouvre tous les fichiers .xls*
 
Do While Len(sFilename) > 0
    Set wb2 = Workbooks.Open(sPath & sFilename)           'Ouvre le fichier
     
   On Error Resume Next
     
    For Each Ws In w2.Sheets
       If Ws.Name = "Compte Tarif Scénario 2014 S08E" Then
              Sheets("Compte Tarif Scénario 2014 S08E" ).Select
              ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
       End If
   Next Ws
 
    ActiveWindow.Close
    sFilename = Dir
         
Loop
Application.ScreenUpdating = True
 
End Sub

Reply

Marsh Posté le 08-10-2012 à 10:04:28    

Enlève le "On Error Resume Next ".
 
Je viens de voir que j'avais oublié une lettre là

Code :
  1. For Each Ws In wb2.Sheets


 
Et si tu as encore la même erreur essaye de faire tourner la macro en pas à pas pour voir à quel moment l'impression est lancée.


---------------
Bel ours Vave, je me dois de l’admettre. -Skyl"win"-  Mais toi tu es intelligent -Homerde- - Ce génie -SkylWINd- JDD S16M72 10:43:46 GMT-DTC +1
Reply

Marsh Posté le 08-10-2012 à 11:08:32    

Merci oovaveoo !!!
 
cela fonctionne uniquement en rectifiant "For Each Ws In wb2.Sheets"
 
Merci à toi !

Reply

Sujets relatifs:

Leave a Replay

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