Macros définissant une zone d'impression en fonction d'un critère sur une colonne

Duality

XLDnaute Nouveau
Bonjour à tous,

Suite à divers vagabondages sur internet, je suis arrivé sur ce site qui me semble rassembler pas mal d'"aficionados" d'excel. :p J'espère que mon problème trouvera solution auprès de vous.

Alors voilà, j'ai un fichier avec deux onglets contenant chacun un tableau avec des entêtes (colonnes uniquement) identiques. Je souhaiterai mettre en place une macro qui définisse ma zone d'impression en fonction d'un critère contenu dans une des colonnes. A noter que la colonne en question ne peut contenir que deux valeurs différentes ("en cours"/"out"). Cependant, lesdites valeurs pouvant être amenées à changer, je souhaiterai pouvoir définir une zone d'impression qui ne "descende" que jusqu'à la dernière ligne "en cours".

De plus, comme dit précédemment, le fichier contenant deux onglets avec des tableaux identiques, je souhaiterai aussi pouvoir lancer (avec la même macro) une impression recto-verso avec les deux onglets/tableaux.


Je ne sais pas si cela est faisable... mais merci d'avance à ceux qui se pencheront sur mon problème. :)
 

MichD

XLDnaute Impliqué
Re : Macros définissant une zone d'impression en fonction d'un critère sur une colonn

Bonjour,

Sois précis. 2 Colonnes : Lesquels ?

Dans une des 2 colonnes, tu as des expressions mais tu veux
imprimer jusqu'à la dernière occurrence de "en cours" dans la colonne X


à défaut de précision dans ta question, j'ai supposé que tu avais 2 colonnes
et que l'expression "en cours" apparaissait seulement en colonne 2 (B:B)
En conséquence, l'impression se fait seulement sur ces 2 colonnes.

Tu copies la macro suivante dans le Thisworkbook de ton classeur.
Il se peut que la ligne de déclaration de l'événement "BeforePrint" soit
différente de celle-ci. Utilise celle qui apparaît dans la liste déroulante de
droite dans le haut de la feuille.

Pour lancer l'impression, tu cliques sur la commande "Imprimer"

VB:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim DerLig As Long
If UCase(ActiveSheet.Name) = "FEUIL1" Then  'Nom Feuille à adapter en MAJUSCULE
    With Worksheets("Feuil1")
        DerLig = .Range("B:B").Find(What:="En cours", _
                LookIn:=xlValues, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, MatchCase:=False).Row
        .PageSetup.PrintArea = .Range("B1:B" & DerLig).Address
        .PageSetup.Order = xlOverThenDown 'OU xlDownThenOver
        .PrintPreview 'à remplacer par .PrintOut après tes tests
        .PageSetup.PrintArea = ""
    End With
    Cancel = True
End If
End Sub
 

Duality

XLDnaute Nouveau
Re : Macros définissant une zone d'impression en fonction d'un critère sur une colonn

Merci pour votre réponse MichD. Je vais tester ça dans la journée et ne manquerai pas de revenir vers vous ensuite. :)

Sinon, les deux onglets contiennent chacun un tableau identique avec des colonnes allant de A à W. La zone d'impression devant être définie selon le critère ("en cours"/"out") contenu dans la colonne P de chacun des deux tableaux. Je modifierai la macro en fonction de ces critères et je reviendrai vous dire si cela fonctionnne.

En tout cas, merci.
 

Duality

XLDnaute Nouveau
Re : Macros définissant une zone d'impression en fonction d'un critère sur une colonn

Rebonjour,

