Macro/VBA

J'ai besoin d'aide car je sèche totalement… Au boulot je galère chaque jour avec un fichier qui me prend un temps fou, voici un exemple. Alors, il faut faut que je fasse des transfère entre différents codes (colonneA). L'idée est de faire des transferts entre les codes(colonne A) pour les références (colonne E). Par exemple,pour une même référence, de la ligne 12 à 20 (il ne faut pas prendre en compte la dernière ligne pour chaque référence), je dois prendre des quantités sur les codes où le commentaire (col Y) est "Besoin nul" et le transfèrer aux codes en rupture puis en rupture partielle sans arbitrage particulier.

Je voudrais que : plusieurs lignes se crée sur un autre feuille :

Code qui envoie Code qui reçoit Colonne E Colonne F Qté transférée

C44 C22 600000C46 b 711

C47 C22 600000C46 b 655

etc

L’idée est de pouvoir transférer le maximum de quantité pour arriver à 0 sur les lignes en négatif (<-1000) et si le code qui a un besoin arrive à 0 alors, on crée des transferts vers un autre code en négatif (<-1000).

Une fois toute les quantités utilisées en "besoin nul", je dois prendre dans les lignes "besoin couvert à 100%" pour alimenter les codes avec du besoin.

Une fois que tous les transferts possibles sont fait alors je passe à la prochaine référence etc. Chaque référence est séparée par une case blanche au niveau de la colonne bas, entre deux case blanche se trouve une référence différente (colonne E).

Pouvez vous m'aider s'il vous plait???

Merci infiniment de votre aide!!!!

Pierre

21classeur1.xlsx (155.29 Ko)

Salut et bienvenue sur le Forum,

J’ai compris que tu désirais effectuer automatiquement des transferts par blocs de références.

Prenons alors l’exemple du bloc marqué en brun dans le fichier ci-joint. Peux-tu indiquer manuellement (sur la même feuille pour l’instant, ce sera plus simple) dans les colonnes suivantes les résultats tu désirerais voir automatiser ?

A te relire.

6pamatt-v1.xlsx (154.38 Ko)

Merci

Voici le classeur avec deux exemples et un peu de détail.

Merci infiniment !!!

14pamatt-v1.xlsx (157.61 Ko)

J'espère que mes exemples se comprennent facilement, car pour moi c'est quotidien donc il est possible que cela soit mal expliqué...

Merci

Pierre-Alex

Salut Pierre-Alex,

Je crois que je commence à bien comprendre ta demande et j’ai avancé avec ton fichier. Mais comme je fais ça durant mes heures de loisir, ça me prends pas mal de temps. Surtout aussi que ton souhait n’est pas évident et que je ne suis pas si rapide.

Juste pour te montrer l’avancement – mais ce n’est qu’une ébauche, merci de ne pas m’indiquer trop de modifications pour l’instant – tu peux cliquer sur les deux boutons mis en place au-dessus de chacune de tes explications dans les colonnes AA:AE. La première répartition démarre bien mais ne va pas jusqu’au bout alors que la deuxième répartition plante pour l’instant.

Si tu peux patienter quelques jours, je pense que je vais pouvoir te présenter quelque chose d’un peu plus avancé - traitant la totalité de ton tableau - d’ici quelques jours.

Amicalement.

8pamatt-v2.xlsm (228.39 Ko)

Oulala énorme ! Même si ce n'est qu'une ébauche c'est déjà beau pour moi

Ne t'inquiète pas je patiente, je ne disais pas ça par impatience mais plus par crainte de mal expliquer mon besoin...

En tout cas, merci beaucoup !

pamatt a écrit :

.. je ne disais pas ça par impatience mais plus par crainte de mal expliquer mon besoin...

Et moi je disais ça juste pour te rassurer

Le premier problème est résolu, mais la suite va prendre un peu de temps.

5pamatt-v3.zip (174.09 Ko)

Finalement j’ai pu avancer bien mieux que ce que je pensais.

Regarde le fichier ci-joint : à chaque fois que tu cliques sur le bouton en Z1, le tableau dans les colonnes AE:AH se réactualise complètement (pour t’en convaincre, il suffit d’effacer quelques lignes qui seront immédiatement remplacées). La macro est assez longue, elle dure 10 à 20 secondes.

Je rencontre un problème au niveau de lignes qui s’inscrivent avec un montant de transfert de 0.00. En fait, si tu cliques sur ces cellules (par exemple AE193, AE195) après avoir lancé la macro, tu vois dans la barre de formules qu’il ne s’agit pas réellement de 0.00, mais de montants infimes, par exemple 0.0000683593752910383 ou 3.66210952051915E-06. Ce problème sera normalement facile à résoudre, mais ce soir, de toute façon, j’abandonne.

