Problème dépassement de capacité

Salut le forum!

J'ai un mini souci. Dans le fichier suivant: Fichier

En lançant la macro "toutesmacro" sur la feuille "Mediation" je me retrouve avec l'erreur "Dépassement de capacité".

Alors qu'en lançant la même macro dans la première feuille, cela marche parfaitement!!

Quelqu'un peut-il m'expliquer?

Bonsoir,

met au moins une valeur, dans la colonne D (quantité)

sinon, division par zéro.....

d'où dépassement de capacité...

Bonne soirée

Salut le forum

Vba-New, tu exécutes une division par zéro

  • Cells(j, 9) = Cells(j, 7) / Application.WorksheetFunction.Sum(Columns(7)) + Cells(j - 1, 9)

ou remplace par

  • Cells(j, 9) = 0

Il faut au moins mettre une valeur à 1 dans les quantité.

Mytå

5conception-v3.xlsm (54.42 Ko)

Salut Mytå et felix,

Merci pour vos réponses. J'avais pas pensé que c'était à cause d'une division par zéro.

Vous préconisez de mettre une valeur dans la colonne Quantité mais en fait cette colonne quantité représente le nombre de fournitures commandées par tel ou tel service.

Si la colonne quantité est vide (comme pour la feuille 'Mediation') cela signifie que ce service n'a rien commandé au cours de l'année.

Je ne peux donc pas mettre de quantité!

Mytå, tu me dis de mettre à la place Cells(j, 9) = 0, mais cela change toute ma formule!!

Existe-t-il une autre solution?

Bonjour,

dans ta sub calcCumulPourcent()

en tout début, tu mets :

If Application.Sum(Range("D8:D" & [A65000].End(xlUp).Row)) > 0 Then

et en toute fin :

End If

Bonne journée

Ok ça marche nickel! Merci beaucoup!

Je voudrais savoir s'il est possible de réduire le temps d'exécution de ma macro.

Cela prend trop de temps à mon goût. Je pense que cela vient de la macro 'SupprLign'. Pensez-vous qu'il est possible d'optimiser cette macro?

Merci d'avance pour vos réponses!

re-,

regarde le fichier joint

j'ai enlevé tous les .Select

modifié quelques codes

je te laisse tester (en gros, 2 fois plus rapide)

https://www.excel-pratique.com/~files/doc2/Pareto_service_v1.zip

Merci beaucoup (voilà ta récompense felix)! Je remercie encore également Mytå pour sa participation.

Ca m'en apprend beaucoup plus sur le VBA!

Une dernière question, à quoi sert ce code?

Application.Calculation = xlCalculationManual
Application.Calculation = xlCalculationAutomatic

Edit: Existe-t-il une solution pour que la macro 'toutesmacro' s'exécute sur toutes les feuilles excepté la dernière?

4conception-v4.xlsm (60.96 Ko)

Re-,

je passe le mode de calcul en manuel, et je le remets en automatique à la fin de toutes les macros, pour un gain de temps..

Pour ne pas que la macro puisse se dérouler sur la dernière, tu fais un test du style :

en tout début de code (avant Application.....)

If ActiveSheet.Name <> "Suivi magasin " Then

attention à l'espace à la fin de magasin, dans ton fichier, il y a un espace à la fin du nom de l'onglet..

et en toute fin de code :

End If

Merci felix. J'avais pas vu que le nom de la feuille comportait un espace!!

Et si je veux pas que la macro s'exécute sur plusieurs feuilles je fais ça?

If ActiveSheet.Name <> "Suivi magasin " OR ActiveSheet.Name <> "nom_feuille1" OR ActiveSheet.Name <> "nom_feuille2" Then

Edit: Une autre ptite question : quelqu'un sait pourquoi la barre de défilement verticale n'est pas adaptée à la taille du tableau? Par exemple pour la feuille 'Médiation' en glissant la barre de défilement, je peux descendre jusqu'à la 1193è ligne alors qu'à partir de la 211è elles sont vides!

Re-,

question 1 : oui

question 2 :

