Rafraichir feuille Excel [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 27 janvier 2009
Statut
Membre
Dernière intervention
29 janvier 2009
-
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
-
Bonjour,

Je sais que le pb a déjà été posté, mais j'ai vraiment un soucis de rafraichissement de feuille Excel.
En fait, dans la feuille qui pose problème, je n'ai que des formules "=LireData(LIGNE();COLONNE())", et cette fonction VBA va rechercher en auto des données dans d'autres feuilles qui contiennent des Tab croisés dynamiques liés à des requetes SQL
Qd je lance les fonctions 'Calculate' ou 'RefreshAll', il met bien à jour les requetes mais pas mon feuillet principal, car il ne détecte aucune modif
J'ai beau faire 'calculer maintenant' ou meme creer un bouton 'rafraichir', mais rien n'y fait.

Merci de vos idées,

5 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Salut
Et quel est ton problème ?
Est-ce parce qu'il ne te demande pas de sauvegarder avant de quitter ?
Recherche parmi tes macros s'il y aurait le mot "dirty" : en le passant à False, la feuille est considérée comme propre, c'est à dire sans besoin d'enregistrement.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
De la même façon que tu as testé Calculate et RefreshAll, as-tu essayé SheetCalculate et CalculateFull ?

Amicalement
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
J'ai une idée, qui vaut ce qu'elle vaut, pour forcer Excel à recalculer une cellule même si les données sous-jacentes n'ont pas changé : c'est de changer sa formule.

Par exemple, si tu exécutes :

maFormule = Range("A1").Formula
Range("A1").Formula = ""
Range("A1").Formula = maFormule

Excel est bien obligé d' "exécuter" la formule pour mettre à jour la cellule A, que les données sous-jacentes aient changé ou non, tu crois pas ?

Donc en généralisant cette méthode à toutes les cellules comportant une formule par une boucle For Each, ça devrait tirer Excel de sa torpeur.

On peut pousser le raisonnement plus loin : partant de l'hypothèse que l'accès en écriture à la propriété Formula est suffisant pour qu'Excel rafraîchisse le contenu de la cellule, le code précédent pourrait se résumer à :

Range("A1").Formula = Range("A1").Formula

Amicalement
Messages postés
2
Date d'inscription
mardi 27 janvier 2009
Statut
Membre
Dernière intervention
29 janvier 2009

Salut,

Merci pour vos réponses,
Bonne idée OroHena, j'y avait pensé mais pas encore exploité avant d'avoir vos avis.
Mais c'est Jack qui m'a mis sur la piste. En effet, comme mon feuillet est considéré comme 'Propre', Excel ne le recalcule pas, meme avec la fonction 'Calculate'.
J'appelle la méthode 'Dirty ' qui 'salit' la feuille et lui permet de se recalculer.

Grand merci jack et mention particulière à Orohena pour les bons conseils

A bientot
Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
La méthode Dirty, je n'y aurais jamais pensé. C'est bon à savoir pour recalculer un Worksheet.

Bravo encore une fois, Jack . Si tu sais pas où passer tes prochaines vacances, je connais une petite île avec plein de jolies demoiselles mais, hélas, sans Internet .

Amicalement