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 :

Mise à jour des calculs et VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut Mise à jour des calculs et VBA
    Bonjour,

    Je rencontre un problème :
    J'ai un fichier qui a pas mal de formules du genre des somme.si et autre,qui puisent vers deux fichier aussi dans le classeur. C'est assez lourd.
    J'ai mis deux cellules ou l'on choisi deux parametres , quand on les choisi dans une liste, cela change les valeurs de la feuille (sommes si et tt)
    J'ai créé une macro qui simules plusieurs choix de parametres et qui colle le tableau des resultat dans une feuille. On arriverait à la meme chose à la main si on chosiissait ces paramettres à la main et que lon copiait le tableau à la main.

    2 Problème :

    celui des calculs qui sont trop lents par rapport à la macro, les calculs ne s'updatent pas forcement , la macro avance mais sans pour autaznt que le calcul soit terminé. Ceci fait qu'il y a des risques d'avoir des résultats faux.

    Voici des idées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Waiting()
        Do
        DoEvents: DoEvents
        Loop Until Application.CalculationState <> xlDone
    End Sub

    Deuxieme probleme :

    J'ai mis une petite userform d'avancement qui donne des infos sur l'avancement du process
    Mais elle est pas stable et j'e vois le message (ne repond plus) affiché ... c'est pas térrible , il semblerrait que ca boucle trop vite ?


    Voila si on peut m'aider ou me donner un petit coup de pouce sur ce sujet ca serait super cool . Je manque d'idée

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tes deux (pourquoi deux, d'ailleurs ?) Doevents font que la macro se lance !
    Il faut en effet que tu comprennes que les formules Excel sont calculées dans un fil distinct du fil VBA, ce qui fait que ta macro, indépendante du fil des formules, se lance distinctement.
    Je vais probablement être la victime ici d'un tollé général, mais ma "religion" est telle que je ne mets jamais dans la même "cage" un loup et une brebis. Si l'on traiite par formules, il vaut mieux s'abstenir de traiter parallèlement par VBA. Si l'on traite par VBA, il vaut mieux tout traiter par VBA.
    Allez ! Lâchez-vous (je ne vous en voudrai point) : frappez, insultez-moi, si cela vous fait plaisir...

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    Oui mas je ne peux pas refaire ce qui a ete fait, et en Excel je peux pas automatiser donc ...
    Cumuler un doevent permet de ralentir le code un peu plus pour donner la main au system ça évite de repartir pour un tour de boucle, j'ai vu ça dans l'aide vba. Ceci dit ça m'a l'air un peu complique comme problème. Quel etat de la barre de statuts me permet de dire que le calcul est termine

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bis repetita, donc
    - Deux Doevents ne font pas mieux qu'un seul dans une boucle
    - un doevents n'empêche pas, bien au contraire, ta macro de se lancer

  5. #5
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    Si si ça permet de donner la main deux fois . Et ça évite de repartir dans la boucle. Ceci dit c'est pas vraiment le pb du topic en fait

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Donner la main, c'est donner la main ! La donner deux fois n'apporte rien de plus que de la donner une fois. Et, la donnant, tu la donnes également à la macro !
    Pour répondre à ta question, à savoir :
    Quel etat de la barre de statuts me permet de dire que le calcul est termine
    Ben ... précisément celui que tu utilises : Application.CalculationState
    Tu es en train de continuer à construire à mon sens une usine à gaz.
    Mais si tu y tiens, utilise alors Application.ontime pour vérifier périodiquement que le calcul est fini et :
    - ne lancer qu'alors ta macro
    - interrompre Application.Ontime.
    Désolé, mais ne compte pas sur moi (relis ce que j'ai dit plus haut en ce qui concerne ma religion) pour t'aider à utiliser ce "truc"-là. Un autre le fera.
    Bonne chance.

  7. #7
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Billets dans le blog
    17
    Par défaut
    Va jeter un oeuil sur l'aide tu versa on peut cumuler un doevents mais c'est pas le thème du topic. Ensuite le onetime arrete l'application donc aucun calcul n'est fait Durant la pause m j'ai déjà teste et on reste dans une boucle infini car il ne recalcul pas Durant la pause.
    Éventuellement trouver le statut qui me dit que les calculs sont termine c'est pending, ou xldone? C,est pas évident tout ça

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Application.AfterCalculate, événement
    L'événement AfterCalculate se produit une fois que l'activité d'actualisation en attente (synchrone et asynchrone) est totalement terminée, ainsi que toutes les actions de calcul qui en découlent.
    Informations sur la version
    Version ajoutée : Excel 2007

    Syntaxe

    expression.AfterCalculate

    expression Variable qui représente un objet Application.

    Remarques


    Cet événement se produit lorsque le calcul est terminé et qu'il ne reste plus de requêtes en attente. Ces deux conditions doivent être remplies pour que cet événement se produise. Il peut être déclenché même s'il n'y a pas de données de feuille dans le classeur, par exemple lorsque le calcul se termine pour le classeur entier et qu'aucune requête n'est en cours.

    Les développeurs de compléments utilisent l'événement AfterCalculate pour savoir à quel moment toutes les données du classeur ont été complètement mises à jour par d'éventuelles requêtes et/ou calculs en cours.

    Cet événement se produit après tous les événements Worksheet.Calculate, Chart.Calculate, AfterRefresh et SheetChange. Il se produit en dernier, après toutes les opérations d'actualisation et de calcul, et une fois que Application.CalculationState a pris la valeur xlDone.
    PS : c'est un événement d'application, donc non présent par défaut. Il faut préparer le classeur pour les avoir.
    Fait F9 sur ce classeur
    eric
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2007] Mise à jour des données par formulaire vba Excel
    Par rattus34 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 16/02/2012, 12h48
  2. [AC-2007] Mise à jour des références par VBA
    Par jpg75014 dans le forum VBA Access
    Réponses: 2
    Dernier message: 16/06/2011, 17h31
  3. [A-03][VBA] mise à jour des champs
    Par mattvin dans le forum IHM
    Réponses: 4
    Dernier message: 16/02/2009, 10h04
  4. [VBA-Excel]Mise à jour des liaisons powerpoint
    Par Mando dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2006, 22h51
  5. [VBA-W] Désactivé la mise à jour des champs
    Par Mut dans le forum VBA Word
    Réponses: 4
    Dernier message: 04/12/2006, 11h04

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