Detecter le résultat d'un filtre vide
Bonjour,
je me heurte sur un petit problème de macro VBA.
Je dois filtrer mes valeurs sur la donnée "Poste pourvu ou nouvelle entrée" cependant, il est possible que selon des filtres selectionné plus haut celui ci n'existe pas.
Pour faire simple, s'il existe, je veux copier les données sur un autre onglet (ça je sais faire) s'il n'existe pas, je veux qu'il passe a la suite de la macro.
Je suis capable de lui dire de copier les valeurs, sauf que si le filtre est vide il ne comprend plus...
voici le code que j'ai actuellement :
'Filtrer
Rows("3:3").Select
Selection.AutoFilter
'Filtrer sur Poste pourvu ou nouvelle entrée
Range("A3").Select
ActiveSheet.Range(Selection, Selection.End(xlDown)).AutoFilter Field:=1, Criteria1:= _
"Poste pourvu ou nouvelle entrée"
'Si filtrer donne rien
'Copier/coller les valeurs
Range("B3").Select
Nb_ligne = Range("B3").Row
Range("C" & Nb_ligne + 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("IN").Activate
Range("P12").Select
Range(Selection, Selection.End(xlDown)).Select
Nb_ligne = Range("P12").End(xlDown).Row
Range("P" & Nb_ligne + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("IN BIS").Activate
Range("A3").Select
Nb_ligne = Range("A3").Row
Range("A" & Nb_ligne + 1).Select
Nb_ligne = Range("A3").Row
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("IN").Activate
Range("A12").Select
Range(Selection, Selection.End(xlDown)).Select
Nb_ligne = Range("B12").End(xlDown).Row
Range("B" & Nb_ligne + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A" & Nb_ligne + 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End If
J'ai essayé diverse solution trouvée sur le net mais impossible de les faire marché avec ma macro.
Dernière solution en date :
Sub Macro1() ' Sheets("IN BIS").Select Range("A3").Select A = Selection.AutoFilter(Field:=1, Criteria1:="Poste pourvu ou nouvelle entrée") If Range("A65536").End(xlUp).Row = 3 Then
End If
End Sub
Cependant lorsque je l'inclus dans ma macro il ne copie plus les lignes si elle existe...
Si quelqu'un peut m'aider svp ça serait super sympa
D'avance merci
Bonjour,
Merci de joindre un fichier à ta demande, que l'on voit la structure de tes données.
Cdlt.
Bonjour à tous,
Essayez ce bout de code (on agit sur la feuille active):
Sub test()
' Filtrer sur Poste pourvu ou nouvelle entrée
If AutoFilterMode Then Cells.AutoFilter
Range(Range("A3"), Range("A3").End(xlDown)).AutoFilter Field:=1, Criteria1:= _
"Poste pourvu ou nouvelle entrée"
' test et suite...
NbrLignes = 0
NbrLignes = ActiveSheet.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count - 1
If NbrLignes = 0 Then
'ici le code si aucune ligne
MsgBox "Aucune ligne ne répond au critère du filtre"
Else
'ici le code si le filtre affiche une ligne ou plus
MsgBox NbrLignes & " ligne(s) répond(ent) au critère du filtre"
End If
End Sub
@ Jean Eric, je met un fichier que j'ai totalement anonymisé (donnée confidentiel oblige) j'essaie donc sur l'onglet IN BIS de filtrée sur les "poste à pourvoir" s'il y en a les copiers sur l'autre onglet, sinon continuer le reste de ma macro
@ Ma poire, la ligne suivante bug dès le départ... j'avoue ne pas comprendre pourquoi et comment la corriger
Range(Range("A3"), Range("A3").End(xlDown)).AutoFilter Field:=1, Criteria1:= _
"Poste pourvu ou nouvelle entrée"
D'avance merci pour vos retours et votre réactivité à mon message
Re,
Et comment les repère-t-on "les postes à pourvoir" ?
il y a une colonne A dans l'onglet IN BIS qui precise soit :
- le numero de matricule
- le nom poste pourvu ou nouvelle entrée
- soit poste à pourvoir
Ici, je m'interesse au poste pourvu ou nouvelle entrée (My bad j'ai fait un lapsus dans le post précédent)
L'idée c'est que je veux ramener ces données si elles existe (ça ok) mais surtout ne pas avoir ma macro qui plante si il n'y a aucun poste pourvu ou nouvelle entrée
Re,
Un exemple de ce qu'on peut écrire :
- on filtre la feuille "IN BIS"
- on ajoute le résultat du filtre sur la feuille "Résultat" en fin de tableau
Le code est dans le module nommé "mod_Test". Le code est commenté (un petit peu).