Excel et MAJ des calculs

Bonjour,

J'ai un énorme fichier Excel. J'ai donc créé une feuille de calcul assez austère qui me sert à faire les calculs avec des fonctions que j'ai écris moi-même etc..., et les autres à côté qui récupère les données qu'elles veulent dans la feuille de calculs et comme ceci, je peux faire les tris que je veux etc...

Enfin voilà, attaquons nous au problème, dès que je change quelque chose dans mes feuilles annexes, les calculs de la feuille calculs deviennent tous "#valeur" et je dois retourner sur la feuille calcul pour faire un Ctrl+Alt+F9 pour relancer les calculs... c'est assez pénible...

Je vous joins un fichier de test

exemple : faites une copie de mon fichier

ouvrez les 2 fichiers en même temps

exécutez un calcul sur la feuil1 d'un des fichiers

retourner sur le 2ème fichier, tous les calculs auront des aleurs "#valeurs"

ctrl + alt + F9 sur la feuil2 ne fera rien

ctrl + alt + F9 sur la feuil1 réexécutera les calculs correctement

revenez sur le fichier 1 : plus aucune valeurs

sauf que sur mon document original, la moindre modification dans notre feuil2 du fichier test entraine l'épidémie de #valeur

Y a-t-il une solutioN?

13test2.xlsm (40.62 Ko)

Bonjour,

Peut-être une solution si au moins ont voyaient ton fichier teste.

A+

au temps pour moi j'avais oublié de le joindre :/

Bonjour

Rajoutes dans chaque fonction après la déclaration des variables

Application.Volatile

malheureusement ça ne marche pas :S de plus le temps de calcul est du coup horriblement long à chaque changement :/

Bonjour

tibibs a écrit :

malheureusement ça ne marche pas

Ah bon chez moi les formules sont calculées à l'ouverture du fichier

tibibs a écrit :

de plus le temps de calcul est du coup horriblement long à chaque changement

Normal les (nombreuses) formules sont recalculées à chaque fois

Mets toi en calcul sur ordre et quand tu auras besoin d'actualiser tu appuieras sur F9

Rien de plus dans ma besace

oui mais l actualisation sur demande n'est pas le but recherché :p sinon peux-tu m'éclairer sur la raison pour laquelle excel ne garde pas en mémoire les valeurs?? car en soit je ne change pas de cellules qui sont en paramètre :/

Bonjour

tibibs a écrit :

la raison pour laquelle excel ne garde pas en mémoire les valeurs??

C'est l'utilité de l'événement Calculate, tout changement dans la feuille (entre autre)provoque le recalcul des formules de la page, même si le résultat est identique

Quand les formules sont peu nombreuses ou peu complexes, c'est transparent (car rapide) pour l'utilisateur

Tu ne peux pas empêcher cela sauf en mettant "Calcul sur ordre"

oui mais là il n'essaie même pas de recalculer, c'est ça qui est étrange :/

Bonjour,

Pas étonnant que ça dure des plombes et que tu a des erreurs, tu fais chaque fois un appel récursif à ta fonction.

Dans le corps de ta fonction emploi une variable locale pour le calcul et ce n'est que quand les calculs sont terminés que tu passe le résultat à ta fonction.

Chaque fois que tu assigne une valeur à ta fonction tout le classeur est recalculer.

Note : je ne vois pas l'intérêt à ouvrir une deuxième copie du classeur... il n'y a pas de liaisons entre les deux ?

Et sot dit en passant, j'ai rien compris de ce que tu veux faire avec tes fonctions si ce n'est que d'avoir les adresses des lignes qui correspondent à la cellule A en regard.

Explique CLAIREMENT le résultat souhaiter sans tenir compte de tes fonctions, ont pourra probablement t'aiguillé valablement.

A+

Bonjour,

OK, j'ai fais cette petite modif (mettre le résultat dans une variable local et l'assigné qu'à la fin de la fonction)

alors en fait, j'explique plus en détail ce que je veux faire

j'ai plusieurs personnes (dans le fichier test A,B et C)

chaque personne doit livrer des véhicules dans les zone 1, 2 , 3, 4, 5 et 6

il y a 3 types de véhicules (1,2 et 3)

Les dates de livraisons sont données et calculées par le tableau date

mon but est de faire un tableau récapitulatif des livraisons de chaque personnes en fonction de la semaine.

J'ai donc dans chaque cellule de mon tableau récapitulatif une fonction qui récupère pour chaque type de véhicule le nombre de véhicules à livrer dans la semaine (LIVRAISONS)

mais dans mon tableau de base, les calculs directs étaient TRES long (10min)

J'ai donc décider de créer une fonction (recup_lign_pers) (dans les cellules remplis en jaune) qui récupère le numéro de chaque ligne où la personne voulue apparait, et les passe dans un string qui sera récupéré et analysé par ma fonction LIVRAISONS

