Calcul automatique

Résolu
Bonjour,

En fait, pour vous expliquer, dans la feuil1 de mon classeur, j'ai un tableau de 3000 lignes de A à AN.
Vous comprendrez donc que lorsque je met le calcul automatique ça rame pas mal à chaque ouverture.

J'ai des formules dans les colonnes AB à AN.

Je voudrais savoir si c'est possible qu'à chaque ouverture de mon fichier excel , il y ait un calcul automatique des formules dans ces colonnes; et une fois le calcul fait, le calcul automatique soit déconnecté.

Merci de votre aide
Configuration: Windows Vista
Internet Explorer 7.0

43 réponses

Résumé de la discussion

Le fil porte sur un fichier Excel avec un tableau de 3000 lignes (A à AN) et cherche à activer le calcul automatique des colonnes AB à AN pour réduire les ralentissements. Plusieurs intervenants suggèrent une solution par macro VBA consistant à basculer le calcul sur Manuel au démarrage, lancer l’évaluation des cellules et remettre le calcul sur Automatique ensuite. Des échanges évoquent des tests avec des fichiers et des messages d’erreur relatifs à des références de colonnes et à des compléments (par ex. ATPVBAEN.XLA), incitant à adapter le code selon la plage de calcul.

Bobot (l’IA à votre service)
  1. pas de souci; si pas de problème d'ici lundi, c'est que tout est parfait :) bon w.e à toi!
    0
    1. Contributeur
      Ben on aura fini par y arriver... ;-)
      Mais contrôle bien, c'est plus facile à corriger quand c'est encore frais en tête
      eric
      0
      1. Bon ben éoute j'ai regardé ce matin, ça m'a l'air parfait tout ça !!!

        Je refais 2-3 essais et te tiendrai informé :)

        En tout cas merci beaucoup
        0
        1. Contributeur
          Oufff, ça y est, c'était encore cette $%!?ç0!* de fonction ATPVBAEN.XLA!networkdays qui retournait une erreur en interprétant les dates comme américaines (dd/jj/yy).
          Bon là c'est je pense réglé pour elle, reste quand même qu'elle cachait peut-être d'autres erreurs (une autre est apparue ensuite...) Contrôle tous les calculs dans différents cas de figure.

          Je t'ai mis en commentaire 'Sheets("Menu").Select car la feuille n'existe pas et ça générait une erreur.
          Et j'ai modifié un peu tes couleurs pour m'y retrouver...
          http://www.cijoint.fr/cjlink.php?file=cj200810/cijpsaa36Z.xls

          eric
          0
          1. en fait quand j'entre une date dans F, avant modif; normalement il y a une valeur qui s'inscrit dans Z, AB, AD, AE, AK, AL et AM ; et quand j'entrait une date dans K il y avait une valeur qui s'inscrivait dans AA, AC, AF, AG, AH, AJ.

            Or maintenant lorsque j'entre une date en F il y a juste une valeur dans AB, AC, AD, AE, AK puis quand une met une date dans K il y a juste une valeur dans AC, AF, AG, AH...
            0
            1. Contributeur
              Par contre maintenant, les colonnes Z, AA, AL, AM,,AJ
              et ?
              Sois le plus précis possible, colonne par colonne
              0
              1. Bonjour,

                Donc j’ai essayé au travail, effectivement lorsque je valide les 2 USF, les lignes s’insèrent correctement.

                Par contre maintenant, les colonnes Z, AA, AL, AM,,AJ. Encore désolé de te déranger, c’est vraiment gentil tout ce que tu as fait pour moi !
                0
                1. Contributeur
                  Bonjour,

                  Dans le usf4 il fallait mettre :
                  Application.Worksheets("produits").Cells(ligne, 11) = CDate(TextBox11.Value)

                  De plus j'ai remplacé les dateent="" et les dateliv="" par =Null car la fonction ATPVBAEN.XLA!networkdays me générait des incompatibilités de type.
                  Et maintenant qu'il n'y a plus bcp de formules je pense que tu peux remettre le calcul automatique pour éviter les mauvaises surprises car je n'ai trouvé aucun .calculate dans ton projet.
                  http://www.cijoint.fr/cjlink.php?file=cj200810/cijKwWcYGS.xls

                  Bonne journée
                  eric
                  0
                  1. je pense que tu penses au code dans le Userfor8? mais le valeur est celle du calendar, et je ne sais pas comment le paramétrer différemment...
                    0
                    1. Contributeur
                      Bonsoir,

                      ce que je veux te dire c'est que l'erreur est dans TON code, lorsque tu inscris la dateliv dans une cellule.
                      Tu ecris un texte "18/08/08" et non pas une date 18/10/08.
                      Il faut mettre ....=cdate(ta_variable)

                      eric
                      0
                      1. Excuse moi de répondre seulement maintenant, je rentre seulement du travail.

                        En fait dans le fichier que je t'avais mis en pièce jointe, je n'ai pas changé le code que tu avais mis, donc je ne vois pas trop ce que tu veux me dire... désolé...
                        0
                        1. Contributeur
                          Tu m'as fait chercher avant de comprendre le pourquoi, faut tout faire en pas à pas pour avoir le message d'erreur...
                          Tu mets DateLiv en chaine de caractère et ce doit être une date pour Application.Run("ATPVBAEN.XLA!networkdays", DateEnt, DateLiv) - 1
                          Utilise cdate avant de l'inscrire (mais en te mefiant que souvent il forme une date au format anglais (mm/jj/aa) )
                          eric
                          0
                          1. Bonjour, alors j’ai bien regarder ta macro en faisant varier les dates, rien à redire, c’est parfait.

                            Par contre en la mettant sur mon programme complet, ça m’ennuie, il y a encore un bug.
                            En fait comme tu peux voir sur le fichier joint, quand tu cliques sur « Entrer un nouveau lot », il y a le Userform2 qui s’affiche comme dans l’ancien fichier, et lorsque la personne a terminé sont lot, elle va ensuite cliquer sur « Enregistrer un lot », là il y a le Userform8 qui s’affiche et s’est avec ce USF que la date de livraison s’enregistre. Mais lorsque je clique sur valider, il y a de nouveau le message d’erreur qui s’affiche.

                            En fait hier avant que tu fasses les modifications, le USF8 marchait bien et le USF2 plantait, maintenant c’est l’inverse. J’ai essayé 2-3 choses mais sans succès.

                            Une fois ce petit problème réglé, tout sera parfait et je te remercie vraiment de ton aide…

                            http://www.cijoint.fr/cjlink.php?file=cj200810/cij5GVqxc5.xls
                            0
                            1. ben écoute là ça m'a vraiment l'air bien.
                              Je regarde tout ça demain au travail et je te redonne des nouvelles.

                              Bonne soirée a toi et merci beaucoup!
                              0
                              1. Contributeur
                                oui, dans la dernière correction j'ai fait un copier/coller du code et le -1 avait sauté.
                                Mais ça n'enlève rien au fait que je compte tjs 1 pour un coli traité le même jour un samedi et qu'excel comptait 0 avant.
                                Correction de la correction ;-) :
                                http://www.cijoint.fr/cjlink.php?file=cj200810/cijZpDt5Qa.xls
                                0
                                1. Je vois ce que tu veux dire.

                                  Je viens de faire le test avec le fichier initial, formule , et par exemple si dans date d'entrée 10.10.08 et dans date de livraison 13.10.08 , dans temps de passage il y a 1.
                                  Par contre effectivement avec la macro maintenant au lieu de 1, j'ai 2 jours.

                                  Il n'y aurais vraiment pas possibilité de réussir pour qu'il n'y ait qu'un ? car je ne pense pas que ça aille pour mes stats lorsque je les présente a ma direction... MErci encore...
                                  0
                                  1. Contributeur
                                    PS: j'ai jeté un oeil à tes macros.
                                    Tu cherches à accelerer le traitement mais tu as une tempo qui te fais perdre 2s à chaque enregistrement. Juste pour pouvoir voir la barre de progression se remplir...
                                    0
                                    1. Contributeur
                                      re,

                                      Je me suis basé excel (hors vba), fonction nb.jours.ouvrés(), qui retourne déjà 1 si les 2 dates sont égales en jour de semaine, et 0 pour un jour de we. Mathématiquement il a raison, mais un jour de semaine compte plus qu'un jour de we... Entré et livré le même jour un samedi excel te disait 0, un lundi il te disait 1.
                                      Pour les stats est-ce meilleur ?
                                      La différence là c'est que c'est 1, semaine et we pour faire plus simple, mais dès une différence de 1 jour la fonction reprend le dessus. Je n'ai pas controlé mais théoriquement pour une livraison le samedi tu auras 1 le samedi, ensuite 0 le dimanche, puis 1 le lundi etc.
                                      Je ne connais pas tes jours de livraison et traitement possibles, si ça a une importance pour toi on peut calculer le jour pour mettre 0 ou 1 selon we ou semaine, toi seul sait ce qui est mieux.
                                      eric
                                      0
                                      1. je ne comprend pas trop ce que tu veux dire;

                                        En fait il n'y aura pas de lignes rentrées le w.e , seulement du lundi au vendredi. Mais il se peut qu'une ou deux lignes soit entrées le samedi.

                                        En fait si la date d'entrée et égale a la date de livraison et que jours.ouvrés =1 ça faussera mes tableau de stats.

                                        j'essais 2-3 choses...
                                        0
                                        1. Contributeur
                                          Bonsoir,

                                          Effectivement, c'est la fonction jours.ouvrés en vba qui retourne une erreur si les 2 dates sont égales.
                                          remplacer:
                                              If Cells(i, 38) = 1 Then
                                                  r = Application.Run("ATPVBAEN.XLA!networkdays", DateEnt, Date)
                                              Else
                                                  r = ""
                                              End If
                                              Cells(i, 39) = r
                                          par:
                                              If Cells(i, 38) = 1 Then
                                                  If DateEnt = Date Then
                                                      r = 1
                                                  Else
                                                      r = Application.Run("ATPVBAEN.XLA!networkdays", DateEnt, Date)
                                                  End If
                                              Else
                                                  r = ""
                                              End If    
                                              Cells(i, 39) = r

                                          et pareil pour les autres....

                                          Je force la valeur à 1 à moins que tu ne préfères vraiment que l'on teste le jour pour mettre 0 si la date entrée est un samedi ou un dimanche, du coup il y Z qui se rempli, je ne sais pas si c'est normal pour toi.
                                          http://www.cijoint.fr/cjlink.php?file=cj200810/cijZ3T05Ht.xls

                                          eric
                                          0
                                          • 1
                                          • 2
                                          • 3