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 :

Automation Excel : mise en forme


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut Automation Excel : mise en forme
    Bonjour à tous,

    J'exporte le résultat de requetes Access vers Excel et je souhaite faire une petite mise en forme des fichiers créés.

    Pour le moment j'ai bricolé le code ci-dessous.

    Mon problème est sur le centrage des valeurs dans la colonne B:B en ligne 36 qui bloque et là je ne sais plus trop quoi faire.

    Quelqu'un pour un petit coup de pouce ?

    Merci d'avance


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Function exportationexcel()
     
    NOMFICH = "FICHIER.xls"
    CHEMINRESULT = Application.CurrentProject.Path & "\RESULTAT\"
     
     
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "REQUETE99", CHEMINRESULT & NOMFICH & "", True, "ESSAIS99"
     
    'ouverture du fichier créé et application de la macro de mise en forme
    Dim xlApp As Object
    Dim xlSheet As Object
     
     
        Set xlApp = CreateObject("Excel.Application")
        xlApp.Visible = True
        xlApp.workbooks.Open (CHEMINRESULT & NOMFICH & "")
     
        'selection de toute la feuille
        xlApp.cells.Select
     
        'choix de la police, de la taille, mise en gas de la première ligne
        xlApp.Selection.Font.Name = "ARIAL"
        xlApp.Selection.Font.Size = 8
        xlApp.rows("1:1").Select
        xlApp.Selection.Font.Bold = True
     
        'mise en forme automatique des largeurs de colonne
     
        xlApp.cells.EntireColumn.AutoFit
        xlApp.cells(1, 1).Select
     
        'vérouillage des volets à partir de la ligne2
        xlApp.Range("A2").Select
        xlApp.ActiveWindow.FreezePanes = True
     
    'centrage des valeurs dans la colonne B
        xlApp.columns("B:B").Select
        xlApp.HorizontalAlignment = xlCenter
     
     
        'sauvegarde du classeur
        xlApp.ActiveWorkbook.Save
     
    End Function

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'centrage des valeurs dans la colonne B
        xlApp.columns("B:B").HorizontalAlignment = xlCenter
    Ce n'est pas très propre puisqu'on espère que c'est la bonne feuille qui est active, mais cela devrait déjà aller mieux.

    Remarque : dans la partie qui marche déjà, les .Select :
    • ne sont pas indispensables
    • allourdissent le code
    • pénalisent l'intellisense
    • ralentit l'exécution.

    Que des avantages, quoi!

    J'ai noté aussi que tu déclares les objets de façon bien générique. Es-tu un farouche partisan du late binding?
    Tu ne te sers pas d'xlSheet, alors que c'était une bonne intention.

    Bon d'accord : tu poses une question et j'en profite pour faire des remarques. Mais c'est pour t'aider, pas pour t'embêter.

    Cordialement,

    PGZ

    Par exemple

  3. #3
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Bonjour et merci pour ta réponse

    Oui, je sais, je ne suis qu'un petit bricoleur en VBA !

    J'ai toujours un soucis :
    "Erreur d'execution 1004"
    "Impossible de définir la propriété HorizontalAlignment de la classe Range"

    Suis trop nul !

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu as modifié ton code avec les indications que je t'ai données?

    A+

    PGZ

  5. #5
    Membre averti
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Par défaut
    Oui, j'ai repris ta ligne de code.
    A priori il faudrait déclarer une contante xlCenter =-4108

    ??

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par sweetmercy Voir le message
    Oui, j'ai repris ta ligne de code.
    A priori il faudrait déclarer une contante xlCenter =-4108

    ??
    En effet, le fait que tu ne coches pas la référence Excel, fait que les constantes Excel n'existe pas dans ton code.

    En général dans ce cas, je fais un module où je déclares toutes les constantes dont j'ai besoin.

    Philippe

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Veux-tu essayer ce code ? Mais tu dois cocher la référence XL.
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Function fExportationExcel() As Boolean
    Dim xlApp As Excel.Application, xlWkb As exel.Workbook, xlSheet As Excel.Worksheet, xlRange As Excel.Range
    Dim sNomFich As String, sCheminResult As String
     
    On Error GoTo lblErreur
     
    sNomFich = "FICHIER.xls"
    sCheminResult = Application.CurrentProject.Path & "\RESULTAT\"
     
     
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, "REQUETE99", sCheminResult & sNomFich & "", True
     
    'ouverture du fichier créé et application de la macro de mise en forme
     
     
        Set xlApp = New Excel.Application
        xlApp.Visible = True
        Set xlWkb = xlApp.Workbooks.Open(sCheminResult & sNomFich & "")
        Set xlSheet = xlWkb.Worksheets(1)
        Set xlRange = xlSheet.UsedRange
     
        'choix de la police, de la taille, mise en gas de la première ligne
        xlRange.Font.Name = "ARIAL"
        xlRange.Font.Size = 8
        xlSheet.Rows("1:1").Font.Bold = True
     
        'mise en forme automatique des largeurs de colonne
     
        xlRange.EntireColumn.AutoFit
     
        'vérouillage des volets à partir de la ligne2
        xlSheet.Range("A2").Select
        xlApp.ActiveWindow.FreezePanes = True
     
    'centrage des valeurs dans la colonne B
        xlSheet.Columns("B:B").HorizontalAlignment = xlCenter
     
     
        'sauvegarde du classeur
        xlWkb.Save
     
    fExportationExcel = True
     
    lblSortie:
        Set xlRange = Nothing
        Set xlSheet = Nothing
        Set xlSheet = Nothing
        Set xlWkb = Nothing
        Set xlApp = Nothing
        Exit Function
     
    lblErreur:
        fExportationExcel = False
        GoTo lblSortie
     
    End Function
    Pour voir...

    J'en ai fait une fonction booléenne qui renvoie Vrai si elle s'est exécutée sans erreur. Pour tester, tu a intérêt à faire au pas à pas car le code ne s'arrête plus sur erreur, puisqu'il y a un embryon de gestion d'erreur.


    Dans la méthode TransferSpreadSheet, j'ai enlevé l'argument Etendue. La doc dit
    ...
    Lorsque vous effectuez une exportation vers une feuille de calcul, vous devez laisser cet argument vierge...
    Pour info, tu aurais pu utiliser une autre méthode, sans TransferSpreadSheet :
    • tu crées un jeu d'enregistrement sur la table ou requête
    • tu crées un classeur XL
    • Tu copies les données dans la première feuille avec la méthode CopyFromRecordset.


    Cordialement,

    PGZ

Discussions similaires

  1. [Excel] Mise en forme
    Par marsupilami34 dans le forum Excel
    Réponses: 2
    Dernier message: 04/08/2006, 14h18
  2. [VBA-Excel] Mise en forme d'un classeur
    Par snooopy007 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/07/2006, 19h37
  3. vb6 & excel : mise en forme d'une cellule
    Par couscoussier dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/03/2006, 19h12
  4. [VBA][Excel] mise en forme conditionnelle
    Par titflocon dans le forum Access
    Réponses: 9
    Dernier message: 19/12/2005, 11h13
  5. [ACCESS-EXCEL] Mise en forme des tableaux
    Par mpascolo dans le forum Access
    Réponses: 4
    Dernier message: 20/10/2005, 17h03

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