Macro différences entre 2 feuilles

Bonjour à tous,

Débutant en macro, je suis confronté à un problème qui dépasse mes capacités de compréhension. Je joins un fichier en exemple.

Le problème est le suivant:

Je suis fin mai 2014 et cherche à comparer les données des mois d'avril 2014 et mai 2014.

J'aimerais créer une macro qui me permette de dire quels sont les produits qui ont "disparu" d'un mois à l'autre et qui ne sont pas dûs à l'obsolescence (si un produit disparait alors que dans la colonne "fin" la date est XX/05/2014, tout est normal). J'aimerais donc que la macro copie toutes les disparitions anormales (pas dûes à l'obsolescence) et les colle dans la feuille "disparus".

Je pensais à une macro qui fonctionnerait comme ca:

  • Pour savoir dans mai 2014 quelles lignes ont disparu, et pour les comparer à avril 2014, je me base sur deux critères : "n° contrat" et "début" (puisque certains n° de contrats sont identiques, le fait de rajouter le critère "début" nous assure d'avoir un produit unique).
  • Faire tout cela si la date de fin n'est pas comprise entre 01/05/2014 et 31/05/2014

En gros, comparer avril et mai et mettre dans "disparus" les produits qui ne finissent pas en mai.

Merci d'avance pour votre aide,

Cordialement.

Bonjour et bienvenue sur le forum

Un essai à tester, si j'ai bien compris.

Te convient-il ?

Bye !

Bonjour,

Merci beaucoup pour ta réponse rapide.

Le résultat obtenu ne correspond pas à ce que je recherche. J'ai dû mal m'exprimer, le problème est compliqué à décrire.

Tu trouveras ci-joint un fichier ou j'ai comparé manuellement les mois d'avril et de mai:

  • En vert, les produits que l'on retrouve dans les deux mois (ils n'ont pas disparus).
  • En orange, les produits qui sont arrivés à échéance (ils ont disparus, mais c'est normal puisque la colonne "fin" nous indique qu'ils étaient sensés disparaître en mai, donc à ne pas mettre dans la feuille "disparus")
  • En jaune, les produits qui ont disparus anormalement (ils ne sont plus présents dans la feuille "mai" alors que leur date d'échéance est APRES mai 2014 (en l'occurence 2017, 2018 et 2020). Ce sont ces 5 lignes que j'aimerais voir apparaître dans la feuille "disparus".)
  • En bleu, les produits apparus en mai (ceux-là, on les ignore).

Merci encore pour ton aide, en espérant avoir été plus clair,

Cordialement

edit: j'ai oublié de te préciser que dans mon fichier réel, les lignes de mai et avril sont complètement dans le désordre, histoire de bien compliquer la chose. Faudrait donc que la macro prenne la ligne 1 d'avril, recherche une ligne identique dans les 10 000 lignes de mai, et si elle n'y est pas, la copier dans "disparus" à condition que la date de fin n'est pas égale à mai. Ensuite prendre la ligne 2 et faire de même, ligne 3, ligne 4 ...

Bonjour

OK, j’ai corrigé.

Mais pour obtenir ton résultat, j’ai dû ajouter un critère de comparaison.

Tu as écris :

