Supprimer les lignes dont les montants s'annulent sous conditions

Bonjour,

J'aurais besoin d'aide à propos d'une manip que je souhaite effectuer sur un fichier au travail.

Je suis novice en matière de macro/vba, j'ai consulté plusieurs tchats à ce sujet mais je ne parviens toujours pas à solutionner mon problème.

Pour m'expliquer, je souhaite supprimer des lignes ou leur montant s'annule (par exemple : +500/-500) et cela, sous deux conditions, si les deux transactions ont été passées au cours du même mois (ex : Avril) et si les deux transactions sont imputées au même service financier (Ex: 2500).

En résumé, je voudrais supprimer les lignes ou les valeurs de la colonne M s'annulent entre elles, si et seulement si elles disposent de la même valeur dans la colonne B et qu'elles ont été passées le même mois, colonne F. J'ai joint un fichier afin que ça puisse peut être vous aiguiller...

Le but est de nettoyer un fichier ou figurent des milliers de lignes et ou ce type de lignes polluent l'analyse.

A savoir également, je ne sais pas si ça change quelque chose, je travaille avec Excel en Anglais au travail.

Merci par avance pour votre aide, qui je suis sure me sera précieuse !!!

18pb-macro.xlsx (8.93 Ko)

Bonjour et bienvenue sur le forum,

Il y a quelque chose d'aléatoire.

Si les dates sont différentes on supprime quand même?

Cdt

Bonjour, merci pour votre retour,

les dates peuvent être différentes mais ce qui importe c'est qu'elles soient bien du même mois, c'est à dire que si une transaction de +500 est passé le 1/1/2020 et une seconde de -500 est passée le 1/2/2020, on ne peut pas les supprimer bien qu'elles s'annulent car elles ne figurent pas sur le meme mois...

J'espère avoir été plus claire..

re,

ok, je regarde si j'y arrive

A tester sur des exemples avant de lancer la procédure sur les fichiers réels.

Appuyer sur le bouton GO colonne A

Cdt

116v1-pb-macro.xlsm (19.43 Ko)

Merci c'est exactement ce que je recherchais. Lorsque je rajoute des transactions manuellement ça fonctionne parfaitement, toutefois si je commence à incorporer des éléments du fichier initial en copier/coller, la macro ne fonctionne pas pour les éléments collés. (Cf fichier joint)

J'ai aussi essayer de l'appliquer directement au fichier initial, j'ai également un message d'erreur qui aparait avec pour message d'erreur que la variable n'est pas définie avec l'élément "u=" de surligner... Je ne sais pas vraiment ce que cela signifie, si vous pouviez m'éclairer vous me seriez d'une grande aide !

Cordialement

pbmacro
23v1-pb-macro-1.xlsm (18.47 Ko)

Ajoute en tête de procédure juste en dessous de Sub SuppLigne()

Dim u

Tu dois avoir un option explicit en tête du module.

Il faut donc que toutes les variables soient déclarées.

Cdt

En fait a et j ne sont pas déclarées non plus.

Voici le code entier à intégrer à ton fichier.

Attention par ailleurs à adapter les noms de feuilles

Sub SppLigne()
Dim u
Dim DerL%, i%, a%, j%, Lig(), Compt%, T
Dim f As Worksheet
Set f = Sheets("Feuil1")
DerL = f.Range("B" & Rows.Count).End(xlUp).Row
T = f.Range("A2:M" & DerL)
u = f.Range("A2:M" & DerL)
For a = UBound(u) To 1 Step -1
   For i = UBound(T) To 1 Step -1
      If u(a, 2) = T(i, 2) And u(a, 13) = Abs(T(i, 13)) And Format(u(a, 6), "mm") = Format(T(i, 6), "mm") Then
         Compt = Compt + 1
         ReDim Preserve Lig(1 To Compt)
         Lig(Compt) = i + 1
      End If
   Next i
   If Compt = 2 Then
      For j = 1 To UBound(Lig)
         Rows(Lig(j)).Delete
      Next j
   End If
   Compt = 0
   Erase Lig
Next a

End Sub

Cdt

15v1-pb-macro.xlsm (18.71 Ko)

Rebonjour,

J'ai essayé le code sur le fichier initial, en ajoutant la variable u ça a fonctionné. J'ai ajouté deux autres conditions auxquelles doivent répondre les lignes : même valeur en colonne A et D.

Toutefois un problème persiste, c'est pourquoi je reviens vers vous car je n'arrive pas à l'identifier. La macro fonctionne, la suppression des lignes qui s'annulent s'opère bien toutefois des lignes se trouvent supprimées bien qu'elles ne répondent pas au conditions...

Je vous ai joins mon fichier initial en ayant modifié quelque peu les données afin d'imager. La somme de l'ensemble de mes lignes est égale à 89 633,35 et après avoir lancée la macro la somme n'est plus que de 32 188,09 ce qui n'est pas correcte car la somme devrait rester la même en ayant supprimé uniquement les lignes qui s'annulent...

Si c'est pas trop demander, j'espère que vous pourrez une dernière fois m'aider ^^

20essai-macro-v2.xlsm (16.72 Ko)

Rebonjour,

J'ai essayé le code sur le fichier initial, en ajoutant la variable u ça a fonctionné. J'ai ajouté deux autres conditions auxquelles doivent répondre les lignes : même valeur en colonne A et D.

Toutefois un problème persiste, c'est pourquoi je reviens vers vous car je n'arrive pas à l'identifier. La macro fonctionne, la suppression des lignes qui s'annulent s'opère bien toutefois des lignes se trouvent supprimées bien qu'elles ne répondent pas au conditions...

Je vous ai joins mon fichier initial en ayant modifié quelque peu les données afin d'imager. La somme de l'ensemble de mes lignes est égale à 89 633,35 et après avoir lancée la macro la somme n'est plus que de 32 188,09 ce qui n'est pas correcte car la somme devrait rester la même en ayant supprimé uniquement les lignes qui s'annulent...

Si c'est pas trop demander, j'espère que vous pourrez une dernière fois m'aider ^^

Re,

Pas le temps ce soir mais je regarde demain.

Cdt

re,

Le test n'était pas complet. La valeur absolue d'une valeur positive reste positive.

J'ai donc travaillé avec inverse.

Par ailleurs, les lignes ne sont pas forcément consécutives. J'ai donc changé de stratégie. Je marque les lignes afin de les repérer.

Dans notre cas en jaune. Ca m'a permis de supprimer une boucle.

Enfin j'ai ajouté une boucle repérant les lignes marquées pour les supprimer.

Attention le test se fait sur la colonne 4. Si tu le veux sur la colonne 2, je te laisse faire la modification.

Avant de lancer la macro, regarde si les lignes jaunes sont bien à supprimer. Si tout est bon alors "GO"

Si tu as vraiment beaucoup de lignes, ça peut prendre quelques secondes.

Bon tests

Cdt

51essai-macro-v3.xlsm (25.32 Ko)

Bonjour à tous,

par formule avec 2 colonnes supp :

en N2 :

=ANNEE(F2)&MOIS(F2)&M2

en M2 :

=EST.PAIR(NB.SI(N:N;N2))

Filtrer sur les VRAI et supprimer les lignes.

J'ai fait ce choix en M2 car si tu en as 3, 5 etc, tu as sans aucun doute un choix à faire sur laquelle garder.

Tu peux les afficher avec =NB.SI(N:N;N2)>1 et trier sur la clé pour les regrouper

eric

27essai-macro-v2.xlsm (18.68 Ko)
Rechercher des sujets similaires à "supprimer lignes montants annulent conditions"