Rafraichir feuille Excel

Résolu
fredAC Messages postés 2 Date d'inscription mardi 27 janvier 2009 Statut Membre Dernière intervention 29 janvier 2009 - 27 janv. 2009 à 08:49
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 29 janv. 2009 à 01:58
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

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
27 janv. 2009 à 20:09
De la même façon que tu as testé Calculate et RefreshAll, as-tu essayé SheetCalculate et CalculateFull ?

Amicalement
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
27 janv. 2009 à 20:41
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
0
fredAC Messages postés 2 Date d'inscription mardi 27 janvier 2009 Statut Membre Dernière intervention 29 janvier 2009
29 janv. 2009 à 00:21
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
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 janv. 2009 à 01:58
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
27 janv. 2009 à 09:12
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)
-1
Rejoignez-nous