Pour savoir dans mai 2014 quelles lignes ont disparu, et pour les comparer à avril 2014, je me base sur deux critères : "n° contrat" et "début" (puisque certains n° de contrats sont identiques, le fait de rajouter le critère "début" nous assure d'avoir un produit unique).

Il faut aussi que les produits soient les mêmes, sinon, dans ton exemple, la ligne 18 de Avril correspond à la ligne 13 de mai et n’a donc pas disparu.

OK ?

Bye !

Bonjour,

Oui tu as raison pour le critère "produit", merci !

J'ai fait le malin en pensant que je pourrais adapter la macro par moi-même à mon fichier original, mais me voilà coincé, puisque même après longue réflexion et étude de la macro j'ai du mal à comprendre comment tu as procédé.

Dans mon fichier, les feuilles s'appellent "M-1" (pour avril) , "M" (pour mai) et "RA" (pour Disparus).

Les colonnes A, B, C, D, E sont respectivement les colonnes B, D, E, O, P (le fichier est gros puisque j'ai 10 000 lignes et 16 colonnes).

Peux-tu m'indiquer dans ton code les lignes concernées par ces changements ?

Et si le cas échéant les dates ne sont plus avril 2014 et mai 2014, mais septembre et octobre 2016, quelle(s) ligne(s) dois-je modifier ?

Merci beaucoup d'avance pour ces réponses, j'ai plus avancé en un jour que toute la semaine précédente !

Cordialement

edit: j'ai une 4ème feuille "synthèse" dans laquelle en B2 j'ai le début d'un mois (01/05/2014) et en C2 la fin du mois (31/05/2014). Dès que je change ces dates, d'autres formules s'adaptent automatiquement. Comment faire en sorte que dès que je change les dates de ces cellules, par exemple si je met 01/09/2014 et 30/09/2014, la macro fasse la même opération pour les produits arrivant à échéance en septembre ?

Beaucoup de questions en une fois, désolé

Si tu changes le noms des feuilles qui indiquait celui des mois concernés par M et M-1, je ne puis plus savoir de quels mois il s'agit.

A moins que le mois M soit celui indiqué dans la feuille de synthèse en B2 ?

Sinon, il faudra commencer la macro par une boite de dialogue qui demandera de quel mois il s'agit.

A te relire.

Bye !

Bonjour,

Effectivement, le mois M est celui qui apparait en B2 dans la fiche de synthèse.

En fait, le but de la macro serait que chaque mois je puisse faire une analyse des variations du mois écoulé (M) par rapport au précédent (M-1), justre en chargeant les données des deux mois dans les feuilles M-1 et M.

Est-il possible de demander à la macro de chercher l'information en case B2 de la feuille synthèse pour savoir de quel mois il s'agit ?

Merci,

Cordialement

Bonjour

Nouvelle version à tester.

Contrainte : les feuilles des mois comparés doivent s'appeler "M-1" et "M"

Bye !

Bonjour,

Ca a l'air de marcher !!

Néanmoins dans votre feuille synthèse, vous avez mis en B2 la date 01/05/2015 et en C2 la date 31/04/2014, comment cela se fait ?

Sur mon fichier, les dates sont 01/05/2014 en B2 et 31/05/2014 en C2.

Merci encore!

En fait la macro de se sert que de la date qu'il y a en B2.

Bye !

Super.

Je te remercie infiniment pour ton aide !

A la prochaine !

Bonjour,

Je reviens vers toi afin de te (re)demander de l'aide sur cette macro.

Elle fonctionne sur les fichiers tests que j'ai créé, mais lorsque je la transfère sur les fichiers de 10 000 lignes, excel se fige et je dois le relancer ... Est-il possible de "couper en deux" la macro, ou alors de l'alléger ? En bref, faire en sorte qu'elle puisse également marcher sur des très gros fichiers ? Aucun soucis pour moi si cela implique de créer 2 macros et/ou étapes intermédiaires...

Merci d'avance!

Bonjour

sayes a écrit :

Est-il possible de "couper en deux" la macro

Quelle drôle de demande ! Si je coupe en deux la macro, elle ne marchera plus du tout ! C’est comme une voiture ! Tu ne peux pas la couper en deux, ni dans le sens de la longueur ni dans le sens de la largeur. Sauf pour l’amener à la casse en petits morceaux !

Tu pourrais tout au plus couper plutôt le tableau de tes données en deux et faire tourner la macro 2 fois…

Mais à mon avis ton problème ne tient pas à la taille du fichiers et à ses 10000 lignes. Le nombre de lignes ne peut jouer que sur la durée d’exécution de la macro.

Si, comme tu dis elle se fige, c’est qu’il y a autre chose qui la fait boguer. Et pour essayer de corriger un bog, il me faut pouvoir le reproduire.

Je ne vois pas d’autre solution que de me joindre ton fichier en passant par http://www.cjoint.com s’il est trop gros…

Bye !

Bonjour,

Quelle drôle de demande ! Si je coupe en deux la macro, elle ne marchera plus du tout ! C’est comme une voiture ! Tu ne peux pas la couper en deux, ni dans le sens de la longueur ni dans le sens de la largeur. Sauf pour l’amener à la casse en petits morceaux !

Ah oui, en effet, une voiture coupée en deux n'est pas d'une grande utilité ...

Le fichier si problématique:

Et juste ce petit rappel : les onglets M-1 et M changent tous les mois, donc je dois pouvoir les changer et la macro doit pouvoir fonctionner même avec ces nouvelles données (différents noms, produits, pas le même nombre de lignes)...

Merci pour ton aide!

Bonjour

En fait, la macro fonctionne, mais le travail qu'elle fait est considérable. Pour chacune des 9300 lignes de la feuill M-1, elle doit faire des tests sur chacune des 9300 autres lignes de la feuille M. Ce qui fait près de 83 millions de séries de tests.

Sans aller jusqu'au bout, j'ai estimé à entre 2 et trois heures le temps dont elle a besoin.

Comme cela me semblait beaucoup, j'ai trouvé moyen de l'optimiser en passant par des variables tableaux.

Le temps d'exécution se réduit, sur mon PC à environ 6 minutes.

Si c'est encore beaucoup, cela me semble plus acceptable.

Voici donc la nouvelle version à tester :

Bye !

Bonjour,

Tout d'abord, merci pour ta réponse. J'ai pris du temps à répondre puisque j'ai passé la semaine à faire des vérifications.

Je suis tombé sur une petite exception qui fait que tous les produits disparus ne peuvent être identifiés avec "seulement" comme éléments de recherche le numéro de contrat et le produit.

Est-il possible de juste demander à la macro de comparer également les colonnes F (ouverture) et J (montant initial) afin d'avoir la certitude que la macro n'en oublie aucun produit et ne considère pas 2 produits quasi-identiques (puisque chez certains produits numéros de contrats et nom de produit sont les mêmes) comme identiques ??

Ici le fichier sur lequel je travaille :

Comme exemple, en utilisant le filtre tu peux observer que le contrat 93001594832 contient 3 produits identiques. si l'on rajoute le critère "Ouv" (colonne F) et colonne J par sécurité, plus de risque de confondre.

Merci encore pour ton aide !

Bonjour

Pas de problème pour moi.

Mais la macro va devoir faire deux fois plus de tests.

La pauvre !

Bye !

Bonjour,

Ca marche parfaitement, merci beaucoup !!!

Je reviens vers après avoir hésite à créer un nouveau sujet (ne voulant pas abuser de ta disponibilité), mais puisque tu connais bien le cas je pense que tu es le mieux placé pour comprendre mon besoin.

Je suis à la recherche d'une macro me permettant de copier/coller des lignes en fonction d'un critère (une date) qui est dans une cellule de cette ligne.

Dans l'exemple ci-joint, on trouve dans les feuilles M-1 et M les données, avec en colonne O & P les dates. En feuille "synthèse", les dates recherchées.

La macro devrait effecter le travail suivant:

Si en M-1, P est supérieur ou égal à B2 & P est inférieur ou égal à C2 de la feuille synthèse (donc février 2015 dans ce cas), copier la ligne dans la feuille "Echéances"

Si en M, O = février 2015, copier le ligne dans "Souscriptions".

Merci d'avance !

14macrosousech.xlsx (13.84 Ko)

Bonjour

Je trouve aussi que le problème étant nouveau, il devrait faire l’objet d’un nouveau sujet.

Par ailleurs, je suis désolé mais quand tu écris :

Si en M-1, P est supérieur ou égal à B2 & P est inférieur ou égal à C2 de la feuille synthèse (donc février 2015 dans ce cas), copier la ligne dans la feuille "Echéances"

je n’y comprends rien :

• Sur la feuille M-1, je ne trouve de ‘’P’’ nulle part. La colonne ‘’P’’ est vide et aucune colonne n’a ‘’P’’ comme titre

• Sur cette même feuille, la cellule B2 contient 3 points de suspension… est-ce bien de celle-là dont tu parles ?

• …

Essaie d’être plus précis, sinon, les réponses risquent de se faire attendre… !

Bye !

D'accord, je vais reformuler tout ça dans un nouveau sujet.

Merci !

Rechercher des sujets similaires à "macro differences entre feuilles"