Par contre j’ai remarqué autre chose : Dans ton deuxième exemple, tu n’épuises pas le Code C28 à la ligne 193 et tu y laisses 30.00 (245 – 215). Ma macro par contre – qui indique deux chiffres après la virgule - utilise ce solde de 30.41 (voir la cellule AE194 après lancement du code). Est-ce bien ou est-ce une erreur ? Si c’est une erreur, je suis un peu embêté

Deuxième question : J’ai travaillé avec 2 chiffres après la virgule pour ne pas prendre le risque d’avoir des restes qui embêteraient et je me rends compte maintenant qu’il y a quand même des problèmes (avec ces 0.00). Alors, avant que je me lance dans la correction de ces arrondis, veux-tu travailler avec 0 ou 2 chiffres après la virgule ?

A te relire.

17pamatt-v4.zip (185.87 Ko)

Tout d'abord beau travail !

Pour ce qui est des chiffres après la virgule, j'en ai pas besoin, l'arrondi me va bien et ca serait même plus pratique pour moi

Ensuite, je ne sais pas si c'est possible, mais en ce qui concerne les 30.41, je n'y ai pas pensé mais il faudrait dire si après le transfert, la quantité dispo inférieure à 100 alors on envoie plus que le besoin soit au maximum le besoin + 100.

Je ne sais pas si c'est clair ma tambouille...

Merci !!!

Salut,

pamatt a écrit :

Je ne sais pas si c'est clair ma tambouille...

Non, pas trop

Admettons que la quantité disponible est de 80 et que le besoin est de 150, si on envoie comme tu l’indiques « au maximum le besoin + 100 », on devrait envoyer au maximum 250, donc 80 c’est moins que le maximum, donc on l’envoi.

..... mais c'est moins que 100

Avec cette explication, tu ne dis pas non plus ce qu’il en est des transferts à partir des comptes « 100% COUVERT PAR STOCK » ; dans de tels cas, on prend en compte le montant du compte pour calculer ce maximum de 100 ou on prend en compte le 30 % du montant du compte ?

Pour simplifier tout ça, ne serait-il pas mieux de parler de « Montant transféré » ? Ceci permettrait de mettre une limite aux transferts si le montant à transférer – quel que soit la manière de le calculer – est inférieur à 100, non ?

Une autre question immédiate : Si dans un compte « 100% COUVERT PAR STOCK » il y a par exemple un montant disponible de 10'000, donc que l’on pourrait transférer au maximum 3'000, peut-on y puiser deux montants différents, par exemple une première fois pour compléter un compte qui a besoin de 2'500 et une deuxième fois y puiser les 500 restant pour alimenter en partie un autre compte qui aurait besoin par exemple de 1'000 ?

Et la dernière question d’aujourd’hui : Quelle est l’unité de ces chiffres ? Des francs belges ? Des patates douces ? Des anions ?

En fait, si par exemple on a un besoin de 300 et que pour un site il est possible de transférer au maximum 380 alors on transfère les 380 et non les 300 comme demandé.

En fait, on fait cela uniquement si le reste à transférer possible d'un site est inférieur à 100.

Autre exemple:

Site 1 : besoin 500

Site 2 : besoin 1000

Site 3 : besoin 5000

Le site 4 a une disponibilité (besoin nul) de 6575 dm3.

Il va transférer 500 au site 1, puis 1000 au site 2 et enfin 5075 (5000 pour le besoin et les 75 restant car inférieur à 100) au site 3.

C'est bizarre mais on fonctionne comme cela...

Pour les transferts à partir des sites avec "100% couvert par stock", on prend toujours 30% de la quantité disponible à condition que ces 30% dépasse 100 dm3 sinon ça ne sert à rien puisque le minimum transférable est de 100dm3.

Oui, pour les 30% si cela représente 3000dm3, on peut faire 30 x 100 dm3 par exemple.

C'est du dm3.

Merci beaucoup !

Salut,

J’ai essayé d’avancer avec ton fichier, mais là je ne sais plus trop où j’en suis et je vais devoir te demander de tester un peu afin de voir par où on continue

Il y a déjà un problème avec ton «Libellé court» en colonne F. Comme dans tes exemples tu reportes toujours la valeur «b», je ne sais pas exactement du «b» de quelles lignes il s’agit. Regarde donc mon fichier dans lequel j’ai numéroté toutes les lignes de la colonne F et dis-moi ce qui devrait être reporté si ce que je reporte dans la colonne AD n’est pas correct.

