Supprimer les rangées qui n'ont pas la même année

Salut,

Je suis actuellement confronté à un problème et je ne sais pas comment le résoudre. J'ai deux feuilles ("Client" et "Fournisseur") dans le même classeur ("Analyse"). Les deux feuilles ont une colonne avec des dates pour chaque ligne (colonne H pour le client et colonne C pour le fournisseur). Le problème est que les deux feuilles ne commencent pas toujours à la même date. Les données du client peuvent commencer par exemple en 2015 et celles du fournisseur en 2016. J'ai trié les dates des deux colonnes de l'ancienne à la nouvelle mais maintenant je dois comparer la première date dans les deux feuilles et regarder laquelle a la date la plus ancienne. Le problème est que si l'année des dates n'est pas la même (2015 ≠ 2016) alors je dois supprimer, dans la feuille avec la date la plus ancienne, toutes les lignes de, dans cet exemple, 2015 et m'arrêter à la première ligne de 2016. Ainsi, les deux feuilles ont maintenant des données qui commencent en 2016.
Dans l'exemple, les lignes rouges dans la feuille "client" doivent disparaître car elles ont des dates de 2015 et le fournisseur commence en 2016. Le jour et le mois ne sont pas d'importance. Les années doivent être de même. Donc à la première rangée de 2016, peu importe le mois, je dois arrêter de supprimer.
Je ne sais pas comment faire car les années ne seront pas les mêmes à chaque fois (dans un autre ficier ça pourrait être 2016 et 2017) et parfois la date dans la feuille "client" sera la plus ancienne et parfois la date dans la feuille "fournisseur". Quelqu'un peut-il m'aider à résoudre ce problème ?

15analyse.xlsx (21.83 Ko)

Bonjour Marie32154, le forum,

Un essai...

Sub test()
 Dim anneeMiniClient, anneeMiniFournisseur
 Dim dateClient As Range, dateFournisseur As Range

 Application.ScreenUpdating = False 'désactive le scintillement de l'écran

           'définit la plage des dates de la feuille Client
           Set dateClient = Sheets("Client").Range("H2:H" & Sheets("Client").UsedRange.Rows.Count)
      'définit la plage des dates de la fauille Fournisseur
      Set dateFournisseur = Sheets("Fournisseur").Range("C2:C" & Sheets("Fournisseur").UsedRange.Rows.Count)
          'définit l'année mini de la plage date de la feuille Client
          anneeMiniClient = Year(Application.Min(dateClient))
     'définit l'année mini de la plage date de la feuille Fournisseur
     anneeMiniFournisseur = Year(Application.Min(dateFournisseur))

   With Sheets("Client") 'agit sur la feuille client
    For i = .UsedRange.Rows.Count To 2 Step -1 'boucle de la dernière ligne à la deuxième
     'si l'année de la colonne H est < anneeMiniFournisseur, on la supprime
     If .Cells(i, 8) <> "" And Year(.Cells(i, 8)) < anneeMiniFournisseur Then .Rows(i).Delete
    Next i 'prochaine ligne
   End With

   With Sheets("Fournisseur") 'agit sur la feuille Fournisseur
    For i = .UsedRange.Rows.Count To 2 Step -1 'boucle de la dernière ligne à la deuxième
     'si l'année de la colonne C est < anneeMiniClient, on la supprime
     If .Cells(i, 3) <> "" And Year(.Cells(i, 3)) < anneeMiniClient Then .Rows(i).Delete
    Next i 'prochaine ligne
   End With
End Sub
13analyse.xlsm (27.34 Ko)

CTRL + e pour exécuter la macro

Cordialement,

Bonjour

2207 n'est pas une version Excel mais probablement la révision de 2021 ou 365. Vérifier et mettre ton profil à jour

Une solution manuelle :

il est conseillé de travailler avec des tableaux structurés : j'ai donc mis tes deux tableaux sous cette forme, nommés respectivement Clients et Fournisseurs

J'ai ajouté dans chaque une formule qui évalue si l'année de chaque ligne est supérieure à la 1ère année de l'autre.

Tu peux ensuite filtrer les 1 et supprimer cet ensemble de lignes en quelques clics

13analyse2.xlsx (25.04 Ko)

Merci beaucoup ça fonctionne !!

Rechercher des sujets similaires à "supprimer rangees qui ont pas meme annee"