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
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)
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 ^^
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
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.
Bonjour à vous tous, Je suis nouveau dans ce forum, je ne connais pas forcément la manière pour décrire le problème mais j'ai pas mal feuilleté les forums et espère pouvoir trouver de l'aide et vous expliquer clairement mon problème. J'ai les notions en VBA et j'essaye à chaque fois de...
www.excel-downloads.com
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.
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 ?
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).