Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Filtre automatique et VBA

B

BUFFENOIR

Guest
Bonjour,
Je cherche de l'aide ,

J'execute une macro effectuant un filtre automatique sur un workbook ;
1° Je souhaiterai récupérer le n° de la ligne, résultat du filtre.
2° Si pas de ligne résultat, que cette fonction me renvoie un code "LIGNE NOTOK" par exemple.

Merci bcp

D.B
 
@

@+Thierry

Guest
Salut Buffenoir,

Voici un exemple tiré directement d'une démo que je viens de poster !

Sub Test
Dim r as Range

If Worksheets("Sheet1").AutoFilterMode Then
Worksheets("Sheet1").AutoFilterMode = False
Worksheets("Sheet1").Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
Else
Worksheets("Sheet1").Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
End If

Set r = Sheets("Sheet1").Range("A2:" & Sheets("Sheet1").Range("A65536").End(xlUp).Address)
Set r = r.SpecialCells(xlCellTypeVisible)
Dim msg As String
msg = "AutoFilter valeur retournée sur ligne(s)" & vbCrLf
If r.Count = 1 Then 'Considération du "Heading"
MsgBox "LIGNE NOT OK"
Exit Sub
End If
For Each Cell In r
If Cell.Row > 1 Then
msg = msg & Cell.Row & vbCrLf
End If

Attention ici je pars du principe que tu peux avoir plusieurs enregistrements (lignes) retournés par l'AutoFilter.... (si il y en a qu'un çà marchera aussi)

Bon Aprèm
@+Thierry
 
Dernière modification par un modérateur:
@

@+Thierry

Guest
Oups un peu rapide le copié collé !!


Sub Test ()
Dim r as Range
Dim msg As String

If Worksheets("Sheet1").AutoFilterMode Then
Worksheets("Sheet1").AutoFilterMode = False
Worksheets("Sheet1").Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
Else
Worksheets("Sheet1").Range("A1").AutoFilter Field:=3, Criteria1:="OUI"
End If
Set r = Sheets("Sheet1").Range("A2:" & Sheets("Sheet1").Range("A65536").End(xlUp).Address)
Set r = r.SpecialCells(xlCellTypeVisible)
If r.Count = 1 Then 'Considération du "Heading"
MsgBox "LIGNE NOT OK"
Exit Sub
End If
msg = "AutoFilter valeur retournée sur ligne(s)" & vbCrLf
For Each Cell In r
If Cell.Row > 1 Then
msg = msg & Cell.Row & vbCrLf
End If
MsgBox msg, vbInformation, "Ligne(s) Matching "
End Sub

Sorry !
@+Thierry
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…