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

Access Discussion :

Formatage tableau excel apres export requete en vba


Sujet :

Access

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Formatage tableau excel apres export requete en vba
    Hello,

    J'essaie tant bien que mal d'apprendre les rudiments d'access et du vba pour me faciliter la vie au boulot.

    J'ai écris un code qui en gros, lance trois requètes réalisées avec le qbe, exporte le résultat de ces requètes dans un tableau excel avec un onglet par requete.

    Jusque là tout va bien mais je bute sur le souci suivant : j'ai écrit un code pour formater les trois onglets excell de la même manière. le code de formatage est dans une public sub. Tout fonctionne nickel la première fois mais si je relance le traitement, j'ai l'erreur suivante :

    'erreur 1004 ' ' la méthode range de l'objet _global a échoué.

    LE CODE DE DEPART :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    Private Sub exportExcel_Click()
    ' Export des indicateurs commandes vers excel avec un onglet spécifique par indicateur
    ' Fichier excel créé avec indication dans le nom du fichier de la fourchette de dates choisies
    '
        Dim xlApp As Excel.Application
        Dim xlsheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim i As Integer
        Dim qry1 As String
        Dim qry2 As String
        Dim qry3 As String
        Dim emplacement As String
        Dim nomfichinit As String
        Dim nomfich As String
        Dim onglet As String
     
        emplacement = "c:\bases access\Dev\test resultats\"
        nomfichinit = "entrées commandes_" & datedeb & "_" & datefin
        nomfich = nomfichinit
        i = 2
            FileSearch.lookin = emplacement
            FileSearch.Filename = nomfich
            FileSearch.filetype = msoFileTypeAllFiles
            FileSearch.Searchsubfolders = False
            While FileSearch.Execute
                nomfich = nomfichinit & "v_" & i
                i = i + 1
                FileSearch.Filename = nomfich
             Wend
             If nomfich <> nomfichinit Then
             MsgBox "Le fichier existait déja et a été recréé avec l'extension :     " & Right(nomfich, 3)
             End If
     
        'exécution requetes et export dans onglets excel
     
        qry1 = "qry_entcdes"
        qry2 = "qry_entcdeslig"
        qry3 = "qry_entcdesclts"
        Set xlApp = CreateObject("Excel.Application")
     
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, qry1, (emplacement & nomfich), True, "cdes fermes"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, qry2, (emplacement & nomfich), True, "cdes lig"
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel97, qry3, (emplacement & nomfich), True, "cdes par clients"
        xlApp.Visible = True
        xlApp.Workbooks.Open (emplacement & nomfich)
     
        Set xlBook = xlApp.Workbooks.Open(emplacement & nomfich)
        onglet = "cdes_fermes"
        Set xlsheet = xlBook.sheets(onglet)
        xlsheet.Activate
        Call formatex
     
     
        onglet = "cdes_lig"
        Set xlsheet = xlBook.sheets(onglet)
        xlsheet.Activate
        Call formatex
     
     
        onglet = "cdes_par_clients"
        Set xlsheet = xlBook.sheets(onglet)
        xlsheet.Activate
        Call formatex
     
        Set xlApp = Nothing
        Set xlBook = Nothing
        Set xlsheet = Nothing
     
     
     
    End Sub

    La public sub de formatage du tableau excel:

    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
     
    Public Sub formatex()
     
    Range("A1").Select
        Selection.CurrentRegion.Select
        With Selection.Font
            .Name = "Arial"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        Range("A1").Select
        Range("A1").EntireRow.SpecialCells(xlCellTypeConstants).Select
     
             With Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            Selection.Font.Bold = True
            With Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
            End With
            Cells.Select
            Cells.EntireColumn.AutoFit
     
    End Sub

    Le code pour le formatage a été dégrossi sous Excel. Quelque chose m'échappe surement, tout cela est encore un peu neuf pour moi.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    je crois que dans la sub formatex() il manque un objet WorkSheet pour la méthode Range.
    Range("A1") doit fonctionner dans Excel car il doit prendre la feuille active, mais depuis Access ça ne fonctionne pas.

    Essaie en déclarant la sub comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub formatex(sht As Excel.Worksheet)
    Appelle la sub avec
    dans la sub formatex() remplace
    par
    A+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci d'avoir pris le temps de regarder

    J'ai tenté ta solution mais cela renvoit exactement la même erreur. Le code marche une fois sur deux (au sens propre).
    Je lance, ca marche, je relance, ca ne marche plus etc....

  4. #4
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    OK, mais ça plante plus sur Range.
    Bon en fait le problème vient du fait de ce que le code crée à chaque fois un Excel.Application.
    A la deuxième exécution il y a deux exemplaires de EXCEL.EXE en mémoire.
    Ca va donc planter sur Selection et Cells, car il n'y a pas d'objet devant (Application.Selection par exemple).

    1. tu peux ouvrir Excel de cette manière pour éviter qu'ils se multiplient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        On Error Resume Next
        Set xlApp = GetObject(, "Excel.Application")
        On Error GoTo 0
        If xlApp Is Nothing Then
           Set xlApp = CreateObject("Excel.Application")
           xlApp.Visible = True
        End If
    2. modifs pour formatex.
    J'ai mis un objet application devant Selection et un objet worksheet devant Cells.
    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
    Public Sub formatex(sht As Excel.Worksheet)
    Dim xlApp As Excel.Application
     
    ' On récupère l'objet application dont dépend sht
    Set xlApp = sht.Parent.Parent
    sht.Range("A1").Select
        xlApp.Selection.CurrentRegion.Select
        With xlApp.Selection.Font
            .Name = "Arial"
            .FontStyle = "Normal"
            .Size = 10
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ColorIndex = xlAutomatic
        End With
        sht.Range("A1").Select
        sht.Range("A1").EntireRow.SpecialCells(xlCellTypeConstants).Select
     
             With xlApp.Selection
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlBottom
                .WrapText = False
                .Orientation = 0
                .AddIndent = False
                .IndentLevel = 0
                .ShrinkToFit = False
                .ReadingOrder = xlContext
                .MergeCells = False
            End With
            xlApp.Selection.Font.Bold = True
            With xlApp.Selection.Interior
                .ColorIndex = 15
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
            End With
            sht.Cells.Select
            sht.Cells.EntireColumn.AutoFit
     
    End Sub
    Bon courage

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Banco !

    Ta solution fonctionne parfaitement et m'a de plus permis de comprendre un peu mieux la logique de tout cela.

    Merci infiniment pour ton aide et ta patience

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

Discussions similaires

  1. Des nombres différents dans Excel après export
    Par Marin d'Eau Douce dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/01/2012, 13h21
  2. [AC-2000] Mettre à jour formulaire après modification requete par VBA
    Par CRC dans le forum VBA Access
    Réponses: 1
    Dernier message: 13/07/2009, 10h03
  3. Réponses: 5
    Dernier message: 27/02/2007, 20h55
  4. Ouverture excel après exportation
    Par Yves2507 dans le forum Access
    Réponses: 11
    Dernier message: 09/09/2006, 15h25
  5. largeur colonne excel après export
    Par scully2501 dans le forum Access
    Réponses: 6
    Dernier message: 18/06/2005, 10h52

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