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 ?
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
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
Merci beaucoup ça fonctionne !!