Présence valeur et suppression ligne

Résolu/Fermé
Didier - 29 sept. 2018 à 10:14
 Didier - 29 sept. 2018 à 16:20
Bonjour,

j'ai un fichier excel comprenant une feuille 1 et une feuille 2
Sur la feuille 1 je fais mon suivi quotidien
Sur la feuille 2 j'ai mes données brutes issues d'une extraction.

Sur ma feuille1, je veux vérifier que chaque valeur de la colonne B (à partir de la ligne 3) est encore présente sur la feuille 2 en colonne AH (à partir de la ligne 2 car j'ai un entête). Si une valeur de la colonne B de la feuille 1 n'est plus en colonne AH de la feuille 2 alors je supprime la ligne de la feuille 1 correspondant à la valeur.

Le nombre de valeurs en colonne B (feuille 1) évolue
Le nombre de valeurs en colonne AH (feuille 2) évolue également

Exemple :
Si la valeur de B7 (par exemple) n'apparaît plus sur ma feuille 2 en colonne AH, ça signifie que le dossier est soldé et donc je peux supprimer la ligne 7 de ma feuille 1
et ainsi de suite

Auriez vous une solution pour moi svp ?

merci pour votre aide
Didier
A voir également:

4 réponses

fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
29 sept. 2018 à 11:25
Bonjour,
En gros : Il faut passer par la VBA, peut être avec un bouton pour déclencher l'événement

"Le nombre de valeurs en colonne B (feuille 1) évolue
Le nombre de valeurs en colonne AH (feuille 2) évolue également
"

ou quand comment par qui?

0
Bonjour
Ce que je voulais dire c'est que le nombre de lignes est une variable pour chaque feuille et pas un nombre constant.
Chaque jour des dossiers sont soldés et d'autres sont créés
0
via55 Messages postés 14405 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 25 avril 2024 2 703
29 sept. 2018 à 14:05
Bonjour Didier

Code VBA à mettre dans un module :
ALT+F11 pour ouvrir éditeur VBA - Insertion - Module - copier-coller la macro dans la page blanche et fermer l'éditeur
Sub suppression()
Application.ScreenUpdating = False ' desactive rafraichissement écran
Dim Ligne As Long
Ligne = Sheets("Feuil1").Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row 'dernière ligne remplie
For n = Ligne To 2 Step -1 'boucle sur lignes de la dernière en remontant à la 2eme
existe = Application.WorksheetFunction.CountIf(Sheets("Feuil2").Range("AH:AH"), Sheets("Feuil1").Range("B" & n)) 'NB.SI valeur en B Feuil1 dans AH Feuil2
If existe = 0 Then Rows(n & ":" & n).Select: Selection.Delete 'effacement ligne si n'existe pas en Feuil 2
Next
Application.ScreenUpdating = True ' active rafraichissement écran
End Sub


Lancer la macro ensuite depuis la feuille 1 onglet Développeur - Macros
ou insérer un bouton sur la feuille 1 et dans le code du bouton mettre le nom de la macro, comme suggère Fabien

Cdlmnt
Via
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 29 sept. 2018 à 14:53
voila un code à affecter à un bouton, un raccourci clavier ou ce qui te conviendra le mieux

Sub Bouton1_Cliquer()
    Dim I, DerLig As Long
    Dim Trouve As Range, PlageDeRecherche As Range
    Dim Valeur_Cherchee As String, AdresseTrouvee As String
    Application.ScreenUpdating = False
        
    DerLig = Worksheets("feuille 1").Range("B" & Rows.Count).End(xlUp).Row
    For I = 2 To DerLig
        If (Worksheets("feuille 1").Range("B" & I) <> "") Then
 '    affectation de valeurs aux variables :
            Valeur_Cherchee = Worksheets("feuille 1").Range("B" & I)
'        dans la première colonne de la feuille active
            Set PlageDeRecherche = Worksheets("Feuille 2").Range("AH2:AH" & DerLig)
'    méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
            Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlPart)
'    traitement de l'erreur possible : Si on ne trouve rien :
            If Trouve Is Nothing Then Rows(I).Delete shift:=xlUp
'    vidage des variables
            Set PlageDeRecherche = Nothing
            Set Trouve = Nothing
        End If
    Next I
    Application.ScreenUpdating = True
End Sub


edit : Via a été plus rapide; sa méthode étant différente je propose la mienne (que j'ai appris de cs_Le pivert si ma mémoire est bonne) pour ceux qui feraient des recherches pour un besoin similaire
0
Merci messieurs.
vos 2 solutions fonctionnent parfaitement
je les garde précieusement.
Bravo à vous
0