IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Macros appliquées à plusieurs fichiers Excel => fonctionne uniquement sur le premier


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Macros appliquées à plusieurs fichiers Excel => fonctionne uniquement sur le premier
    Bonjour,
    Une boucle me créee des fichiers Excel remplis à l'aide de résultats de requêtes Access. Aucun problème.
    La même boucle parcourt ensuite les fichiers, et applique du code pour le mettre en forme : texte en gras, changement de nom et taille des colonnes etc... Le code s'applique bien sur le premier fichier. Le fichier Excel se ferme. Mais le code ne s'applique pas sur les fichiers suivants...
    Et si je ne fais pas fermer le fichier Excel, le code s'applique toujours sur le même fichier, bien que les autres soient ouverts aussi...

    Comment préciser sur quel fichier travailler ?

    Comment régler ce problème ?
    Merci d'avance

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    Salut,

    montre nous ton code, qu'on puisse t'aider...

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    While Not res.EOF
            [...]
        DoCmd.TransferSpreadsheet acExport, 5, "R-Sortie", "S:\Sorties\" & Nom.Value & ".xls", False, ""
        GoTo MiseEnForme
        Suite:
    Wend
     
    MiseEnForme:
        Dim objExcel As Object
        Set objExcel = CreateObject("Excel.Application")
        objExcel.Workbooks.Open ("S:\Sorties\" & Nom.Value & ".xls")
        objExcel.Visible = True
        objExcel.UserControl = False
     
        [tout le code de la macro]
        GoTo Suite
    J'ai simplifié au max :-)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 503
    Points
    503
    Par défaut
    Utilise les balises code (raccourci #) pour plus de lisibilité

    D'où vient Nom.Value??

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Nom.Value vient de mon code masqué [...] plus haut. Le problème ne vient pas de là car sa valeur est bien affectée. J'ai fais le test avec un debug pas à pas...
    Je pense que le problème est simplement de préciser sur quel fichier le code doit s'appliquer. Et visiblement le fait d'ouvrir le fichier ne suffit pas....

    Any idea ?
    Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai tenté de fermer Excel avec Workbooks.Close mais le problème reste le même : après s'être appliquée sur le premier fichier, le second s'ouvre, et la macro ne s'applique pas...

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Peut-être que tu devrais utiliser (si ce n'est pas fait) aussi les objets Workbook et worksheet d'Excel (déclare, précise où ils vont chercher l'objet, ...) et ensuite effectuer tes modifs sur le Worksheet crée. (Ne pas oublier la librairie de référence)

  8. #8
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    J'ai essayé mais soit je n'ai pas les bonnes fonctions soit elles sont inefficaces...

  9. #9
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 131
    Points : 129
    Points
    129
    Par défaut
    Pour commencer, tu devrais mettre ta mise en forme Excel dans une procédure à part (c'est moyen les Goto à ma connaissance).
    Ensuite soit sûr qu'à la fin de chaque appel de cette procédure tous les objets crées soient fermés(.close) et détruits( = nothing) dans la procédure même.
    sans oublier de créer des objets Workbook et Worksheet mais pas en ouvrant directement avec "objExcel.Workbooks.Open".

  10. #10
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    et si tu inclues le bloc "MiseEnForme" dans la boucle While ?

  11. #11
    Futur Membre du Club
    Inscrit en
    Août 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Une magnifique solution servie sur un plateau par Microsoft :
    http://support.microsoft.com/default.aspx?kbid=178510
    Il n'y paraît pas comme ça mais ça règle effectivement mon problème... Car en fait je ne fermais pas Excel correctement et je suppose donc que la référence envers mon 1er document n'était pas "supprimée"...

    Si vous voulez ouvrir un fichier de manière propre, utilisez le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet
        Set appExcel = CreateObject("Excel.Application")
        Set wbExcel = appExcel.Workbooks.Open("S:\fichier.xls")
        Set wsExcel = wbExcel.Worksheets(1)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD-2007] Macro appliquée à plusieurs fichiers simultanément
    Par Ysae68 dans le forum VBA Word
    Réponses: 3
    Dernier message: 21/04/2012, 11h01
  2. [XL-2003] Créer une macro pour plusieurs fichiers excel
    Par bocki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/06/2009, 22h53
  3. Excécuter Macro dans plusieurs fichiers Excel
    Par mattwarend dans le forum Macros et VBA Excel
    Réponses: 26
    Dernier message: 24/10/2008, 12h06
  4. Réponses: 9
    Dernier message: 10/05/2007, 10h56
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo