Excel Calcule manuel/sur ordre de feuilles

Vince-C Messages postés 36 Date d'inscription   Statut Membre Dernière intervention   -  
 Audre -
Bonjour,

Sur un fichier Excel j'ai plusieurs onglets dont 3 remplis de sommeprod. Etant donnée le nombre très important de sommeprod cela fait ramer le fichier. N'ayant pas besoin de mettre a jours ces 3 onglets a chaque ouverture du fichier je souhaiterais savoir si il est possible de lancer le calcule sur ordre uniquement pour les 3 onglet et de garder les autres en calcule automatique.

Merci par avance !

Vincent-C

3 réponses

  1. Kaname63 Messages postés 9 Statut Membre 2
     
    J'ai eu le cas d'un excel dépassant les 100 Mo... Et il fallait une minute de calcul. Donc pour passer outre le calcul automatique j'ai coder quelques lignes en VBA.

    Dans le Workbook il faut que tu es au moins cela....
    ---------------------------------------------------------------------------------------------------

    Private Sub Workbook_Open()
    Application.Calculation = xlManual
    End Sub

    ----------------------------------------------------------------------------------------------------

    Dans chaque feuille tu dois mettre ce code...
    ----------------------------------------------------------------------------------------------------

    Private Sub Worksheet_Activate()
    ActiveSheet.Calculate
    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Calculate
    End Sub

    Private Sub Worksheet_Deactivate()
    ActiveSheet.Calculate
    End Sub

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
    End Sub

    -----------------------------------------------------------------------------------------------------

    Cela te permettra de calculter à chaque changement dans la feuille

    Après tu peux faire en sorte que certaines feuilles ordonnent les calculs à d'autres.
    -----------------------------------------------------------------------------------------------------

    Private Sub Worksheet_Calculate()
    Feuil1.Calculate
    End Sub

    -----------------------------------------------------------------------------------------------------

    A partir de cela tu peux même définir un ordre de calcul ... (si dessous)
    -----------------------------------------------------------------------------------------------------

    Private Sub Worksheet_Calculate()
    Feuil1.Calculate
    Feuil7.Calculate
    Feuil10.Calculate
    Feuil8.Calculate
    Feuil25.Calculate
    End Sub

    -----------------------------------------------------------------------------------------------------

    Après cela dépend comment tu veux ordonner le calcul commandé des feuilles

    Par un bouton, par le calcul d'une autre feuille.... A toi de voir.

    De plus tous le code si dessus te permettra de faire en sorte que seule la feuille active (celle que tu utilise) soit calculée, et/ou de calculer les feuilles dans l'ordre que tu le désire et quand tu le désire.

    Attention, le code sera à adapter à ton fichier

    En espérant t'avoir aider un peu

    Kaname63
    Windows Seven & XP // Office 2003 & 2007 // VB.net // Builder C++
    2
    1. Audre
       
      Bonjour,

      Tout d'abord merci Kaname pour le codage c'est beaucoup plus rapide maintenant!!

      Par contre impossible de copier/coller d'une feuille à une autre... sauriez vous quel code je dois ajouter pour y parvenir svp?

      Merci beaucoup
      0
  2. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    En effet, Calcul manuel/automatique est une option du Classeur, pas une option de la Feuille de calcul.
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir,

    Autre possibilité : tu gardes les formules sur 1 seule ligne et tu fais un copier-collage spécial valeur sur les autres lignes.
    Le jour où tu fais des modif nécessitant une mise à jour, tu reconstitues les formules en recopiant la ligne conservée.

    eric
    0