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 :

Exportation Access vers Excel : Erreur 462 [AC-2002]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Exportation Access vers Excel : Erreur 462
    Bonjour à tous,

    Voilà, je m'arrache les cheveux (encore une fois) sur une erreur que j'ai lorsque je fais une exportation de requête de Access vers une feuille Excel. Voici mon code :

    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    Function TransfertExcelAutomation()
     
        Dim qd As QueryDef
        Dim SQL As String
        Dim val_export As Long
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
        Dim I As Long, J As Long
     
        Dim t, l As Long
        Dim Obj As OLEObject
        Dim rec As Recordset
        Dim exist As Recordset
        Dim rec_next As Double
        Dim nb_enre As Long
        Dim RetVal As Variant
     
        ExisteTable ("chgmt_cable") 'vérifie l'existance de la requête
     
            SQL = "SELECT mes_champs FROM ma_requete "
     
        Set qd = CurrentDb.CreateQueryDef("requete_tempo", SQL) 'Crée la requete temporaire
     
        File_path = EnregistrerUnFichier(Me.hwnd, "Enregistrer fichier sous", "changement_liaison.xls", "C:\") ' permet d'enregistrer un nouveau fichier Excel et de mettre son chemin dans File_path
        If File_path <> "" Then
     
        DoCmd.OutputTo acOutputQuery, "requete_tempo", acSpreadsheetTypeExcel9, File_path, False 'L'ouvre sous excel
     
        Set rec = CurrentDb.OpenRecordset("requete_tempo", dbOpenSnapshot)
     
     
        'Initialisations
        Set xlApp = CreateObject("Excel.Application")
        Set xlBook = xlApp.Workbooks.Open(File_path)
     
        'Ajouter une feuille de calcul
        Set xlSheet = xlBook.Worksheets(1)
     
        ' les entetes
        For J = 0 To rec.Fields.Count - 1
            ' Nous appliquons des enrichissements de format aux cellules
            With xlSheet.Cells(1, J + 1)
                .Interior.ColorIndex = 8
                .Interior.Pattern = xlSolid
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).Weight = xlThick
                .Borders(xlEdgeBottom).ColorIndex = 3
                .HorizontalAlignment = xlCenter
            End With
     
        Next J
     
                'ERREUR ICI''''''''''''''''''''''''''''''''''''''''''''''''''''
     
                xlBook.Activate
                xlBook.Windows(1).SplitRow = 1
                xlBook.Windows(1).FreezePanes = True
     
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
           ' recopie des données à partir de la ligne 3
        I = 2
     
        nb_enre = rec.RecordCount + 1
     
        Do While Not (I = nb_enre)
     
            If (rec_next <> Null Or rec(2) <> "Null") Then
     
                    rec.MoveNext
                    rec_next = rec(2).value
                    rec.MovePrevious
     
               If (rec_next <> rec(2).value) Then
                    'For J = 0 To rec.Fields.Count - 1
                    xlSheet.Rows(I).Borders(xlEdgeBottom).Weight = xlThick
                    'Next J
                End If
            End If
     
     
            xlSheet.Activate
            xlSheet.Cells(I, 18).Select
            t = ActiveCell.Top
            l = ActiveCell.Left
     
            If chk_budget.value = True Then
                Set Obj = xlBook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, _
                       DisplayAsIcon:=False, Left:=l + 30, Top:=t + 2, Width:=10, Height:=10) 'Créer une checkbox
                Obj.name = "Check" & I
            End If
     
            I = I + 1
            rec.MoveNext
       Loop
     
        ' code de fermeture et libération des objets
        'xlBook.Application.Visible = True
        'xlBook.Save
     
        xlApp.ActiveWorkbook.Save
        xlApp.Application.Quit
     
        RetVal = Shell("Taskkill /im Excel.exe /f", 0) 'Supprime toutes les tâches Excel
     
        rec.Close
        'Set rec = Nothing
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
     
        End If
     
        Set qd = Nothing
        DoCmd.DeleteObject acQuery, "requete_tempo" 'La supprime
     
    End Function
    Tout monde code fonctionne correctement lors de la première exécution, mais lorsque j'éxecute une seconde fois le même code directement après, j'ai cette erreur : "Le serveur distant n'existe pas ou n'est pas disponible" (erreur 462). Lors d'un deboggage pas à pas, j'ai remarqué que l'erreur venait lorsque j'execute un Freezepanes.... J'ai déjà essayé plein d'écriture différentes pour celui-ci, mais je ne comprend vraiment pas

    Un deuxième petit "bug" intervient lors de la création des "checkbox" sous Excel (OLEObjects....). Ca fonctionne bien quand j'en crée une 100 aine, mais ma requête fais 3000 lignes, et ca plante à environ 1000, je ne comprend pas... (Erreur : "Error automation")

    Voilà, j'espère avoir été assez explicite ! Merci d'avance !

    Assyris

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,

    Pour le freezePane, j'ai mis dans un de mes codes (qui marche ) ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        With appXL
               '...
               If NbColFigées > 0 Then
                .Sheets(1).cells(mcstFirstRow, NbColFigées + 1).Activate
                .ActiveWindow.FreezePanes = True
     
               End If
               '...
        end With
    Concernant les cases à cocher, même si tu trouves une solution pour dépasser les 1000 lignes cela risque d'être long non?

    Dans des cas similaires, j'ai pour ma part opté pour mettre des 'X' dans les cellules, puis de gérer le clic dans ces cellules pour reproduire le comportement d'une case à cocher...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Quel réponse rapide, incroyable

    Alors j'ai essayé ton bout de code dans mon programme, et effectivement il fonctionne bien à la première execution, tout comme le mien, mais pas non plus à la seconde... L'erreur persiste... Je me demande si cela ne vient pas d'une variable que je n'aurais pas vidée. Du style xlSheet... Mais je ne vois pas d'où ca vient car il me semble que mon code est correct...

    Pour les cases à cocher, l'idée du X n'est pas bête, mais puis-je te demander comment as-tu fais pour gérer ce clic comme interpretation d'une case à cocher ? As-tu un bout de code dans tes archives ?

    Pour la vitesse, effectivement... C'est plutôt très lent

    Merci beaucoup pour ta réponse !

    Assyris

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Rahhhhh saloperie ! J'ai trouvé d'où ca venait.... Ca ne vient pas du Freezepanes....

    Il fallait que je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t = ActiveCell.Top
            l = ActiveCell.Left
    Par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    t = xlApp.ActiveCell.Top
            l = xlApp.ActiveCell.Left
    .... Quel boulet je suis. Pourtant j'ai relu mon code une 20 aine de fois depuis ce matin !

    Bref, j'aimerais quand même savoir comment tu avais fait pour les cases à cocher, ca m'interesse beaucoup

    Merci d'avance !

    Assyris

  5. #5
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bref, j'aimerais quand même savoir comment tu avais fait pour les cases à cocher, ca m'interesse beaucoup
    Je ne me souviens plus trop... de mémoire, j'ai mis du code dans le fichier XL me servant de modèle.
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai trouvé un petit code tout simple pour gérer le clic sur mes cellules Excel pour qu'elles agissent comme une checkbox. Cependant, c'est une fonction en VBA :

    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
        Dim F1 As Range
     
        Set F1 = Application.Intersect(Target, Range("R2:R500"))
     
        If (F1 Is Nothing) Then
        Else
     
            ActiveSheet.Unprotect "bb"
     
            If ActiveCell.Value = "X" Then
                ActiveCell.Value = "O"
            Else
                ActiveCell.Value = "X"
            End If
            ActiveSheet.Protect "bb"
     
        End If
    End Sub
    J'aimerais donc que ce code VBA soit inseré directement dans mon fichier Excel lors de sa création. Est-ce possible d'insérer du code VBA lors d'une exportation de données depuis Access ? je n'ai trouvé aucune documentation sur Internet ne parlant de cela.... J'espère que c'est faisable !

    Merci encore mout pour ton aide !

    Assyris

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 11 988
    Points : 24 541
    Points
    24 541
    Par défaut
    Bonjour,

    C'est une nouvelle question purement Excel. Mieux vaut la poser dans le bon forum.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Ben tout mon code est fait en VBA depuis Access et non depuis Excel. Je n'utilise donc qu'une seul commande en VBA Excel que j'aimerais justement automatiser depuis Access. Ma question est donc pûrement relative à Access, non ? Mon but est justement de n'avoir rien à programmer dans Excel

    Assyris

  9. #9
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonjour,


    Comme évoqué précédement, je crois me souvenir que je mettais le code dans le modèle XL que j'utilisais lors de l'export depuis Access. Je ne me souviens plus pourquoi mais je faisais comme suit, en pilotant Excel en VBA sous Access:
    1. Export brut dans un fichier Excel temporaire
    2. Ouverture de mon fichier Excel servant de modèle
    3. Copier/Coller des données vers le fichier de modèle
    4. Suppression du fichier temporaire
    5. Enregistrer / Sous pour obtenir le fichier final
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    11 988
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 11 988
    Points : 24 541
    Points
    24 541
    Par défaut
    Citation Envoyé par Assyris Voir le message
    Bonjour,

    Ben tout mon code est fait en VBA depuis Access et non depuis Excel. Je n'utilise donc qu'une seul commande en VBA Excel que j'aimerais justement automatiser depuis Access. Ma question est donc pûrement relative à Access, non ? Mon but est justement de n'avoir rien à programmer dans Excel

    Assyris
    Ta demande est de pouvoir intégrer ton code dans un fichier Excel. C'est donc que tu vas t'adresser au modèle Excel pour l'insérer, tu ne vas pas l'insérer dans un module ACCESS !

    Donc tu vas utiliser l'automation.

    L'automation c'est piloter une application supportant VBA à partir d'une autre application supportant VBA.

    Pour piloter une application tu vas utiliser les fonctions et le modèle de cette application. Donc c'est du VBA Excel que tu vas utiliser même si tu le fais au travers d'ACCESS.

    Dans ton code premier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Dim xlApp As Excel.Application
        Dim xlSheet As Excel.Worksheet
        Dim xlBook As Excel.Workbook
    Tu fais bien appel à Excel. Sans cette déclaration et la référence à la bibliothèque VBA Excel tu pourrais toujours faire des références à des objets Excel (Sheet, Cells...) ACCESS te repondrais systèmatiquement et invariablement , "Comprend pas !".

    Espérant t'avoir ouvert les yeux sur l'automation.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2009
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci à vous deux pour ces eclaircissement,

    je n'avais effectivement pas vu les choses de cette manière en programmant du VBA sur Access, je pensais ne faire que du VBA Access, alors qu'en déclarant des variables de types Excel, je faisais en réalité du VBA Excel

    Bref, je suis au clair la dessus.

    Mon problème étant résolu, je peux mettre le petit truc "Résolu" sur mon post !

    A bientôt,

    Assyris

  12. #12
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Assyris Voir le message
    Mon problème étant résolu, je peux mettre le petit truc "Résolu" sur mon post !
    Tu as l'honneur et le privilège de cliquer toi même comme un grand sur le bouton en bas


    Edit: Je ferai mieux de regarder avant de sortir des âneries ... tu as semble-t-il déjà cliqué dessus.

    A+
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

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

Discussions similaires

  1. exportation access vers excel
    Par osia1 dans le forum VBA Access
    Réponses: 44
    Dernier message: 18/04/2008, 16h40
  2. Export ACCESS vers EXCEL
    Par BAYRAL dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/11/2007, 16h13
  3. Réponses: 5
    Dernier message: 15/07/2007, 23h49
  4. Export Access vers Excel nb de champs variable
    Par SylvainJ dans le forum Access
    Réponses: 4
    Dernier message: 05/03/2007, 14h55
  5. export access vers excel en asp
    Par oniric dans le forum ASP
    Réponses: 9
    Dernier message: 24/03/2006, 15h21

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