VBA: problème pour sauvegarder un fichier après un refresh

Daem

XLDnaute Nouveau
bonjour tout le monde,
alors voila mon problème en résumé: j'ai une feuille Excel qui contient une table lié à une base de données Access. Dans ma macro je voudrais faire un refresh (Actualiser tout), pour mettre à jour les données automatiquement bien sur, et ensuite sauvegarder ce fichier dans un autre dossier et sous un autre nom. voici le code que j'ai utilisé :

Code:
Sub test()

ActiveWorkbook.RefreshAll

ActiveWorkbook.SaveAs Filename:="C:\test1", FileFormat:= _
xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub



quand je lance la macro il m'affiche une erreur comme quoi il peut pas sauvegarder parce que les données ne sont pas encore actualisées (il passe à l'instruction de sauvegarde alors que l'actualisation n'est pas finie d'après ce que j'ai compris).

voila, pouvez m'aider a régler ce problème svp ?
Merci d'avance
Cordialement Daem
 

Dranreb

XLDnaute Barbatruc
Re : VBA: problème pour sauvegarder un fichier après un refresh

Bonsoir.
Je ne sais si c'est l'essence du problème, mais peut être une puce à l'oreille dans l'aide :
Les objets dont la propriété BackgroundQuery a la valeur True sont actualisés en arrière-plan.
ce qui pourrait impliquer que l'exécution se poursuive.
Essayez: On Error Resume Next: Do: Err.Clear: ActiveWorkbook.SaveAs etc.: DoEvents: Loop Until Err = 0
Cordialement.
 

Daem

XLDnaute Nouveau
Re : VBA: problème pour sauvegarder un fichier après un refresh

Bonsoir,
Merci pour votre réponse mais ça n'a pas marché chez moi :(
j'ai un peu cherché concernant la propriété BackgroundQuery, et j'ai testé ça:

Sub test()

Sheets(1).Select
Range("A1").Select
Selection.QueryTable.Refresh BackgroundQuery:=False


End Sub


il me sort une erreur d'éxecution 1004: erreur définie par l'application ou par l'objet

je désespère, ce petit problème me bloque complètement pour la suite :(
PS: je suis pas expert en VBA hein, je débute un peu en fait ^^

Cordialement.
 

Dranreb

XLDnaute Barbatruc
Re : VBA: problème pour sauvegarder un fichier après un refresh

Mettez un espion sur Sheets(1).Range("A1").QueryTable pour voir si l'objet est défini
Mais votre idée de départ n'est peur être pas mauvaise mais elle impliquerait de mettre False les propriétés BackGroundQuery des QueryTables. Là vous ne le faites pas.
expression.Refresh(BackgroundQuery)

expression Obligatoire. Expression qui renvoie un des objets ci-dessus.

BackgroundQuery Argument de type Variant facultatif. Utilisé uniquement avec les tables de requêtes basées sur les résultats d'une requête SQL. Affectez-lui la valeurTrue pour renvoyer le contrôle à la procédure dès que la connexion à la base de données est établie et que la requête est soumise (la requête est mise à jour en arrière plan). Affectez-lui la valeur False pour ne renvoyer le contrôle à la procédure qu'une fois que toutes les données ont été récupérées dans la feuille de calcul. Si vous ne spécifiez pas cet argument, le paramétrage de la propriété BackgroundQuery détermine le mode de requête.
VB:
Dim QT as QueryTable
For Each QT in Worksheets(1).QueryTables
    QT.BackgroundQuery = False
   Next QT
 
Dernière édition:

Daem

XLDnaute Nouveau
Re : VBA: problème pour sauvegarder un fichier après un refresh

Bonjour,
Merci pour votre réponse.
le code que vous avez cité n'a malheureusement pas marché chez moi, par contre j'ai trouvé cette solution et ça marche nickel apparement:

ActiveWorkbook.Worksheets("Analysis").Select
Range("f13").Select
Selection.ListObject.QueryTable.BackgroundQuery = False

ThisWorkbook.RefreshAll



Merci beaucoup
 

Dranreb

XLDnaute Barbatruc
Re : VBA: problème pour sauvegarder un fichier après un refresh

Bonjour.
Curieux, je n'ai ListObject nulle part. Ni dans les propriétés ni dans les méthodes. Que dit l'aide chez vous à propos de ça ?
Mais si ça marche tous ces selects sont sans doute inutile. vous devriez pouvoir écrire :
VB:
ActiveWorkbook.Worksheets("Analysis").[F13].ListObject.QueryTable.BackgroundQuery = False
Ou si le classeur actif est celui qui porte la macro et que le CodeName de la feuille "Analysis" c'est Feuil3 par exemple :
VB:
Feuil3.[F13].ListObject.QueryTable.BackgroundQuery = False
Enfin jusqu'à ListObject au moins. Feuil3.[F13] est une expression Range valide.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 509
Messages
2 089 144
Membres
104 050
dernier inscrit
Pepito93100