Rechercher une valeur dans une plage et conditions
Bonjour,
Le sujet existe sur le forum et pourtant cela ne fonctionne pas pour ma macro. Pourriez-vous me donner un coup de main s'il vous plaît. Je souhaite rechercher une valeur dans une plage de données, si elle existe la macro fait telle action si cette valeur n'existe pas je supprime les feuillets "travail".
Ci-dessous le bout de code en bleu qui me pose souci :
'Je recherche la valeur exacte "NouveauES" dans la colonne C
Set plagerecherche = Columns("C:C").Find("NouveauES", lookat:=xlWhole)
If plagerecherche Is Nothing Then 'Si aucune valeur trouvée on supprime les feuillets travail
With Application
.DisplayAlerts = False
End With
Sheets("travail").Delete
Sheets("travail bis").Delete
Application.DisplayAlerts = True
ActiveSheet.Protect Password:="EP13", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFiltering:=True
Application.ScreenUpdating = True
MsgBox "Aucune entrées/sorties"
Else 'PAR CONTRE si on trouve des valeurs, on filtre
'Filtre "NouveauES"
ActiveSheet.Range("$A$1:$C$1" & LastLignetravailbis).AutoFilter Field:=3, Criteria1:="NouveauES"
'On les copie
ActiveSheet.Range("B2:B" & LastLignetravailbis).SpecialCells(xlVisible).Copy
'On se positionne dans le feuillet travail et on les colle
Sheets("travail").Select
ActiveSheet.Range("B2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'On compte le nombre de ligne
LastLigneNewFeuille = Sheets("travail").Range("B" & Rows.Count).End(xlUp).Row
'On applique le filtre avancé à l'aide de la feuille travail
'On sélectionne dans le feuillet eP13 tous les NNI ayant une valeur #N/A qui ont été collés dans le feuillet travail
Sheets("e P13").Select
Range("A12:AC" & LastLigne).AdvancedFilter xlFilterInPlace, CriteriaRange:=Sheets("travail").Range("A1:AC" & LastLigneNewFeuille), unique:=False
ActiveSheet.Range("A12").Select
'Permet de supprimer les feuillets sans message d'alerte
With Application
.DisplayAlerts = False
End With
'Suppression des feuillets travail et travail bis
Sheets("travail").Delete
Sheets("travail bis").Delete
'Réactive le message d'alerte
Application.DisplayAlerts = True
'Réactive le mot de passe
ActiveSheet.Protect Password:="EP13", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFiltering:=True
Application.ScreenUpdating = True
End If
Merci pour votre aide !
Ippo
Bonjour et bienvenue sur le forum,
Il est d'usage de fournir un fichier exemple avec la demande afin de faciliter le travail de ceux qui répondent.
A première vue, le code en bleu devrait fonctionner.
Est-ce que tu as les bons noms de feuilles?
Peux tu en joindre un ? Merci
Cordialement,
Bonjour,
Merci pour ton retour, j'ai anonymisé le fichier je n'avais pas pu le faire hier soir. Le but étant de faire ressortir "Pastèque" qui n'a pas de ligne "écart" renseignée.
Pour voir la macro => Sub Filtre_entrées_sorties()
Le nom des feuilles est correct.
re,
Je viens de regarder ton fichier. C'est une usine à gaz où je me perds.
Dans la feuille travail, "N#A" te permet d'identifier la ligne.
Dans la feuille EP13 le "0" en colonne E te permet d'identifier la ligne.
Tu peux éventuellement faire une nouvelle MFC pour repérer la ligne en erreur.
Pour ma part, je ne pourrais pas t'aider au-delà de ces quelques conseils.
Relance un nouveau fil, tu auras peut-être plus de chance. A moins qu'un costaud lise le message et prenne la suite.
Bonne continuation.
Cordialement,
Merci ddetp88 d'avoir jeté un coup d’œil. J'ai trouvé un moyen de contourner au lieu d'utiliser Find et qui remplace mon code en bleu. Si cela peut aider :
With Sheets("travail bis")
Set plagerecherche = .Range(.Cells(2, 3), .Cells(LastLignetravailbis, 3))
End With
If IsError(Application.Match("NouveauES", plagerecherche, 0)) Then
With Application
.DisplayAlerts = False
End With
Sheets("travail").Delete
Sheets("travail bis").Delete
Application.DisplayAlerts = True
ActiveSheet.Protect Password:="EP13", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFiltering:=True
Application.ScreenUpdating = True
MsgBox "Aucune entrées/sorties"
Else 'PAR CONTRE si on trouve des valeurs NA on filtre
'Filtre les nouveauES
ActiveSheet.Range("$A$1:$C$1" & LastLignetravailbis).AutoFilter Field:=3, Criteria1:="NouveauES"Bien penser au "End if" à la fin