Présence valeur et suppression ligne

Résolu
Didier -  
 Didier -
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

4 réponses

  1. fabien25000 Messages postés 697 Statut Membre 59
     
    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
    1. Didier
       
      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
  2. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  3. fabien25000 Messages postés 697 Statut Membre 59
     
    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
  4. Didier
     
    Merci messieurs.
    vos 2 solutions fonctionnent parfaitement
    je les garde précieusement.
    Bravo à vous
    0