Ensuite j’ai essayé de baser mon code sur le fait qu’on ne transfert jamais moins de 100 dm3. A toi de voir si le résultat correspond à ton attente par rapport à tes cas réels. J’ai essayé de rajouter quelques cas spéciaux en fin de liste ; à contrôler également. Si jamais tu trouves que quelque chose ne joue pas, essaie de rajouter de tels exemples afin de me démontrer ce qui est incorrect.

A te relire.

16pamatt-v5.xlsm (269.89 Ko)

Alors encore une fois joli travail !

Tout fonctionne bien !

J'ai relevé un point qui diffère de mon quotidien. En fait, on ne fait un transfère uniquement si le besoin est de 1000 ou plus, donc que la rupture ou rupture partielle est de minimum -1000 dm3. (Je suis désolé j'avais oublié de te le préciser...)

Pour le coups, si lorsque tu dois faire un transfère :

Site 1 : besoin 3500

Site 2 : dispo 3599

Alors on créé un transfère de 3599, après si le site 2 avait 3601 on transfère que 3500dm3.

Edit : j'ai oublié pour le libellé court ça va, chaque ligne est identique pour chaque code (colonne E)

Je reste à ta disposition.

Mille merci

Bonjour,

pamatt a écrit :

J'ai relevé un point qui diffère de mon quotidien.

Ca fait quelque temps que l’on échange des informations et tu viens de te rendre compte de ce problème maintenant ? Avec quel sérieux as-tu fait tes essais ?

Je t’avais demandé, si quelque chose ne jouait pas, d’inscrire des exemples directement dans le fichier Excel. Sur la base de tes deux exemples uniquement mentionnés dans le texte, je l’ai inscrit moi-même dans le fichier (fais-toi pas de soucis, c’est également gratuit ). J’ai également tenté de modifier le code sur la base de tes nouvelles explications.

Laisse-toi le temps d’effectuer tous les essais et tous contrôles nécessaires - je n’attends pas une réponse dans les minutes qui suivent - sur la base des exemples inscrits en fonds de tableau ainsi que sur la base de tes autres chiffres.

A ton entière disposition quand-même pour toute nouvelle modification ou pour toute nouvelle question.

21pamatt-v6.xlsm (247.28 Ko)

Je me permets de rebondir sur le sujet de pamatt.

J'ai un peu le même problème que lui avec des contraintes moins importantes.

J'ai des produits, des personnes et des quantités en plus ou en moins.

Je cherche à faire une macro pour que le système me dise automatiquement quelle personne doit envoyer combien de pièce à quelle autre personne.

Une personne peut envoyer à plusieurs autres personnes mais sans répartition égale.

Exemple :

A possède 50pcs

B manque de 40pcs

C manque de 20pcs

A envoie 40pcs à B puis A envoie 10pcs à C.

Plusieurs personnes peuvent également envoyer à une même personne.

En revanche, A doit recevoir en prio par rapport à B. B prioritaire sur C, etc.

Voici mon état :

Produit Personne Besoin

P1 A 35

P1 B 28

P1 C 10

P1 D -18

P1 E -45

P1 F -85

P1 G -25

P1 H -2

P1 I 23

P1 J -39

P1 K 5

P2 D 10

P2 F -50

P2 Z -1

P2 S 40

P3 T 1

P3 R -1

P3 U 2

Il peut y avoir une multitude de références.

Au final, j'aimerai que la macro me donne un résultat comme cela :

Besoin

Produit Personne qui envoie Personne qui reçoie Nb à envoyer

P1 A D 18

P1 A E 17

P1 B E 28

J'ai essayé de reprendre ce que Yvouille avait fait mais ça ne donne rien

Pourriez-vous m'aider s'il vous plait?

Merci beaucoup pour votre aide

Salut et bienvenue sur le Forum,

Ce n’est jamais facile de démarrer une nouvelle discussion sur un ancien fil ; tu aurais mieux fait d’ouvrir ta propre discussion et de faire référence à ce fil d’une autre manière (par exemple en nous en fournissant le lien).

Ceci étant dit, je trouve que c’est quand même assez difficile de s’imaginer ton fichier sur la base de tes explications, il aurait mieux valu nous fournir ton fichier en plus.

Peux-tu alors ouvrir ton propre fil, fournir ton fichier et je te promets que si personne d’autre ne te réponds, je le ferai d’ici 1 à deux jours au plus tard.

Cordialement.

Rechercher des sujets similaires à "macro vba"