Alors j'ai testé la macro en l'adaptant à mon cas mais ça ne marche pas... rien ne se passe lorsque j'imprime ou que je vais en printpreview. Suivant les informations que je vous ai donné plus tôt aujourd'hui, j'ai inséré le code suivant dans les deux feuilles ou sont situés les deux tableaux :


Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim DerLig As Long
If UCase(ActiveSheet.Name) = "OPPORTUNITES CT" Then  'Nom Feuille à adapter en MAJUSCULE
   With Worksheets("Opportunités CT")
        DerLig = .Range("P5:P1005").Find(What:="en cours", _
                LookIn:=xlValues, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, MatchCase:=False).Row
        .PageSetup.PrintArea = .Range("A1:R" & DerLig).Address
        .PageSetup.Order = xlDownThenOver 'OU xlDownThenOver
       .PrintPreview 'à remplacer par .PrintOut après tes tests
       .PageSetup.PrintArea = ""
    End With
    Cancel = True
End If
End Sub

Sachant que les deux feuilles s'appellent "Opportunités CT" et "Opportunités MT", que les occurrences ("en cours"/"out") sont situées en colonne P, que les entêtes de colonnes vont des lignes 1 à 4 (la 1ère occurrence "en cours" sera donc en ligne 5) et que je souhaite donc faire le test sur l'occurrence "en cours" pour définir la zone d'impression de la ligne 5 à 1005. Si certaines précisions sont manquantes, n'hésitez pas à me demander.

Par avance, merci pour l'aide apportée.
 

MichD

XLDnaute Impliqué
Re : Macros définissant une zone d'impression en fonction d'un critère sur une colonn

j'ai inséré le code suivant dans les deux feuilles ou sont situés les deux tableaux

Relis les commentaires que j'ai publié avec la procédure dans le premier message....

A ) Le code doit être placé dans le THISWORKBOOK du classeur et non dans les modules feuilles.

Pour Excel 2010, la procédure devrait être comme suit :
Si ta version est antérieures à Excel 2007, dans la liste déroulante de gauche dans le haut
de la page de l'éditeur de code dans le ThisWorkbook, choisis "Workbook" et dans la liste
déroulante de droite, choisis "BeforePrint". La ligne de déclaration de la procédure va être
différente de celle-ci. Le début de la macro sera légèrement différent.

'Excel 1997-2003
VB:
Private Sub ....Ligne de déclaration de la procédure()
Dim DerLig As Long, Sh As Worksheet
'Nom Feuille à adapter en MAJUSCULE

For Each Sh In ActiveWindows.Worksheets
    Cancel = False
    If UCase(Sh.Name) = "OPPORTUNITES CT" Or _
        UCase(Sh.Name) = "Opportunités MT" Then
        With Sh
            DerLig = .Range("P:P").Find(What:="en cours", _
                 LookIn:=xlValues, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlPrevious, MatchCase:=False).Row
            .PageSetup.PrintArea = .Range("A1:R" & DerLig).Address
            .PageSetup.Order = xlDownThenOver 'OU xlDownThenOver
            .PrintPreview 'à remplacer par .PrintOut après tes tests
            .PageSetup.PrintArea = ""
            Cancel = True
        End With
    End If
Next
End Sub


'Excel 2007 - 2010
VB:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim DerLig As Long, Sh As Worksheet
'Nom Feuille à adapter en MAJUSCULE
If UCase(ActiveSheet.Name) = "OPPORTUNITES CT" Or _
    UCase(ActiveSheet.Name) = "Opportunités MT" Then
    Set Sh = ActiveSheet
    With Sh
         DerLig = .Range("P:P").Find(What:="en cours", _
                 LookIn:=xlValues, _
                 SearchOrder:=xlByRows, _
                 SearchDirection:=xlPrevious, MatchCase:=False).Row
         .PageSetup.PrintArea = .Range("A1:R" & DerLig).Address
         .PageSetup.Order = xlDownThenOver 'OU xlDownThenOver
        .PrintPreview 'à remplacer par .PrintOut après tes tests
        .PageSetup.PrintArea = ""
    End With
    Cancel = True
End If
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 362
Messages
2 087 635
Membres
103 617
dernier inscrit
cisco1