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

  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

  9. #9
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    pour gerer des "lancements décalés", j'utilise souvent Application.OnTime

    https://msdn.microsoft.com/fr-fr/lib.../ff196165.aspx

    L'idee ici serait d'avoir un lancement de la macro tant que ton calculationstate n'est pas done
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  10. #10
    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 jpcheck
    Je plussoie (et un pouce vert).

  11. #11
    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
    Parti en vacances tamtam ?

  12. #12
    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
    Bonjour,

    Non pas en vacance mais j'aimerais bien lol

    ta fonction ne fonctionne pas j'ai fait quelques recherches mais elle n'est pas vraiment fonctionnel d'après les dires que j'ai vu sur des sites anglais.

  13. #13
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Désolé, mais on a déjà vu des réactions un peu plus précises:

    ta fonction ne fonctionne pas j'ai fait quelques recherches mais elle n'est pas vraiment fonctionnel d'après les dires que j'ai vu sur des sites anglais.

  14. #14
    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
    Que veux tu que je dise de plus ? On ne trouve aucun exemple d'application

  15. #15
    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,

    Comment ça elle ne fonctionne pas ???
    J'avais testé sur des gros paquets de sommeprod pour avoir un temps de calcul suffisant et ça fonctionnait correctement, pas eu de soucis.
    Tu peux le reproduire avec le fichier que j'ai déposé, c'est un exemple d'application. Sur un fichier non préparé ça ne fonctionnera pas c'est sûr...
    Maintenant si certains ont constaté des soucis... (?)
    eric

  16. #16
    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
    D'accord je me suis peut etre resigné trop vite, mais peux tu me donner un exemple ?

  17. #17
    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
    Ben c'est le même fichier, avec des formules et un bouton si tu veux.
    J'ai ajouté qq ligne pour ne pas recevoir tous les événements mais seulement ceux d'un calcul lancé par macro à un endroit précis du code, ce qui semble s'approcher de ton besoin (mettre b_supervise=True avant la modif qui lance un calcul sur feuille).

    Seul bémol constaté mais à mon avis normal : en cas de modif de Sub App_AfterCalculate()
    il faut enregistrer, fermer et rouvrir le fichier pour être sûr qu'il les prenne en compte.
    Tu as bien le msgbox à chaque clic-sur le bouton test ou non ?
    Chez moi (W7 excel 2010) ça fonctionne. Elle apparait bien à la disparition de l'utilisation des processeurs dans la barre d'état.
    Fichiers attachés Fichiers attachés

  18. #18
    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
    Bonjour,

    je n'arrive pas à l'ouvrir sur le site le fichier est inexistant :/
    si tu peux le reposter stp merci .

  19. #19
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    M'est avis qu'ils ont fini par comprendre que s'il faut bloquer les fichiers de macros sur le forum Word, il faut aussi bloquer les fichiers de macros sur le forum Excel. Zippez mes frères, zippez en cœur.

  20. #20
    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
    Rhooo, ils sont embêtants...
    En zip alors
    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