Erreur Exécution '11' : Division par zéro

Maxime7

XLDnaute Nouveau
Bonjour

En exécutant ma macro, je suis tombé sur ce problème :
Erreur Exécution '11' : Division par zéro

Il me dit que mon résultat me ramène à une division par 0 alors que j'avais déjà utilisé exactement les mêmes données et cela ne m'avait jamais mis cette erreur.

Il me surligne cette ligne de code

VB:
n = n + Application.RoundUp(t(i, 47) / max, 0)

Il me dit que les variables n=39 et i= 36 quand je mets mon curseur de la flèche dessus.

Quelqu'un pourrait me dire mon erreur ?

Voici en PJ mon fichier

Je vous explique, sur mon fichier original :
Il récupère les données d'un premier onglet. Colle les données sur la colonne A jusqu'à E (les données de la colonne A jusqu'à E sont sur ce fichier) les colonnes de F jusqu'à BG contiennent des formules.
La macro en PJ réagit de la façon suivante :
Si colonne AU>1 et BB*AU supérieur à BE alors il créé une autre ligne en faisant en sorte que BB*AU soit toujours inférieur à BE et que le reste du surplus soit réparti dans la nouvelle ligne qu'il va créer et que la condition BB*AU soit toujours inférieur à BE.

Je pense que la ligne 36 pose problème mais je n'ai aucune idée de ce problème.

Pourtant ma ligne 36 en colonne AU = 2, BB = 9697.15245 et BE = 13000
AU*BB = 19394.3049 donc AU*BB est supérieur à 13000
Alors il me créé une ligne de
AU = 1, BB = 9697.15245 et BE = 13000
Puis une autre de
AU=1 et BB = 9697.15245 et BE = 13000

Il ne divise rien par 0
Cela me fait quand la valeur en AU = à 2.
Je vous remercie par avance de votre aide

Maxime7
 

Pièces jointes

  • Classeur4.xlsm
    39.3 KB · Affichages: 10
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Maxime, PierreJean,
Vous avez BE36=13000 et BC36=126100, d'où BE36/BC36=0.103 et l'arrondi vaut ... 0, donc le max vaut 0.
Soit on supprime le Round comme proposé par PierreJean, soit on fait :
VB:
max = Application.RoundDown(t(i, 57) / t(i, 55), 1)
Tout dépend pourquoi vous avez mis un arrondi.
 

Maxime7

XLDnaute Nouveau
Bonjour à vous PierreJean et sylvanu

Ah ok je comprends mieux.
J'avais mis un arrondi pour avoir un nombre entier au plus proche du chiffre.

Mais j'ai pris l'astuce de PierreJean. Il fonctionne pour le moment
J'ai testé aussi avec le tien sylvanu mais je me retrouve avec une autre erreur d'exécution 9.
Je pense que mes autres macros d'autres modules font l'apparition de cet erreur.

Merci à vous 2 pour votre aide rapide !! J'espère que cela ne va pas dysfonctionner à nouveau avec une autre erreur ^^

Bonne journée à vous


Maxime7
 

Maxime7

XLDnaute Nouveau
Re

J'ai bien regardé les résultats et bien en faite, cela ne convient pas.

Par exemple pour la ligne n°36, au lieu de me retrouver avec 2 lignes, je me retrouves avec un duplicat de 20 lignes.

AU = 2; BB = 9697.15245 et BE = 13000

Normalement je n'ai que 2 lignes et non 20.
Je devrais avoir une ligne de
AU=1, BB = 9697.15245 et BE = 13000
et une autre
AU=1, BB = 9697.15245 et BE = 13000

Idem pour la ligne n°39 :
AU=2, BB = 11040.7135 et BE = 25000

Je ne devrais avoir qu'une ligne de
AU=2, BB = 11040.7135 et BE = 25000 car 2*11040.7135 < 25000

Il n'y a plus de répartition équitable

Maxime7
 

Maxime7

XLDnaute Nouveau
Re sylvanu,

Merci pour ton retour
J'aurai aimé le faire mais je ne sais pas le traité, @mapomme est l'auteur de cette macro dans mon fichier, je ne serai pas capable de le faire.
Cela fonctionnait bien mais je ne sais pas ce qu'il s'est passé quand j'actualisais les données.

Voici le lien de notre conversation.

J'avais compris ces explications mais malgré cela je ne serai pas le faire
Je trouve cela bizarre car ses données que je vous ai fourni sont les données utilisées lors du test avec sa macro dans mon fichier original et cela fonctionnait sans problème.

Maxime7
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
J'ai ouvert le dernier fichier de votre conversation ( post #8 ).
Je lance insertLignes ... et j'ai une erreur exactement à la même ligne.

Pour traiter l'erreur c'est simple. Vous prenez la ligne 36, que doit valoir le max pour faire ce que vous voulez qu'il fasse ? par ex 1. dans ce cas :
VB:
max = Application.RoundDown(t(i, 57) / t(i, 55), 0)
If max = 0 Then
   max=1            ' Adapater la valeur par défaut
EndIf
ou essayez avec ma formule :
Code:
max = Application.RoundDown(t(i, 57) / t(i, 55), 1)
A ce moment là max=0.1, est ce que le résultat vous va ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En PJ, J'ai simplement rajouté : If max=0 then max=1.
Regardez ce que ça donne.
Je pense que le problème vient du fait que quand max devient inférieur à 1 alors n augment beaucoup.
Par ex avec la ligne 36 comme max=0.1 alors n=n+10*RoundUp(t(i, 47),0).
 

Pièces jointes

  • Classeur4 (6).xlsm
    69.9 KB · Affichages: 3

Maxime7

XLDnaute Nouveau
Salut Sylvanu,

Tu es trop au top !!!
Cela fonctionne parfaitement ^^

Je te remercie du fond du coeur !!!
Merci Merci Merci !!!!!!!!!!!!!!!!!!!!!!

Je te souhaite une putain agréable de soirée !!!

Merci Merci !!!
Tu es top top top !!!

A+

Maxime7
 

Discussions similaires

Réponses
13
Affichages
637

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar