Calcul VBA

Bonjour,

J'ai réalisé une formule en VBA pour calculer mes gratuités clients au bout d'un certain volume ...

Celle ci fonctionne pour un client mais j'aimerai quelle s'applique à tous mes clients listés dans le tableau de la ligne 3 à la ligne 32

mon code :

Sub Gratuite()

'Si il reste des gratuites de la livraison precedente
If [BDD!E3] > 0 Then

If [BDD!E3] >= [Clients!D3] Then 'Si plus de gratuites ou autant que la commande
[Clients!E3] = [Clients!D3]  ' On met les gratuites autant que la commande
[BDD!E3] = [BDD!E3] - [Clients!D3] 'On met a jour le compteur des gratuites restantes.

ElseIf [BDD!E3] < [Clients!D3] Then 'Si moins que la commande
[Clients!E3] = [BDD!E3]
[Clients!D3] = [Clients!D3] - [BDD!E3]
[BDD!D3] = [Clients!D3]
[BDD!E3] = 0

Else 'Si gratuites inferieure
[Clients!E3] = [BDD!E3] 'On affiche les gratuites restantes
[BDD!E3] = 0 'On met le compteur des gratuites restantes a 0

End If

'Si il ne reste pas de gratuites
Else

If [Clients!D3] + [BDD!D3] <= [BDD!N3] Then 'La commande + le compteur est inferieur ou egale au palier
[BDD!D3] = [Clients!D3] + [BDD!D3] 'on met a jour le compteur
[Clients!E3] = 0

ElseIf [Clients!D3] + [BDD!D3] > [BDD!N3] And [Clients!D3] + [BDD!D3] = [BDD!N3] + [BDD!C32] Then 'La commande + le compteur est superieure au palier et egale au palier + gratuite

[BDD!D3] = 0 'On met a jour le compteur

'On met a jour la commande
[Clients!D3] = [Clients!D3] - [BDD!C3] ' quantites facture
[Clients!E3] = [BDD!C3] ' quantite gratuite

ElseIf [Clients!D3] + [BDD!D3] > [BDD!N3] And [Clients!D3] + [BDD!D3] > [BDD!N3] + [BDD!C3] Then 'La commande + le compteur est superieure au palier et superieure au palier + gratuite

[BDD!D3] = ([Clients!D3] + [BDD!D3]) - [BDD!N3] - [BDD!C3] 'On met a jour le compteur

'On met a jour la commande
[Clients!D3] = [Clients!D3] - [BDD!C3] ' quantites facture
[Clients!E3] = [BDD!C3] ' quantite gratuite

ElseIf [Clients!D3] + [BDD!D3] > [BDD!N3] And [Clients!D3] + [BDD!D3] < [BDD!N3] + [BDD!C3] Then 'La commande + le compteur est superieur au palier et et inferieur au palier + gratuite

[Clients!E3] = ([Clients!D3] + [BDD!D3]) - [BDD!N3] ' quantite gratuite
[Clients!D3] = [Clients!D3] - [Clients!E3]
[BDD!D3] = 0
[BDD!E172] = [BDD!C172] - [Clients!E3]

End If
End If
End Sub

Merci pour votre aide

Bonjour,

Ton code fonctionne, c'est déjà pas mal, malheureusement, il ne fonctionne pas très bien, je m'explique, je n'ai pas regardé dans le détail toutes les opérations que tu fais, mais je vois qu'à chaque fois tu fais appel à une cellule dont tu donnes la référence, et ça, sur un gros fichier, ça donne toujours des temps d'éxécution très longs...

La solution, c'est de passer par des tableaux VBA, ça règlera aussi ton souci pour traiter toutes tes lignes, mais modifier tout ton programme comme ça, hmmm, pas trop envie, ce n'est pas que je n'ai pas envie d'aider, mais il me manque des infos, il faudrait que je sache quelles colonnes tu utilises, par feuille, sinon je vais mettre du temps à chercher dans ton code parmis tout tes range et je n'ai pas trop envie vu le pavé...

Fournis moi ce genre d'informations et je pourrai t'aider un peu

MERCI

Bonjour Ausecour et merci de ta réponse

JE te renvoie le fichier test avec quelques explication dedans afin que tu comprenne mieux

Merci pour ton aide

PS : desolé pour la réponse rapide de tout a l'heure j'étais en voiture ...

9test.xlsm (33.70 Ko)

Re

J'écris ce message au fur et à mesure que je traite le fichier:

Erreur à l'ouverture sur la ligne:

Range("D3:G32,I3:L32,D36:F50,D56:G83,I56:L83,D86:F101,D107:G136,I107:L136,D140:F154").Select

La ligne de code ne veut pas sélectionner ce que tu lui indiques, tu y jetteras un oiel c'est dans l'évènement workbook open

J'ai modifié ton programme pour qu'il soit géré par des tableaux VBA, je te laisserai tester parce que je n'ai aucune idée de ce que ton programme doit donner comme résultat...

8copie-de-test.xlsm (53.05 Ko)

Re et merci à toi pour ta rapidité et ton implication

Je teste ca et reviens vers toi pour te donner des news

encore merci et bonne soiree

Bonjour Ausecour,

JE reviens encore vers toi car je n'arrive pas à faire fonctionner ta formule

J'ai copié ta formule dans un nouveau tableau plus simplifié avec une explication ou j'ai essayer d'etre le plus clair possible

Peux tu y jeter un oeil afin de me dire ou ça bloque stp ?

Te remerciant par avance

6test.xlsm (29.27 Ko)

Bonjour,

Plutôt que de modifier ton code, j'ai préfèré en refaire un à ma sauce qui m'a l'air plus simple, mais il faudra me dire si j'ai bien pensé à tout, ta colonne "reste", je ne voyais pas à quoi elle servait, c'est le nombre de gratuité que la personne peut encore avoir?

Pour le moment je ne l'utilise pas, il faudra que tu m'expliques

Je te retourne ton fichier pour que tu puisses voir :

15copie-de-test.xlsm (31.20 Ko)

Bonjour,

Merci de me contacter ici, et non sur ma boite mail, je n'aime pas échanger par messages privés, voici le fichier en retour par rapport à tes demandes:

8copie-de-test.xlsm (30.16 Ko)

Bonjour Ausecour

MERCI pour ton aide si précieuse mon tableau fonctionne enfin

Bonne soiree et bonne continuation à toi

Bonjour,

de rien

merci d'avoir passé le sujet en résolu

Rechercher des sujets similaires à "calcul vba"