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 :

export table access vers excel qui stoppe au niveau d'une table


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 245
    Points
    245
    Par défaut export table access vers excel qui stoppe au niveau d'une table
    Bonjour,

    Grâce au tuto "Communication entre access et excell" qui décrit la fonction "TransfertExcelAutomation", je transfére les tables de ma base dans différents fichiers excell (1 par table, chacun portant le nom de la table).
    Ca fonctionne bien sauf que la fonction s'arrête après avoir exporté les 7 premières tables. Le déboggeur mets en fluo la ligne suivante :

    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
        For Each oTbl In oDb.TableDefs
             Set rec = oDb.OpenRecordset(oTbl.Name, dbOpenSnapshot)
             
             'Initialisations
             Set xlApp = CreateObject("Excel.Application")
             Set xlBook = xlApp.Workbooks.ADD
            
             'Ajouter une feuille de calcul
             Set xlSheet = xlBook.Worksheets.ADD
             xlSheet.Name = CStr(oTbl.Name)
            
             ' le titre
             '  écriture dans la cellule de ligne 1 et de colonne 1
             xlSheet.Cells(1, 1) = "Export de la table Access" & oTbl.Name
            
             
             ' les entetes
             '  .Fields(Index).Name renvoie le nom du champ
             For J = 0 To rec.Fields.Count - 1
                 xlSheet.Cells(2, J + 1) = rec.Fields(J).Name
                 ' Nous appliquons des enrichissements de format aux cellules
                 With xlSheet.Cells(2, J + 1)
                     .Interior.ColorIndex = 15
                     .Interior.Pattern = xlSolid
                     .Borders(xlEdgeBottom).LineStyle = xlContinuous
                     .Borders(xlEdgeBottom).weight = xlThin
                     .Borders(xlEdgeBottom).ColorIndex = xlAutomatic
                     .HorizontalAlignment = xlCenter
                 End With
             Next J
             
             ' recopie des données à partir de la ligne 3
             I = 3
             Do While Not rec.EOF
                 For J = 0 To rec.Fields.Count - 1
                     ' .Fields(Index).Type renvoie le type du champ
                     '   si c'est un Texte (dbText) nous insérons "'" pour
                     '   qu'il soit reconnu par Excel comme du Texte
                     If rec.Fields(J).Type = dbText Then
                         xlSheet.Cells(I, J + 1) = "'" & rec.Fields(J)
                     Else
                         xlSheet.Cells(I, J + 1) = rec.Fields(J)
                     End If
                 Next J
                 I = I + 1
                 rec.MoveNext
             Loop
    
             ' code de fermeture et libération des objets
             Chemin = Application.CurrentProject.Path & "\BackupBD\" & oTbl.Name & "-" & Format(Now, "mm-dd-yyyy") & ".xls"
             
             xlBook.SaveAs Chemin
             xlApp.Quit
             rec.Close
        Next oTbl
    Je ne vois pas pourquoi ça stoppe ainsi. il n'y a pas de variables particulières dans cette table.

    En regardant le contenu de différentes varaibles, je vois que CStr(oTbl.Name) contient le nom MSysAccessObjects (une table temporaire je suppose)

    Quant à moi je suppose que si ça bloque c'ets que le format de l'info contenu dans les champs access ne doit pas être compatible avec ceux d'excell....

    Une idée ou une piste de solution?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 079
    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 : 12 079
    Points : 24 721
    Points
    24 721
    Par défaut
    Bonjour,

    Non il s'agit d'une table système les tables temporaires en principe ne sont pas visibles facilement mais elles commencent par ~Temp.

    Tu ne dois prendre que les tables utilisateurs (toutes sauf celles qui commencent par Msys)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not otable.name like "Msys*"
    ou vérifier que l'attribut n'est pas système.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if not otable.attributes = (oTable.Attributes And dbSystemObject) then
    Cordialement,

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 245
    Points
    245
    Par défaut
    Merci Loufab pour ta réponse rapide.
    A priori, cette table système est cachée car je ne la vois pas dans ma fenetre de table. Elle a été créée quand????
    Mais je vais rajouter la ligne de code et on va voir ce que ça donne demain.
    Bonne soirée et Merci!!!

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 245
    Points
    245
    Par défaut
    Bonjour!

    La première solution que tu proposes fonctionne impec!
    Pour la seconde, il me ressort la table MSys...

    Un grand merci!!

    Mais...

    J'ai donc essayer d'améliorer le code pour n'exporter qua les infos relatives à un numéro NumCD donné (donc faire une chaine de requête et l'introduire dans le recordset) mais il se plante au niveau de la ligne créant le recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             stSQL = "Select * from " & oTbl.Name & " where NumCD = " & idctrt
             Set rec = oDb.OpenRecordset(stSQL, dbOpenSnapshot)
    le message affiché est : erreur 3061 : Too few parameters, expected 1

    Je vois pas ce que je fais qui plante.....

  5. #5
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 079
    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 : 12 079
    Points : 24 721
    Points
    24 721
    Par défaut
    Les tables systemes sont toujours cachées et elles sont créées à la création du fichier.

    Vu la simplicité de la requete je te suggère de faire un debug de la ligne.

    Mettre un point d'arrêt sur la ligne et interroger la variable contenant l'instruction sql.

    Il y a un tuto sur le sujet (Requete dans VBA)

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 245
    Points
    245
    Par défaut
    Merci Loufab.

    J'ai toujours pas trouvé pourquoi ça ta seconde proposition ne fonctionnait pas mais en utilisant la première ça me va dans un premier temps.

    Merci encore!!!

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 079
    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 : 12 079
    Points : 24 721
    Points
    24 721
    Par défaut
    C'est un Or au lieu du And.

  8. #8
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 366
    Points : 245
    Points
    245
    Par défaut
    Ok ça roule!

    Merci!

    A bientôt

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

Discussions similaires

  1. Exporter une table Access vers Excel via un Bouton (VBA)
    Par moni27b dans le forum VBA Access
    Réponses: 7
    Dernier message: 16/04/2015, 12h25
  2. Réponses: 1
    Dernier message: 17/11/2010, 20h42
  3. Exporter une table Access vers Excel dans le dossier courant
    Par piflechien73 dans le forum VBA Access
    Réponses: 2
    Dernier message: 03/11/2009, 18h17
  4. Problème pour exporter une table Access vers Excel
    Par PAULOM dans le forum Access
    Réponses: 22
    Dernier message: 02/05/2006, 14h42
  5. Envoyer les colones d'une table access vers excel
    Par mapoupou dans le forum Access
    Réponses: 5
    Dernier message: 05/11/2005, 19h42

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