VBA créer une boucle depuis une base de données

Bonjour à tous,

J’ai besoin de votre aide.

Je vous explique ma situation actuelle afin de comprendre le besoin d’une automatisation (MACRO ou formule excel…)

J’ai un fichier « BASE » reprenant tous les articles envoyés depuis 2016 avec les quantités envoyées (onglet BASE)

On m’envoie des fichiers excel avec une liste de références à retourner (onglet liste à retourner).

Pour chaque référence « colonne C », je dois retrouver une « ref transport » dans le fichier BASE qui couvre (ègal ou supérieur) la quantité à retourner.

En fait le but est de retrouver pour chaque quantité de produit une référence transport qui couvre la quantité à retourner.

Actuellement je fais tout manuellement, je vous explique :

Première problématique : Il peux y avoir la même ref sur plusieurs lignes (sur les deux tableaux)
Deuxième problèmatique : une référence produit peut être sur plusieurs ref transport (logique car nous avons potentiellement envoyé plusieurs fois cette reference)

Pour palier à ça je fais une « sommesi » de la quantité à retourner (colonne G) et une « sommesi » de la quantité possible à retourner (colonne H) que je compare avec un « si » (colonne I).

Pour les lignes « ok » alors je sais que ça couvre la quantité mais pour les références ou la ref transport indiqué ne couvre pas la quantité :

Il faut que j’aille dans l’onglet « BASE » rechercher manuellement (en faisant des filtres par ref…) une ref de transport qui couvre la quantité, tout ça pour chaque ref… sachant que j’ai des listes variables (entre 100 et 8000 lignes).

Je ne sais pas si c’est possible de créer une macro qui :

Sur chaque ligne ou la quantité à retourner (colonne G) est inférieur à la quantité possible à retourner (colonne H) alors ça cherche dans la « BASE » un bon de transport avec une quantité supérieur;
S’il trouve une ref transport alors il la renseigne en colonne J de l’onglet « liste à retourner » et met la cellule en vert.
S’il n’y en a pas alors il met la cellule de la référence (colonne C) en rouge et passe à la suivante jusqu’à la fin du tableau (qui est variable…)

J’espère que j’ai été clair, si vous avez besoin d’info n’hésitez pas je reste dispo.

Test VBA.xlsx (12,4 Ko)

Merci beaucoup et bonne journée à tous,

Bobby

Bonjour
Ci-après ma proposition
Onglet « Liste à retourner » cliques sur le bouton « Traitement »
En colonne « J » le résultat
Attention ne pas modifier le formalisme des tableaux (affectation des colonnes pour les 2 onglets)
Le traitement s’effectue à partir de la ligne 7 onglet « Liste à retourner » et de la ligne 2 onglet « Base »
Fais des tests et dis moi

https://cjoint.com/c/JCeisDrCFaC

Je rajoute une précision importante
Onglet Base les données doivent être triées par ordre des références en colonne A
Possibilité d’inclure cette exigence dans la macro sinon à réaliser manuellement

Hello,

Je check ça cet aprés midi ou demain maximum et je te redis.

Merci encore pour ton retur supersonic.

Bonne journée,

Bobby

Bonjour,

J’ai checké tout ça et ça marche bien, merci beaucoup.

Par contre, si c’est possible j’aimerais rajouter une amélioration…

Admettons la situation suivante :

Je peux avoir une ligne avec une quantité à retourner de 5, mais dans mon fichier « BASE » je n’ai pas de ligne égal ou supérieur, par contre j’ai 5 lignes avec une quantité à retourner de 1.

Avec cette MACRO : Il va me mettre la ligne en rouge (exemple dans le fichier ci-joint)

Est-il possible de rajouter en condition, si aucune ligne dans le fichier BASE, égal ou supérieur à la « quantité à retourner » alors la somme de plusieurs lignes est-elle égal à la « quantité à retourner » si oui noter les « ref transport » dans la colonne J si non alors mettre en rouge.

Exemple dans le fichier ci-joint.

Pour la ref 121003 (première ligne du tableau onglet"liste à retourner") j’ai 6 produits à retourner, si je suis la MACRO alors la cellule est rouge.
Mais quand je vais dans l’onglet BASE ma quantité peut être couverte en additionannt la ref cmr « 10101 » et « 43535 ».

Si vous avez besoin d’info, n’hésitez pas et encore merci pour votre aide.

Bonne journée,

Bobby

JCeisDrCFaC_Test-VBA.xlsm (22,8 Ko)

Ci-joint ton dernier fichier adapté
Seule contrainte mon code fais la somme ref cmr par ref cmr dans l’ordre où il se trouve onglet Base et l’arrête lorsque la quantité est obtenue ou dépassée
En conséquence pour le cas cité les 3 ref cmr sont retournés car la somme des 2 premiers est insuffisante
Pas simple d’aller considérer la somme du premier et du dernier
De plus il peut se présenter des situations avec plus de ref cmr à étudier avec toutes les combinaisons possibles par somme de 2 de 3 de 4 etc…
Ce serait ingérable
Donc seule solution viable la somme des ref cmr les uns après les autres avec un arrêt dés que la quantité est atteinte
Donc dans ton exemple je ramène les 3 ref cmr
A voir éventuellement de les ordonner par quantité mais cela ne résoudra pas toutes les possibilités de combinaisons
A tester donc

https://cjoint.com/c/JCesb6DPj3C

Bonjour,

Yes, je viens de comprendre la problèmatique… je vais inclure le fait de filtrer du plus petit au plus grand la « BASE » avant de commencer la macro et ce sera parfait.

Merci encore pour votre aide précieuse, ça marche nickel!!!

Je vais avoir une autre macro à faire je pense ce weekend ou demain si j’ai le temps de poster et de créer un fichier pour les test, j’espère que tu pourras aussi m’aider!

Bonne journée et à bientôt.

Bobby

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.