Filtre automatique vba

Le
JP
Bonjour,

Dans une macro d'impression, j'ai un soucis avec les filtres.
A la première utilisation, quand aucun filtre n'est implanté, la macro =
fonctionne.
Par la suite, elle dysfonctionne. Le filtre devrait se positionner sur une =
colonne. Elle peut différer d'une fois à l'autre.
Dans mon code (rang) indique la colonne où devrait se positionner le filt=
re.

voici le code car je ne sais pas où se produit l'erreur.

Merci d'avance pour le conseil qui va me dépanner.

JP

Sub Imprime_SGF()


With Worksheets("Strat Globale")
If .FilterMode = True Then .ShowAllData
End With

Application.ScreenUpdating = False

If UserForm1.ComboBox1 = "Toute" Then

With Sheets("Strat Globale")
.Activate
' Définition de la plage à imprimer
DerLigne = .Range("T" & Rows.Count).End(xlUp).Row
Application.EnableEvents = True
.Cells(DerLigne, 5).Select
Application.EnableEvents = False
Unload UserForm1
.PrintPreview
End With


Else

With Sheets("Strat Globale")
.Activate

rang = .Range("H5:N5").Find(what:=UserForm1.ComboBox1.Value).Co=
lumn
Range(Cells(5, rang), Cells(10, rang)).Select
Selection.AutoFilter Field:=1, Criteria1:="X"
Application.EnableEvents = True
' Définition de la plage à imprimer
DerLigne = .Range("T" & Rows.Count).End(xlUp).Row
.PageSetup.PrintArea = ("$E$2:$X" & DerLigne)
.Cells(DerLigne, 5).Select
Application.EnableEvents = False
End With

Application.PrintCommunication = True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, Igno=
rePrintAreas:=False

End If
Application.ScreenUpdating = True

Sheets("Accueil").Select
Range("B27").Select

End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26096672
Bonjour,

Essaie comme ceci :

'-------------------------------------------------------------
Sub Imprime_SGF()
Dim Trouve As Range, Rang As Long
Dim Sh As Worksheet, DerLigne As Long

Application.ScreenUpdating = False
Application.EnableEvents = False

Set Sh = Worksheets("Strat Globale")
Sh.Select

With Sh
If .FilterMode = True Then .ShowAllData
End With

If UserForm1.ComboBox1 = "Toute" Then
With Sh
.Activate
' Définition de la plage à imprimer
DerLigne = .Range("T" & .Rows.Count).End(xlUp).Row
.Cells(DerLigne, 5).Select
UserForm1.Hide
.PrintPreview
UserForm1.Show 0
End With
Else
If UserForm1.ComboBox1.Value <> "" Then
With Sh
With .Range("H5:N5")
Set Trouve = .Find(what:=UserForm1.ComboBox1.Value, _
LookIn:=xlValues, lookAt:=xlWhole)
If Not Trouve Is Nothing Then
Rang = Trouve.Column
Else
Application.EnableEvents = True
MsgBox "Valeur inexistante dans la plage."
Exit Sub
End If
End With
With .Range(Cells(5, Rang), Cells(10, Rang))
.AutoFilter Field:=1, Criteria1:="X"
DerLigne = Sh.Range("T" & Rows.Count).End(xlUp).Row
If DerLigne < 5 Then DerLigne = 5
End With

.PageSetup.PrintArea = .Range("$E$2:$X" & DerLigne).Address
.Cells(DerLigne, 5).Select
UserForm1.Hide
.PrintPreview 'tu changes pour .PrintOut après test.
UserForm1.Show 0
.Range(Cells(5, Rang), Cells(10, Rang)).AutoFilter
End With
End If
End If

With Sheets("Accueil")
.Select
.Range("B27").Select
End With
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'-------------------------------------------------------------
JP
Le #26096772
Bonsoir Denis,

Très bien, tout fonctionne.
J'ai choisi de mettre PrintPreview car il peut y avoir beaucoup de pages da ns l'hypothèse où le document n'est pas filtré.
Je verrai bien à l'usage si j'imprime directement ou si l'aperçu reste une bonne solution.

En tout cas merci beaucoup pour la modif.

JP
Publicité
Poster une réponse
Anonyme