Calcul Fonction personnalisée sans intéraction

Bonjour,

J'ai un problème sur mon fichier que je ne peux transmettre car il contient des données confidentielles et que je n'arrive pas à reproduire sur un fichier de démo.

Dans la Feuil1 j'ai un tableau utilisant une fonction personnalisé à partir de 5 autres colonnes

Dans Feuil2 j'effectue un traitement automatique me permettant d'ajouter, supprimer des lignes, etc... Lors de la commande "Range.Delete", la fonction se rend dans ma fonction personnalisé pour un recalcul de mon tableau. Hors, le Tableau1 n'a aucun lien avec ce dernier traitement, mais le pas à pas détaillé recalcul tout de même ces fonctions.

Cela ralentit considérablement mon traitement sur la feuil2 sans aucune raison. Je voudrais donc que le traitement Feuil2 ne recalcul pas les fonctions personnalisées du tableau sur la Feuil1, qui n'ont je rappelle aucun lien. J'ai essayé en mettant la fonction comme non Volatile, en mettant le type de calcul comme semi-Automatic, rien n'y fait.

Je ne comprend pourquoi une fonction ne manipulant que des données internes et de la Feuil2, recalcul une formule de la Feuil1. Savez-vous pourquoi ? Et comment l'en empêcher ?

Merci d'avance.

bonjour,

utilises-tu indirect ou decaler dans tes formules ? ce sont des fonctions qui sont toujours réévaluées (sauf en mode calcul manuel)

Oui en effet j'utilise ces 2 formules.

Savez-vous s'il est possible d'empecher cette réévaluation à part en passant en mode manuel puis en mode automatique de nouveau qui provoque un recalcul dans tous les cas ?

Bonjour,

si tu as vraiment beaucoup de telles formules, remplacer les plages dynamiques (construites à partir de indirect ou offset) par des plages fixes et/ou passer par VBA

Pour être sûr de bien comprendre, tu dis donc que si je fais une fonction vba qui a la place de indirect fait du

Public Function IndirectPerso( nm As String) As Variant
   If Not ThisWorbooks.Names(nm).RefersToRange Is Nothing Then
     IndirectPerso = ThisWorbooks.Names(nm).RefersToRange.value
   Else
      IndirectPerso = 0
   End If
End Function 

Et idem pour décaler :

Public Function DecalerPerso(rng As Range, ligne As Integer, colonne As Integer,  plgLigne As Integer, plgColonne As Integer) As Range
    Set DecalerPerso = rng.Offset(ligne, colonne).Resize(plgLigne, plgColonne)
End Function

Ces fonctions sont des exemples approximatives afin de justifier mes propos, sans test, à ne pas utiliser à la lettre.

J'aurais plus de recalcul intenpestif ?

Car je ne peux tout simplement pas utiliser de plage fixe.

Cela me paraît un peu simple comme solution mais je vais essayer et je redirais si cela marche.

Bonsoir,

comme dit au deuxième message, pourquoi ne pas mettre les calculs en manuel lors du traitement de la feuille2 puis de les remettre à l'issu en automatique ?
Vu que le traitement de la feuille 2 se fait par VBA...

@ bientôt

LouReeD

Bonjour,

Car lorsque l'on repasse en mode automatique cela produit une réévaluation de l'ensemble de ces fonctions dans tous les cas, donc au lieu de les faire plusieurs fois cela ne les fait qu'une fois certes, mais si c'est possible de ne jamais le faire alors c'est mieux !

Rechercher des sujets similaires à "calcul fonction personnalisee interaction"