Ouvrir un fichier sans recalcul des formules

Bonjour,

J'ouvre un fichier via un code VBA :

    Workbooks.Open Filename:= _
        "C:\.......\fichierX.xlsx" _
        , UpdateLinks:=0, ReadOnly:=True

Les formules de ce fichier X ne fonctionnent que lorsqu'un autre fichier source est également ouvert.

Pour éviter d'avoir à ouvrir encore un fichier, il faut l'ouvrir sans le recalcul des formules.

Dans mon fichier de travail, j'ai des formules indirect qui vont chercher des données dans fichier X donc il faut que le recalcul auto soit activé.

Question : est-il possible de désactiver le recalcul des formules pour un fichier spécifique ?

D'autres solutions existent pour ce problème ?

Mon autre idée est de tout mettre en formules manuelles (Application.Calculation = xlManual), d'aller copier les données dans fichier X, de les coller dans mon fichier de travail (collage spécial valeur), de fermer fichier X et enfin de remettre le calcul auto (Application.Calculation = xlAutomatic).

Merci.

EDIT : solution ici

Bonjour,

Mettre le calcul manuel dans Excel, c'est pour tous les fichiers Excel

Si tu enregistres ton fichier en mettant le calcul à manuel et sans recalcul à l'enregistrement tu n'auras pas de problème

Seul inconvénient c'est qu'il faut qu'il soit le seul ouvert ou en premier

A+

Bonjour,

pourquoi 0 pour UpdateLinks ?

XlUpdateLinks a 3 valeurs qui sont :

xlUpdateLinksAlways : 3

xlUpdateLinksNever :2

xlUpdateLinksUserSetting : 1

Essaie avec xlUpdateLinksNever

eric

testé avec ActiveWorkbook.UpdateLinks = xlUpdateLinksNever : c'est ok.

Je te laisse tester dans le .Open

Bonjour, Bonjour,

Merci et merci pour vos réponses

@BrunoM45 désolé mais je ne pense que cela fonctionnera. Le fichier source est ouvert pour récupérer des données mais mon fichier de travail doit rester ouvert. Ceci n'est que la première étape du boulot.

@eriiic le coup du "UpdateLinks:=0", c'est juste que j'ai raisonné en binaire lol

J'ai donc testé avec 2 mais ça me copie des #VALEUR!

Pour le moment, ma solution consiste à :

1/ Couper le recalcul auto

2/ Ouvrir le fichier source

3/ Copier les données dont j'ai besoin

4/ Collage spécial valeur dans mon fichier de travail

5/ Fermer le fichier source

6/ Remettre le calcul auto

EDIT : tu le mets où exactement ton "ActiveWorkbook.UpdateLinks = xlUpdateLinksNever" ?

Bonjour,

Il faut le faire dans le ficher avec les formules que tu ouvres puis l'enregistrer.

Tu pourrais le mettre dans Workbook_BeforeClose, et mettre un bouton pour rétablir en normal.

Mais tu as des techniques pour lire des cellules d'un classeur fermé. Faire une petite recherche google.

eric

Bonjour,

Il faut le faire dans le ficher avec les formules que tu ouvres puis l'enregistrer.

Tu pourrais le mettre dans Workbook_BeforeClose, et mettre un bouton pour rétablir en normal.

Alors ça c'est pas possible malheureusement car je ne suis pas le gestionnaire du fichier source.

Mais tu as des techniques pour lire des cellules d'un classeur fermé. Faire une petite recherche google.

eric

Je vais faire mes recherches (pas avec Google par contre )

Merci.

En fait non, je retire ce que j'ai dit.

Vu que j'utilise des variables dans les formules de mon fichier de travail (via Indirect), je dois ouvrir le fichier source pour qu'elles fonctionnent.

Mais tu en as potentiellement combien à lire dans ton fichier fermé ?

Si ce n'est pas des milliers tu te crées une feuille cachée avec des liens directs vers ces cellules.

J'ai 208 cellules à aller chercher exactement.

Je ne peux pas faire de lien direct car le fichier source change chaque mois de nom.

Ah ben si tu ne mets pas du tien aussi...

Si tu ne peux pas modifier le fichier original il ne te reste plus qu'à utiliser la lecture dans fichier fermé.

Si ton indirect() trouve la bonne cellule aucune raison de ne pouvoir le faire par une macro.

eric

Si ton indirect() trouve la bonne cellule aucune raison de ne pouvoir le faire par une macro.

Si, mes connaissances

Je n'ai jamais fait d'indirect avec du code vba mais il ne faut jamais dire jamais.

La seule chose, c'est de voir si des recherches valent le coup. Quel est le gain par rapport à ce que j'ai déjà ?...

Bah, pour 200 cellules tu n'auras jamais de gain notable sauf si ton fichier est vraiment trop long à s'ouvrir.

Si suspendre le calcul auto te va, continue ainsi.

J'ai fait un essai pour voir ce que je pouvais faire.

Pour le moment, j'ai trouvé un code mais je n'arrive pas à l'adapter. Seulement une partie des lignes se copient comme il faut.

Pour remplir les 200 cellules, ça ne prend que 3 secondes.

J'ai trouvé du simple et efficace, comme j'aime

Cheminsource = "C:\.........\"
Fichiersource = "fichier.xlsx"
Range("G4:S22").FormulaArray = _
"='" & Cheminsource & "[" & Fichiersource & "]nom_onglet'!G10:S28"

G4:S22 correspond à ma plage dans mon fichier de travail

G10:S28 correspond à la plage du fichier source où je copie les données

Cheminsource et fichiersource contiennent des variables. Exemple :

Fichiersource = "Détail" & Range("W1") & ".xlsx"

Pour info, si on n'a pas de variable, cela peut se faire sans macro :

1/ Sélectionner la plage de cellules qui contiendra les données source. Exemple A1:S30

2/ En A1, saisir la formule du type :

='C:\.............\[nom_fichier.xlsx]onglet'!A1:S30

3/ Valider avec CTRL + MAJ + Entrée

4/ Matrice créée.

Rechercher des sujets similaires à "ouvrir fichier recalcul formules"