Ainsi le temps de calcul sur mon PC (qui vaut ce qu'il vaut ^^) passe à 20/30 sec

Si vous avez besoin de plus de détails, n'hésitez pas

Je pense que j'ai compris ta douleur...

D'abord encore une petite remarque, dans la feuille tu nomme une plage Personnes qui devient dans ta fonction Plage et la cellule de référence (en colonne A) tu la nomme...... personnes !! faut tâcher d'être plus clair pour la compréhension du code.

Explication de la fonction Application.Volatile suggérée par Banzaïe

Si tu met ça dans la fonction à chaque modification d'une cellule quelconque dans la feuille TOUT est recalculé, même si ce n'est pas nécessaire. Par contre, si tu ne le met pas ce ne serra activer que si la cellule de référence (celle de la colonne A) est modifiée, tu aura beau taper F9 pour le recalcule ce sera ignorer.

Dans quel condition(s) le recalcule doit être fait ?

Tu dis.

A+

je sais pour le nom des éléments j'ai été un peu vite pour le fichier de test... :/ mais sur mes gros fichiers, j'essaie de mappliquer un peu plus que ça

alors ma cellule dois se mettre à jour soit :

quand une date est modifiée (la plage de cellule "dates" est mise en argument)

quand une quantité de véhicule est modifiée (la plage correspondante au type de véhicule est passée en argument)

quand le nom de la personne change (qui me change la valeur des cellules en jaune, donc en cascade ma cellule avec la fonction LIVRAISONS, car la cellule jaune est en paramètre)

le truc c'est que ma fonction est correctement contrainte!!

mais même quand je modifie quelque chose qui n'est pas dans les paramètres, excel m'efface les valeurs déjà calculées pour mettre des "#valeur" et ne lance pas le calcul (logique vu que les cellules en paramètre n'ont pas bougée d'un iota)

Tu a oubliés de paramétrer les champs camionettes ; Petit_Porteur ; et Semi

J'ai fais 2,3 essais et il n'y a que les tableaux de droite qui sont en erreur ? C'est juste ?

quels champs camionette, petit_porteur, semi??

car effectivement, sur mon fichier original, j'ai bien c'est champs là, mais où en as-tu trouvé la trace dans le fichier test? :/

Dans les tableaux tout à droite

Et dans ces conditions le comportement est normal.

alors en effet, sur le fichier de test, j'avais bien oublié ces parties de tableau mais... cela ne change pas mon problème :p

Cependant, j'avoue que le comportement est moins chaotique que sur mon fichier original... pour une raison que j'ignore totalement

concentrons-nous sur les problèmes commun aux 2 fichiers.

faites une copie de test2, et ouvrez les 2 fichiers en même temps

Lancez un calcul sur un des fichiers avec CTRL+ALT+F9

retourner sur l'autre fichier : toutes les valeurs ont été effacées! Mais uniquement celles de ma fonction LIVRAISONS! toutes les autres sont restées en place!

Maintenant, problème uniquement sur mon original : dès que je change une valeur dans une autre feuille autre que celle où les calculs s'exécutent, excel m'efface les valeurs des fonctions livraisons! MAIS pas de toutes.... certaines résistent encore et toujours à l'envahisseur...

Je n'ai pas su revenir plus tôt, j'ai dû m'absenté.

J'avais déjà examiner tes classeurs, un des gros problèmes est que chaque classeur à les mêmes noms de plage et les même noms de fonctions et je pense que quand les 2 classeurs sont ouvert dans la même instance d'Excel et beh... y fait des noeux.

Mais le plus gros problème n'est pas là.

En fait tu à deux fonctions répartie dans 2 cellules différentes mais il faudrait un ordre "de passage" , recup_lign_pers devrait être initialiser avant LIVRAISONS, mais ça c'est excel qui décide des itérations de calcul, il se fait donc que parfois ça marche (si c'est dans le bon ordre) et parfois ça va pas puisque la fonction LIVRAISONS travaille avec Ligne qui est vide.

Maintenant que le problème est cerner je verrais cela demain.

A+

T'inquiète pas, je suis pas à la minute

mais ce que je ne comprends pas, étant donné que la fonction LIVRAISONS fait appel à la case contenant recup_lignes_pers, celle-ci devrait passer avant dans l'arbre des dépendance, et donc s'actualiser avant :/ non?

Re,

Pour répondre à ta question -> NON le retour étant un string et la fonction n'étant pas volatile elle ne se réactualise pas.

De toutes façon en faisant du "pas à pas" ont peu constater que 2 x sur 3 la variable Lignes est vide quand elle arrive dans LIVRAISONS.

Note que c'est normal qu'elle soit souvent vide mais alors la fonction livraison plante quand tu veux assigner tab(0)

Y a une chose que je comprend pas c'est qu'il y a plusieurs erreurs mais que des chiffres arrive dans certaine cellules.

Je bloque sur une dernière question, dans la fonction LIVRAISON...

quand tu est passer avec les 2 premiers test tu fait une intersection avec Rows(c.Row) déjà ça ça plante vu que c'est une commande incompatible et que si tu veux la ligne C.Row suffit enfin bref, là je comprend rien de ce que tu veux faire.

En C41 tu à =LIVRAISONS(C41;A$41;v_1;dates)

les lignes sélectionnées sont 4:4, 5:5, 12:12, 13:13, 14:14, 17:17, 20:20

Zut, en écrivant ce poste je fait des tests pour te mettre les données et je pense que j'ai compris..

Je reviens, en attendant vérifie si c'est juste jusqu'à présent

Rechercher des sujets similaires à "maj calculs"