Macro - Recherche et suppression selon plusieurs critères

Fermé
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 - Modifié par NoviceVBA2017 le 29/01/2017 à 20:34
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 30 janv. 2017 à 08:33
Bonjour,

Je suis face à un problème que je ne parviens pas à résoudre.

Je suis actuellement en train de créer une macro pour traiter un tableau.
Je suis face au tableau suivant (qui comporte réellement plusieurs milliers de lignes, et une quinzaine de colonnes, mais seules ces dernières colonnes nous intéressent :


Le contexte :

A chaque phase, il y a plusieurs opérations, à chaque opération, plusieurs articles, et à chaque article il y a un mouvement estimé et un mouvement réel (mouvement estimé >= mouvement réel). Il y a un nombre aléatoire d'opérations par phase, et un nombre aléatoire d'articles par opération.

Schéma :

Phase 12459873 :
- Opération 54
- Article C : mouvement estimé 40 ; mouvement réel 40
- Article ADG : mouvement estimé 10 ; mouvement réel 10
- Opération 201
- Article ZE : mouvement estimé 8 ; mouvement réel 8
- Article RTY : mouvement estimé 10 ; mouvement réel 10
- Article AZS : mouvement estimé 10 ; mouvement réel 10
- ...
- Opération 15
- Article C : mouvement estimé 100 ; mouvement réel 96

Phase 12 :
etc.

J'ai naturellement commencé par faire un tri du tableau par Phase puis par Opération afin de mettre un peu d'ordre.

Mon objectif est le suivant :
Pour chaque phase, je veux vérifier la dernière opération de chaque article (je rappel que le nombre d'opération par séquence est aléatoire, et que le nombre d'article par opération l'est également) : s'il s'agit de la dernière opération, si la quantité réelle est strictement inférieure à la quantité estimée, je la supprime.

Je pense pouvoir y arriver avec des boucles dans des boucles, mais la difficulté réside dans le fait que le nombre de phase à vérifier est inconnu (=> incrément de 1 à x), que pour chaque phase il y a un nombre d'opération inconnu (=> incrément de 1 à y), et que pour chaque opération, il y a un nombre d'article inconnu (=> incrément de 1 à z).

Cette seule opération prendrait donc un temps démentiel, et c'est la raison pour laquelle je ne cherche même pas à essayer cette méthode.

Pourriez-vous me proposer une façon d'aborder ce problème plus intelligente que la mienne?
Merci d'avance.

Bien cordialement
A voir également:

1 réponse

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
29 janv. 2017 à 22:29
Bonjour,

si la quantité réelle est strictement inférieure à la quantité estimée, je la supprime.
Si j'ai bien compris, c'est la seule raison de ton traitement ?
Dans ce cas l'opération précédente se retrouvera dans le même cas au passage suivant de la macro ?
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019
29 janv. 2017 à 22:43
Rebonjour gbinforme,

Tu es décidément sur tout les fronts!

Oui c'est effectivement la seule raison de ce traitement, mais elle est essentielle pour ce que je veux en faire par la suite.

Dans ce cas l'opération précédente se retrouvera dans le même cas au passage suivant de la macro ?
Oui, les valeurs ne varient jamais, il n'y aura qu'un seul passage de la macro.

PS: je me rend compte que j'ai oublié de préciser un point important : il peut y avoir une opération 1, puis directement une opération N sans passer par les N-x.

Merci encore gbinforme
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
29 janv. 2017 à 22:51
re
Si ton classeur est trié par phase / opération / article il te suffit de vérifier, en remontant ta liste le premier article trouvé sur une nouvelle opération.
0
NoviceVBA2017 Messages postés 26 Date d'inscription dimanche 29 janvier 2017 Statut Membre Dernière intervention 6 mai 2019 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
30 janv. 2017 à 00:00
Re,

Je ne suis pas sur de t'avoir bien compris.
Avec le tri phase / opération / article,
je peux effectivement m'affranchir de la recherche du nombre de phase en ne faisant rien tant que la phase de la ligne N+1 = phase de la ligne N
si phase de la ligne N+1 <> phase de la ligne N, c'est que la ligne N est effectivement la dernière opération de cette phase, mais rien ne me dit que la ligne N-1 n'est pas non plus la dernière opération de cette même phase mais sur un article différent...
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
30 janv. 2017 à 08:33
Bonjour,

Si tu pouvais nous mettre un exemple de structure des données, sans éléments personnels, ce serait plus facile de t'aider.
Pour communiquer ton classeur tu le télécharges sur https://www.cjoint.com/ (mode d'emploi) et tu mets ici le lien obtenu.
0