Macro - Recherche et suppression selon plusieurs critères
NoviceVBA2017
Messages postés
26
Date d'inscription
Statut
Membre
Dernière intervention
-
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
gbinforme Messages postés 14946 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Macro - Recherche et suppression selon plusieurs critères
- Forcer suppression fichier - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Suppression compte gmail - Guide
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
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.
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...
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.