[Résolu] Fusionner macros

libellule85

XLDnaute Accro
Bonjour le forum,
J'ai deux macros dans le même fichier :
- la 1ère sert à imprimer (en même temps) en pdf mes 3 onglets séparés, les 3 fichiers ainsi générés portent le nom de l'onglet plus le mois décalé plus l'année
- la 2ème imprime que les lignes écrites des 2 premiers tableaux.
ci dessous ces 3 macros

Pour imprimer en pdf :


Pour imprimer que les lignes écrites pour le 1er onglet :


Pour imprimer que les lignes écrites pour le 2ème onglet :

Ce que j'aimerais donc c'est pouvoir réunir ces macros afin d'en faire qu'une seule et qui tiendrait compte de la longueur de chaque tableau.

ci-joint fichier
D'avance merci pour votre aide
 
Dernière édition:

bof

XLDnaute Occasionnel
Re : Fusionner macros

bonjour,
Pour fusionner les 2 dernières macros ;
Code:
Sub ImprimeAuto()
Dim i As Integer
Select Case ActiveSheet.Index     'ou Name ?
Case 1: k = 418               'Ajuster le 1 selon index ou Name de la feuille
Case 2: k = 23
End Select                    'Ajuster le 2 selon index ou Name de la feuille
 Application.ScreenUpdating = False
 For i = 1 To k
     If Application.CountA(Rows(i)) = 0 Then Rows(i).Hidden = True
 Next i
 Application.ScreenUpdating = True
 ActiveSheet.PrintOut
 Application.ScreenUpdating = False
 For i = 1 To k
     If Application.CountA(Rows(i)) = 0 Then Rows(i).Hidden = False
 Next i
 Application.ScreenUpdating = True
End Sub
A+
 

Staple1600

XLDnaute Barbatruc
Re : Fusionner macros

Re

Une autre approche

Code:
Sub ImprimeAuto(feuille As String, lignes As Integer)
Dim i As Integer
 Application.ScreenUpdating = False
 With Sheets(feuille)
     For i = 1 To lignes
         If Application.CountA(.Rows(i)) = 0 Then .Rows(i).Hidden = True
     Next i
    .PrintOut
    For i = 1 To lignes
         If Application.CountA(.Rows(i)) = 0 Then .Rows(i).Hidden = False
    Next i
End With
Application.ScreenUpdating = True
End Sub
ensuite selon le besoin, tu l'utilises ainsi
Code:
sub print()
ImprimeAuto "Feuil1", 23
End Sub
et
Code:
sub print2()
 ImprimeAuto "Feuil2", 418
 End Sub

EDITION: Merci Yaloo
J'ai pourtant des lunettes
Désolé Libellule
En fait c'était un hommage déguisé à "La Disparition" de G. PEREC :eek:
 
Dernière édition:

libellule85

XLDnaute Accro
Re : Fusionner macros

Bonsoir staple1600, bof, le forum,
Je viens d'essayer vos deux codes :

@ bof : j'ai modifié votre code (certainement mal, vu mes connaissances !!) alors les 3 feuilles s'impriment en 3 pdf : la feuille (nommée Détail) de 418 lignes est réduite aux seules lignes écrites (donc impeccable) mais par contre la feuille (nommée Détail 1) de 23 lignes est imprimée avec toutes les lignes. Je vous met ci-dessous le code :


@ staple1600 : il me met une erreur "Erreur de compilation : argument non facultatif"

D'avance merci pour vos réponses
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Fusionner macros

Bonsoir


L'exemple que je donnais précédemment fonctionne.

IL faut par contre que le nom de feuille mis en paramètre soit le nom d'une feuille existante.

Dans l'exemple Feuil1 car il existait une feuille nommée Feuil1 dans mon classeur de test.
 

Staple1600

XLDnaute Barbatruc
Re : Fusionner macros

Re, bonsoir Yaloo


En guise de mea culpa

Une variante qui évite la boucle
Code:
Sub ImprimeAuto(feuille As String, lignes As Integer)
Dim i As Integer
 Application.ScreenUpdating = False
 With Sheets(feuille)
     .PageSetup.PrintArea = .Cells(1, 1).Resize(lignes, .UsedRange.Columns.Count).Address
    .PrintPreview 'mettre .PrintOut pour imprimer
End With
Application.ScreenUpdating = True
End Sub
Code:
Sub a()
ImprimeAuto "Feuil1", 23
End Sub
 

libellule85

XLDnaute Accro
Re : Fusionner macros

re,
mon problème reste le même, j'ai beau mettre le nouveau code (en mettant les bons noms des feuilles). Quand je clique sur le bouton, VBA s'ouvre sur le nom du bouton
Code:
Sub Label4_Click()
ImprimeAuto
 End Sub
et met met toujours argument non facultatif
 

bof

XLDnaute Occasionnel
Re : Fusionner macros

Bonjour,
Pas évident de comprendre le problème de prime abord. Tu parles de 2 macros en fait il y en a 3 pour 2 boutons.
Si j'ai bien compris en fait tu voudrais un seul bouton qui te fasse toutes les impressions :
Les PDF + les 2 feuilles.
Les deux macros ci-dessous font celà ( en fait la macro ImprimerTout imprime les PDF + le reste...
Coome je ne suis pas sur de ce que tu veux, j'ai conservé une structure en 2 macros pour te permettre éventuellement d'imprimer seulement les détails. Ou séparément les PDF et les Détails ( dans ce cas YAKA supprimer la dernière ligne de ImprimerTout qui appelle ImprimerDetails
Code:
Sub ImprimerTout()
Dim NbFeuilleAsInteger, mois$
annee = Year(Now)
mois = StrConv(MonthName(Month(Date)), vbProperCase)
Application.ScreenUpdating = False
On Error Resume Next
  For i = 1 To Sheets.Count
    If Sheets(i).Visible = -1 Then
    NbFeuille = NbFeuille + 1
    Sheets(i).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Philippe Compta\Fac FL\" & Sheets(i).Name & " " & Application.Proper(mois) & " " & Right(annee, 2) & ".pdf"
    End If
  Next i
Sheets(1).Select
Application.ScreenUpdating = True
MsgBox ("Les  " & NbFeuille & " documents PDF viennent d'être créés et sont disponnibles dans le répertoire C:\Philippe Compta\Fac FL  ")

ImprimeDetail 'à supprimer le cas échéant pour imprimer seulement les PDF...

End Sub

Sub ImprimerDetails()
Dim i%, k As Byte, kk%, Ws$
For k = 1 To 2
  kk = IIf(k = 1, 418, 23)
  Ws = IIf(k = 1, [Feuil1].Name, [Feuil2].Name)
  With Worksheets(Ws)
    Application.ScreenUpdating = False
    For i = 5 To kk
        If Application.CountA(.Rows(i).Cells) = 0 Then .Rows(i).Hidden = True
    Next
      Application.ScreenUpdating = True
      .PrintOut
      Application.ScreenUpdating = False
      .Rows.Hidden = False
      Application.ScreenUpdating = True
  End With
Next
End Sub

Dans le code j'ai utilisé le nom des feuilles tel qu'il apparait dans VBAProject : Feuil1, Feuil2 : C'est bien souvent plus pratique que les noms à rallonge qui figurent souvent sur les onglets.

[Nota] De toute façon, il n'y a aucun intéret à réunir ces deux macros.
A+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 174
Messages
2 085 951
Membres
103 058
dernier inscrit
florentLP