Macro filtre bug car aucun critère

  • Initiateur de la discussion Initiateur de la discussion John38
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

John38

XLDnaute Nouveau
Bonjour,

Je suis novice en macro. Habituellement j'utilise que l'enregistreur de macro, mais là je ne peux résoudre mon problème sans le langage VBA. J'ai recherché quelques heures hier, mais sans succès.

Mon problème :
J'ai crée une macro qui filtre les données d'un tableau selon un critère d'équipement puis copie les pièces affectées sur cet équipement sur un autre tableau. Le problème est que ce mois si aucune pièces n'a été sortie sur un équipement. Quand je lance la macro, elle ne trouve pas le critère demandé (logiquement) et bug. J'aimerais rajouter une condition SI le critère n'est pas présent alors passer au deuxième critère. Je vous transmets ma ligne de code actuelle (les équipements sont 1, Video 1, 2 et 3).

Code:
Sub pieces_generales2()
'
' pieces_generales2 Macro
' Tri les pieces par equipement
'

'
    Sheets("Calculs").Select
    Range("A16:E16").Select
    Selection.AutoFilter
    Range("D16").Select
    ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="1" _
        , Operator:=xlOr, Criteria2:="=Vidéo 1"
    Range("A17:E49").Select
    Selection.Copy
    Range("I4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="2"
    Range("A17:E51").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("O4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="3"
    Range("A17:E50").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("U4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("I4:M16").Select
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("A16:E16").Select
    Selection.AutoFilter
    Sheets("Calculs").Select
End Sub

Je ne peux pas vous transmettre le fichier pour des raisons de confidentialité. Je vous remercie par avance de votre aide.
 
Re : Macro filtre bug car aucun critère

Bonjour john38,
Bienvenu au forum !
Voici une solution, tester le nombre de lignes restant après filtre.

if Application.SUBTOTAL(3,[A16:A65000])<1 Then exit sub

ceci fait que l'on quitte la macro si le nombre de ligne=0

Autre solution avec
On Error Resume next
'ligne ou l'erreur risque de se faire
if Err>0 then msgbox"Annulation":Exit sub

Bruno
 
Re : Macro filtre bug car aucun critère

Bonjour,

Oui c'est possible.

Code:
'Premier filtre
if Application.SUBTOTAL(3,[A16:A65000])<1 Then
    'ton code qui copie colle
end if

'Second filtre
if Application.SUBTOTAL(3,[A16:A65000])<1 Then
    'ton code qui copie colle
end if
...
 
Re : Macro filtre bug car aucun critère

Re,

Je pense que cela doit ressembler à ceci :

Code:
Sheets("Calculs").Select
Range("A16:E16").Select
Selection.AutoFilter
Range("D16").Select

'premier filtre
ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="1" _
        , Operator:=xlOr, Criteria2:="=Vidéo 1"

'premier test
if Application.SUBTOTAL(3,[A16:A65000])<1 Then
   'si test ok, copie colle
   Range("A17:E49").Select
   Selection.Copy
   Range("I4").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
end if

'second filtre
ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="2"

'second test
if Application.SUBTOTAL(3,[A16:A65000])<1 Then
   'si test ok, copie colle
   Range("A17:E51").Select
   Application.CutCopyMode = False
   Selection.Copy
   Range("O4").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
end if

'troisième filtre
ActiveSheet.Range("$A$16:$E$37").AutoFilter Field:=4, Criteria1:="3"

'troisième test
if Application.SUBTOTAL(3,[A16:A65000])<1 Then
   'si test ok, copie colle
   Range("A17:E50").Select
   Application.CutCopyMode = False
   Selection.Copy
   Range("U4").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

'Faire la mise en forme
    Range("I4:M16").Select
    Application.CutCopyMode = False
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("A16:E16").Select
    Selection.AutoFilter
    Sheets("Calculs").Select

A plus !
 
Re : Macro filtre bug car aucun critère

J'ai trouvé il manquait un End If en revanche la macro ne marche pas. Elle s'execute sans erreur, mais les 2 tableaux qui devraient être remplis car il y a des pièces sorties sur ces équipements ne le sont pas. Je pense que la macro voit qu'il n'y a pas de données pour le première équipement elle s'arrête au lieu d'aller chercher les autres critères.
 
Re : Macro filtre bug car aucun critère

Re,

Désolé pour l'oubli du End If
Par contre la macro ne s'arrete pas : il n'y a pas d' "Exit Sub" dans le code.
Quoi qu'il arrive les 3 filtres sont testés.

Sans fichier, c'est dur de se faire une idée de ce qu'il se passe.
Ne pouvez vous pas modifier les données pour qu'il ne soit plus confidentiel et nous faire parvenir une pièce jointe ?

A plus
 
Re : Macro filtre bug car aucun critère

Complètement...
J'ai été un peu rapide dans le copier coller des codes.

Il faut mettre >0 sur tous les tests !

Le test sert à savoir s'il y a des données (ou non) :
- la première proposition de youky était : si pas de données sortir de la macro (donc test <1)
- ce que j'ai voulu faire : s'il y a des données, exécuter le copier coller (donc >0)

Désolé pour cette erreur de ma part.

A plus

PS : Et comme quoi, il vaut mieux marcher...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
247
Réponses
10
Affichages
547
Réponses
18
Affichages
315
Réponses
2
Affichages
281
Réponses
17
Affichages
1 K
Retour