Clique sur le numéro de la dernière ligne vide (en l'occurence 211)

Appuie simultanément sur Ctrl + Shift + Flèche Bas

Shift est la flèche situé juste au dessus de la touche Ctrl

Flèche Bas est la flèche de direction vers le bas

Tu as alors sélectionné toutes les lignes vides sous le tableau, jusqu'à la ligne 65536

clic droit/Supprimer

Enregistre, ferme ton fichier, et rouvre-le.......

1conception-v4.xlsm (62.64 Ko)

Re-,

Euh, je m'a trompé......

au lieu des Or, met des And....

If ActiveSheet.Name <> "Suivi magasin " OR ActiveSheet.Name <> "nom_feuille1" OR ActiveSheet.Name <> "nom_feuille2" Then

devient :

If ActiveSheet.Name <> "Suivi magasin " And _
    ActiveSheet.Name <> "nom_feuille1" And _
    ActiveSheet.Name <> "nom_feuille2" Then

Scuse.....

Merci felix!! En fait j'attendais ta réponse avec impatience mais j'avais pas vu qu'il y avait une 2è page!!

Pour faire ta manip pour la suppression des lignes, c'est possible par macro ça? Sélectionner automatiquement la ligne qui se trouve juste après la dernière ligne du tableau puis faire la suppression jusqu'à la 65536è ligne?

Merci encore pour ton aide précieuse.

Ah oui! c'est bien AND que je voulais faire, j'ai fait une petite erreur en mettant OR!!

Edit: Dans un message précédent, j't'avais demandé s'il existe une solution pour que la macro 'toutesmacro' s'exécute sur TOUTES les feuilles AUTOMATIQUEMENT (j'avais oublié cette précision ) excepté la dernière? Genre lancer la macro une fois pour toute!

Re,

pour nettoyer un fichier, le code que j'utilise est celui de Laurent Longre, un gourou d'Excel...

Il est dans mes macros personnelles, donc accessible sur n'importe quel fichier Excel que j'utilise....

Code dans le fichier joint

https://www.excel-pratique.com/~files/doc2/nettoyer_le_fichier_laurent_longre.txt

Euh... C'est à moi que tu réponds là felix?

Parce que j'ai vu un code un peu compliqué donc je me pose la question

Re-,

1/ Lorsque tu as une nouvelle question, mets-là dans un nouveau fil..... (c'est pénible de relire tout le fil pour voir s'il y a de nouvelles question, mises en Edition)

2/ le code que je t'ai donné nettoie toutes tes feuilles, et supprimes les cellules inutilement inutilisées

3/ pour le dérouler sur toutes les feuilles, il faudrait repenser le code....

Et regarder au niveau des With......End With....

Remarque, comme il n'y a plus de Select, je déroule, and wait

PS, ne pose plus de question en Edition, sinon, j'arrête..

Désolé pour le dérangement!

Je viens de tester le code de Laurent Longre, c'est tout à fait ce qu'il me fallait!

RE-,

enregistre le module que je joins...(après Dézip)

C'est un fichier .bas (mis en zip, car le site ne permet pas de joindre ce type de fichier)

Dans VBE, clic droit sur ton nom de module

Importer

Sélectionne le fichier .bas que tu viens d'enregistrer....

Et déroule la macro "toutesmacros"

Nota, j'ai modifié les conditions, pour le déroulement de ces macros

j'ai mis les feuilles à traiter, au lieu des feuilles à éviter....

Reviens si pb

https://www.excel-pratique.com/~files/doc2/Felix.zip

Merci felix on est presqu'au bout!

Tu as mis comme condition les feuilles à traiter, ce qui signifie que si à l'avenir il y avait d'autres feuilles à traiter (ce qui est très probable!),

je devrai ajouter manuellement chaque nouvelle feuille dans les conditions?

A l'inverse, la feuille à éviter est la seule.

Mais si tu me dis qu'il est préférable de mettre les feuilles à traiter plutôt que les feuilles à éviter alors ça ne me posera aucun problème de les rajouter manuellement.

A te relire

RE-,

A l'inverse, la feuille à éviter est la seule.

Au vu de ton code dans un des posts.....

If ActiveSheet.Name <> "Suivi magasin " OR ActiveSheet.Name <> "nom_feuille1" OR ActiveSheet.Name <> "nom_feuille2" Then

je ne pouvais savoir, pour moi, il y en a 3....... au moins...

Maintenant, s'il n'y a qu'une feuille à éviter, conserve la version exclusive :

If ActiveSheet.Name <> "Suivi magasin " Then

Un peu de plus de Précisions, stp (j'aime pas travailler dans le flou.....)

Bonne soirée

Rechercher des sujets similaires à "probleme depassement capacite"