IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pb actualisation calculs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut Pb actualisation calculs
    Bonjour,

    Le temps de saisie (et donc de re-calcul) est trop long depuis que j'ai ajouté des Feuilles (~50) à mon classeur.

    Les feuilles sont liées par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function NomFeuilPrec() As String
        Application.Volatile                                        
        NomF = Application.Caller.Worksheet.Name                   
        If Not ActiveSheet.Index = 1 Then NomFeuilPrec = Worksheets(Sheets(NomF).Index - 1).Name  
    End Function
    J'ai 4 Sub par Feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub worksheet_activate()
    Private Sub Worksheet_Change(ByVal Target As Range)
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    J'ai cherché une solution pour Worksheet_Change et Worksheet_SelectionChange, en ajoutant (en vain) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    Y a-t-il un moyen de résoudre le problème de latence de calcul à chaque saisie ?
    En vous remerciant par avance pour vos lumières.

    Cdt

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 249
    Par défaut
    Hello,
    Rappel concernant Application.Volatile :
    Marque comme volatile une fonction définie par l’utilisateur. Une fonction volatile doit être recalculée chaque fois qu’un calcul se produit dans des cellules de la feuille de calcul. Une fonction non volatile est recalculée uniquement lorsque les variables d’entrée changent. Cette méthode n’a aucun effet si elle n’est pas située dans une fonction définie par l’utilisateur servant à calculer une cellule de feuille de calcul.
    Ami calmant, J.P

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Bonjour,

    Merci pour cette réponse détaillée mais que puis-je faire pour "résoudre" le problème (si possible) ?

    Cdt

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Ne sachat exactement ce que tu cherches ainsi, mais regarde du côté des évènements Worbook du modue Thisworkbook

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    663
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 663
    Par défaut
    Bonjour,

    Le principe :

    * Création de Feuilles (au cas par cas) à partir d'une macro, sur lesquelles on effectue des saisies de nombres qui affichent un résultat en fonction de la Feuille précédente.
    * Chaque Feuille est renommée avec la date située dans la cellule F2 - les dates ne sont pas connues d'avance.
    * L'intervalle entre la Feuille n et la Feuille n-1 conditionne certains calculs.

    Problème :
    Comme les dates ne sont pas connues d'avance, on ne peut pas (sauf erreur de ma part) générer les onglets d'avance et lier les formules (de l'un à l'autre) avec la formule DECALER.

    Solution (!) :
    Chaque nouvelle Feuille crée est placée dans l'ordre des index et récupère les données de la précédente par la "Function NomFeuilPrec() As String". Tout ça fonctionne bien.

    Problème bis :
    Plus il y a d'onglets, plus les re-calculs sont longs.

    Piste (faut bien essayer !) :
    Puisque les saisies se font dans la plage "F7:J19", j'envisage de d'y détecter la position du curseur et de déclencher une variable "shunt_volatile" qui inhibera ladite Function :

    Ce qui donne, dans les modules de Feuilles (Sub Worksheet_Change et Sub Worksheet_Selection_Change) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        If Not Intersect(Target, Range("F7:J19")) Is Nothing Then
            shunt_volatile = 1
        Else
            shunt_volatile = 0
        End If    
        (...)
    Et (dans un module standard) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function NomFeuilPrec() As String
    If shunt_volatile = 1 Then Exit Function
        Application.Volatile                                       
        NomF = Application.Caller.Worksheet.Name                    
        If Not ActiveSheet.Index = 1 Then _
            NomFeuilPrec = Worksheets(Sheets(NomF).Index - 1).Name 
    End Function
    Nota :
    Comme les calculs de la Feuille active ne sont temporairement plus actualisés, j'avais pensé générer un message dans une cellule pour "rassurer" l'utilisateur...
    Mais la saisie pose problème car elle sollicite l'évènement Change - j'ai remplacé cette solution par l'affichage d'un motif (qui fait apparaitre le message en évitant Change).
    L'utilisateur est invité à cliquer sur cette même cellule s'il veut délibérément actualiser les calculs (et le motif change de couleur).
    Dans tous les cas, je prévois de réactiver la Fonction volatile quand l'utilisateur passe sur un autre onglet ou bien sûr à l'ouverture du classeur.

    Pas sûr que ça soit très clair mais j'expérimente...

    Cdt

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Outre le fait que vous utilisez des fonctions personnalisées que vous rendez volatiles, DECALER est également une fonction volatile ce qui, comme l'a signalé JP que je salue au passage, ralenti l'exécution du programme du fait que ces fonctions ainsi que toutes celles qui sont imbriquées avec elles se recalculent à chaque changement de valeur dans une cellule quelconque d'un classeur ouvert.

    [EDIT]
    Liste des fonctions volatiles d'excel
    • ALEA
    • ALEA.ENTRE.BORNES
    • AUJOURDHUI
    • CELLULE
    • DECALER
    • INDIRECT
    • INFO
    • MAINTENANT
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Actualiser avec calcul
    Par Philippe608 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 17/07/2010, 15h52
  2. [JXL] Actualisation feuille de calcul
    Par GatH7614 dans le forum Documents
    Réponses: 0
    Dernier message: 09/07/2010, 11h12
  3. Actualiser les calculs d'une feuille Excel fermée
    Par catsur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2008, 16h38
  4. Actualisation calculs formulaire
    Par ob1knob dans le forum Access
    Réponses: 5
    Dernier message: 23/11/2006, 10h24
  5. Réponses: 4
    Dernier message: 15/06/2006, 16h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo