Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
945 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Actualiser Classeur Excel

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBS] Actualiser Classeur Excel

n°1985742
Lars331
Posté le 20-04-2010 à 09:32:57  profilanswer
 

Bonjour,
 
Voilà je rencontre un petit problème dans mon code. Je dois actualiser des classeurs excel alors j'arrive à actualiser une feuille mais je cherche une fonction qui me permettrait d'actualiser toutes les feuilles du classeur. vue que j'ai une centaine de classeur et que chacun à des feuilles avec des noms différents j'aimerais pouvoir balayer  tous mes répertoires, ouvrir les classeurs excel et actualiser toutes les feuilles. Voici mon code qui permet d'actualiser une feuille spécifique:
 
Set objExcel = CreateObject ("Excel.Application" )
objExcel.Visible = false
 
Set objWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR.xls" )  
objWorkbook.Sheets("Données" ).QueryTables(1).Refresh
 
WScript.Sleep 10000
 
objWorkbook.Saveas "C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR2.xls"  
objworkbook.close
 
msgbox "fin"
 
Si quelqu'un a une idée je suis preneur.
Merci
Greg

mood
Publicité
Posté le 20-04-2010 à 09:32:57  profilanswer
 

n°1985749
Deamon
Posté le 20-04-2010 à 09:37:56  profilanswer
 

Il me semble que tu peux parcourir les différentes feuilles d'un classeur avec leur indice au lieu de leur nom.

n°1985759
Lars331
Posté le 20-04-2010 à 09:55:04  profilanswer
 

J'ai testé en mettant Sheets(1) mais j'ai toujours comme message d'erreur indice en dehors de la plage.

n°1985775
Deamon
Posté le 20-04-2010 à 10:23:50  profilanswer
 
n°1985785
Lars331
Posté le 20-04-2010 à 10:34:37  profilanswer
 

Merci Daemon, le code que tu m'as donné fonctionne bien pour afficher le nom des tables mais quand j'utilise la fonction Refresh j'ai toujours le message d'erreur indice en dehors de la plage.

n°1985791
Deamon
Posté le 20-04-2010 à 10:40:43  profilanswer
 

Colle ton code ici pour voir avec les balises [code]

n°1985797
Lars331
Posté le 20-04-2010 à 10:45:50  profilanswer
 

Code :
  1. Set objExcel = CreateObject ("Excel.Application" )
  2. objExcel.Visible = false
  3. Set objWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR.xls" )
  4. WS_Count = objWorkbook.Worksheets.Count
  5. For I = 1 To WS_Count
  6. objWorkbook.Worksheets(I).QueryTables(1).Refresh
  7. WScript.Sleep 10000
  8. Next
  9. msgbox "Fin"


 
 

n°1985801
Deamon
Posté le 20-04-2010 à 10:53:17  profilanswer
 

T'es sur que l'erreur vient pas du QueryTables(1) ?

n°1985805
Lars331
Posté le 20-04-2010 à 10:57:40  profilanswer
 

Dans le code tout en haut ça marche bien mais en effet c'est possible, je vais faire des essais.

n°1985821
Lars331
Posté le 20-04-2010 à 11:24:43  profilanswer
 

En fait le problème ce produit sur les classeurs excel qui ont 2 feuilles ou plus et dont l'une d'elle est un tableau croisé dynamique. J'ai essayé sur un classeur avec une feuille et là c'est ok. Ce que je dois faire c'est, dans un premier temps, mettre à jour une, ou plusieurs, feuilles de données puis dans un second temps le tableau croisé dynamique et le problème c'est, visiblement, lui.

mood
Publicité
Posté le 20-04-2010 à 11:24:43  profilanswer
 

n°1985935
Lars331
Posté le 20-04-2010 à 14:41:03  profilanswer
 

Merci DAEMON de ton aide j'ai fini par trouver. Il me faut utiliser la fonction REFRESHALL qui actualise toutes les feuilles. Il me faut la lancer 2 fois car le 1er coup elle met à jour les feuilles de données et ensuite les tableaux croisés dynamiques. Voici le code si ça intéresse quelqu'un:

Code :
  1. Set objExcel = CreateObject ("Excel.Application" )
  2. objExcel.Visible = false
  3. Set objWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR.xls" )
  4. objWorkbook.RefreshAll
  5. WScript.Sleep 10000
  6. objWorkbook.Saveas "C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR2.xls"
  7. objworkbook.close
  8. Set objWorkbook = objExcel.Workbooks.Open("C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR2.xls" )
  9. objWorkbook.RefreshAll
  10. WScript.Sleep 10000
  11. objWorkbook.Saveas "C:\Documents and Settings\RIEUX\Bureau\MAJ EXCEL\PLX_STATISTIQUE FOURNISSEUR3.xls"
  12. objworkbook.close
  13. msgbox "Fin"


 
Merci
Greg


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBS] Actualiser Classeur Excel

 

Sujets relatifs
Rechercher valeur dans excel avec vbs[ VBS ] Récupérer une variable dans une page html
Exporter une feuille dans un autre classeur selon le nom de la feuille[Excel] Je ne m'en sort plus avec les formules de conditions
[VBA] remplir une colonne excel avec une variable tableauVBS -> bat avec argument
[VBS] simuler alt + tabMacro pour formater un fichier texte ou excel [Résolu]
Recherche d'une fonction sous excel "=SI(A5..."Excel: Macro pour créer un TCD sur une autre feuille?
Plus de sujets relatifs à : [VBS] Actualiser Classeur Excel


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR