Actualiser données externes VBA Excel MySQL

Fermé
marmotte - 7 juil. 2008 à 14:25
 WRJ - 5 sept. 2011 à 17:21
Bonjour,

je voudrais faire les actions suivantes dans une macro Excel:
- actualiser les données externes qui se trouvent dans une feuille du classeur (les données elles-mêmes se trouvent dans une base MySql)
- une fois les données actualiser, faire des stats et pleins de trucs de ce genre

Mon problème est que je n'arrive pas à forcer l'actualisation des données. Lorsque je fais F9 dans la feuille des données, elles sont bien actualisées.
Par contre, quand j'utilise la fonction thisWorkbook.RefreshAll (je n'ai pas trouvé de fonction ne permettant de ne rafraichir qu'une page), j'ai un message d'erreur "Erreur d'exécution 1004: Erreur générale ODBC".

Donc mes questions:
- y'a-t'il moyen de ne demander le rafrachissisment que d'une feuille du classeur ? Avec quel fonction ?
- quelle est la fonction VB qui serait équivalente à l'utilisation de la touche F9 ?
- pourquoi la fonction thisWorkbook.RefreshAll me renvoie une erreur ? Comment avoir plus de détail sur quel est le problème ?

Merci de votre aide

1 réponse

Salut la ligne de code équivalente et :
activeworkbook.refreshall
tu l'ajoutes dans la page de code workbook comme suit :
Private Sub Workbook_Open()
ActiveWorkbook.RefreshAll
End Sub

bon courage
4
Bonjour BJ

J'ai essayé ta fonctione et ça marche nickel.
Ensuite, j'ai mis l'appel ActiveWorkbiik.RefereshAll directement dans la procédure qui est appelé quand je clicke sur le bouton et ça fait exactement ce que je veux.
Mes problèmes de connexion ODBC ont aussi disparus ... je ne sais pas pourquoi (j'ai un peu trifouillé dans les sources de données), mais je ne vais pas m'en plaindre :-)

Merci de ton aide

Marmotte
0
Wackolas > Marmotte
25 mars 2009 à 10:39
Tant mieux si ça a marché.
Pour rafraichir une seule page d'un classeur, c'esy ActiveWorksheet.Calculate
0
Pour calculer Exemple (touche F9)
-tous les classeurs ouverts :
Application.Calculate (ou simplement Calculate)
-une feuille de calcul particulière :
Worksheets(1).Calculate
-une plage déterminée :
Worksheets(1).Rows(2).Calculate

-Pour raffarichir une table externe dont le résultat est restitué dans une feuille nommée y:

worksheet("y").range("A2").select
Selection.Listobject.QueryTable.Refresh

'dans ce cas ci, "A2" correspond a une cellule de la zone de résultat s'il s'agit d'une connexion a une source de données externes ou à une cellule qui appartient à l'espace du tableau croisé dynamique si c'en est un.

si la zone de donnée est range ("A1: C3000 ") et que votre curseur est dans D2(en dehors de la zone), vous aurez un méssage d'erreur.

-Pour raffraichir toutes les tables externes dans un classeur ou dans une feuille
ActiveWorkbook.RefreshAll


La différence entre chacune de ces démarches est que quand vous souhaitez juste actualiser les données d'une feuille ou une formule écrite dans une zone, vous gagnerez du temps en utilisant la fonction appropriée au lieu de faire un refrehall ou application.calculate.
L'utilisation inappropriée de l'une ou l'autre de ces fonctions induit des erreurs d'exécution.
0