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

Requêtes et SQL. Discussion :

Macro importer des données via ODBC


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 74
    Points : 53
    Points
    53
    Par défaut Macro importer des données via ODBC
    Bonjour à tous,

    J'importe 4 tables de la ligne 100 Sage. A chaque fois manuellement: " fichier, importer,source machine ect, etc." Y a t il un moyen pour automatiser tout cela. (Je ne souhaite pas lier les tables pour des raisons techniques). Une macro peut peut-être m'aider mais je n'y arrive pas .
    Merci pour votre aide.

    Fifi33160

  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 768
    Points
    7 768
    Par défaut
    Bonjour,

    voici un exemple de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim strConnODBC As String
    
    ' Ici, remplacer ODBC;... par une chaîne de connexion ODBC valide
    strConnODBC = "ODBC;..."
    
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
          strConnODBC, acTable, "NomTable", "NomTable"
    Pour trouver la chaîne de connexion ODBC:
    • Manuellement, au lieu de faire un import, lie une table.
      Disons qu'elle s'appelle T_LIEE.
    • Va dans l'éditeur Visual Basic (Alt+F11).
    • Ouvre la fenêtre d'exécution (Ctrl+G).
    • Dans la fenêtre d'exécution tape
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ? CurrentDb.TableDefs("T_LIEE").Connect
      et appuie sur la touche <Entrée>.
      La chaîne de connexion s'affiche sur la ligne suivante
    • Copie cette chaîne de caractères et colle la dans le code, en lieu et place de ODBC;....
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 74
    Points : 53
    Points
    53
    Par défaut ODBC
    Bonjour,

    Merci pour ta réponse voilà ce que ça donne mais, j'ai un message d'erreur du type : " erreur de compilation,instruction incorrecte à l'exterieur de la procédure "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Compare Database
    Dim strConnODBC As String
     
     
    strConnODBC = "ODBC;DSN=DP_SAGE100_SQL_Server;APP=Microsoft Office 2003;WSID=PC0905-6;DATABASE=FFSA;Trusted_Connection=Yes"
     
     
     
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
     
    strConnODBC , acTable, "dbo_ARTFOURNISS", "dbo_F_ARTICLE", " dbo_F_ARTSTOCK", "dbo_F_DOCLIGNE", "dbo_F_NOMENCLAT"
    Ou me suis je planté ?

    En tout cas merci pour ton aide

    Fifi

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 920
    Points : 4 828
    Points
    4 828
    Par défaut
    Bonjour,
    tu ne peux pas importer toutes tes tables d'un seul coup comme cela :
    regarde l'aide de TransferDatabase par F1 !


  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 74
    Points : 53
    Points
    53
    Par défaut ODBC
    Bonsoir tout le monde,

    Je pige pas quand je vais chercher mes tables manuellement je selectionne mes 4 tables et hop elle "rentre dans Acces les quatre en suivant". Je sèche.
    Pourtant LedZeppII sur son aide semblait dire que l'on pouvait !

    A vous lire gentleman !

    Fifi

  6. #6
    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 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Désolé.
    Je croyais que c'était évident que TransferDatabase ne travaillait que sur une table à la fois.

    Syntaxe donnée dans l'aide en ligne:
    DoCmd.TransferDatabase TypeTransfert, TypeBase, NomBase, TypeObjet, Source, Destination, StructureSeulement, EnregCodeConnexion

    Pour importer une table via ODBC
    TypeTransfert : acImport
    TypeBase : "Base de données ODBC"
    NomBase : chaîne de connexion ODBC sous la forme "ODBC;...."
    TypeObjet : acTable
    Source : nom de la table à importer "dbo.ARTFOURNISS"
    Destination : nom de la table dans Access "dbo_ARTFOURNISS"
    StructureSeulement et EnregCodeConnexion ne sont pas utilisés.

    Il te faut autant de TransferDatabase que tu as de tables à importer.
    Attention à différence de syntaxe dans le nom de la table entre Source et Destination.
    Dans ton cas la différence vient de ce que le SGBD depuis lequel tu importes est SQL Server.
    Dans SQL Server les noms des tables sont de la forme schema.NomTable
    Lorsqu'on importe à la main le point "." est remplacé par "_" car dans Access le point n'est pas autorisé.

    Voila en exemple à partir du code que tu as posté :
    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
    Function ImporterTables()
    Dim strConnODBC As String
    Dim strSce As String, strDest As String
    Dim arrTables() As Variant, i As Integer
     
    ' Chaîne de connexion ODBC
    strConnODBC = "ODBC;DSN=DP_SAGE100_SQL_Server;APP=Microsoft Office 2003;WSID=PC0905-6;DATABASE=FFSA;Trusted_Connection=Yes"
     
    ' Créer liste des tables à importer
    arrTables = Array("dbo.ARTFOURNISS", "dbo.F_ARTICLE", " dbo.F_ARTSTOCK", "dbo.F_DOCLIGNE", "dbo.F_NOMENCLAT")
     
    ' Boucler sur les tables et les importer une par une
    For i = LBound(arrTables) To UBound(arrTables)
        ' Table Source
        strSce = arrTables(i)
        ' Table Destination (Access)
        strDest = Replace(strSce, ".", "_")
        ' Supprimer table destination
        On Error Resume Next
        DoCmd.DeleteObject acTable, strDest
        On Error GoTo 0
        ' Réaliser l'importation
        DoCmd.TransferDatabase acImport, "Base de données ODBC", _
              strConnODBC, acTable, strSce, strDest
    Next
     
    End Function
    Tu peux virer cette partie si elle est déjà faite, quelque part ailleurs dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        ' Supprimer table destination
        On Error Resume Next
        DoCmd.DeleteObject acTable, strDest
        On Error GoTo 0
    Si tu utilises des macros (non VBA) tu peux appeler le code car c'est une fonction.
    L'action doit s'appeler ExécuterCode.

    A+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 74
    Points : 53
    Points
    53
    Par défaut ODBC
    Bonjour,

    Encore merci pour votre aide ! ! ! Il faut être balaise pour savoir que les " _ " doivent être remplacés par des " . " et en plus savoir les remplacer ! ! !

    Chapeau bas ! ! !

    J'ai tout bien fait comme il faut mais j'ai une erreur au debogage erreur d'execution " 3011"
    Voilà le module :

    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
    Option Compare Database
     
    Function ImporterTables()
    Dim strConnODBC As String
    Dim strSce As String, strDest As String
    Dim arrTables() As Variant, i As Integer
     
    ' Chaîne de connexion ODBC
    strConnODBC = "ODBC;DSN=DP_SAGE100_SQL_Server;APP=Microsoft Office 2003;WSID=PC0905-6;DATABASE=FFSA;Trusted_Connection=Yes"
     
    ' Créer liste des tables à importer
    arrTables = Array("dbo.F_ARTFOURNISS", " dbo.F_ARTSTOCK", "dbo.F_DOCLIGNE", "dbo.F_NOMENCLAT")
     
    ' Boucler sur les tables et les importer une par une
    For i = LBound(arrTables) To UBound(arrTables)
    ' Table Source
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
    ' Réaliser l'importation
     
    arrTables = Array("dbo.F_ARTFOURNISS")
    ' Créer liste des tables à importer
     
    arrTables = Array("dbo.F_ARTICLE")
     
    ' Table Source
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
    ' Réaliser l'importation
     
    arrTables = Array("dbo.F_ARTICLE")
    ' Créer liste des tables à importer
     
    arrTables = Array("dbo.F_ARTSTOCK")
     
    ' Table Source
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
    ' Réaliser l'importation
     
    arrTables = Array("dbo.F_ARTSTOCK")
    ' Créer liste des tables à importer
     
    arrTables = Array("dbo.F_DOCLIGNE")
     
    ' Table Source
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
    ' Réaliser l'importation
    arrTables = Array("dbo.F_DOCLIGNE")
    ' Créer liste des tables à importer
     
     
    arrTables = Array("dbo.F_NOMENCLAT")
     
    ' Table Source
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
    ' Réaliser l'importation
    arrTables = Array("dbo.F_NOMENCLAT")
    ' Créer liste des tables à importer
    ici c'est l'erreur:
     
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
    strConnODBC, acTable, strSce, strDest
     
    Next
    End Function
    J'ai du faire une grosse erreur pour vous ! pour moi c'est loin d'être évident !

    j'insère une image de ce que je suis en train de faire !

    Merci encore !
    Images attachées Images attachées

  8. #8
    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 768
    Points
    7 768
    Par défaut
    Bonsoir,

    Tu as bousillé tout 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
    Option Compare Database
     
    Function ImporterTables()
    Dim strConnODBC As String
    Dim strSce As String, strDest As String
    Dim arrTables() As Variant, i As Integer
     
    ' Chaîne de connexion ODBC
    strConnODBC = "ODBC;DSN=DP_SAGE100_SQL_Server;APP=Microsoft Office 2003;WSID=PC0905-6;DATABASE=FFSA;Trusted_Connection=Yes"
     
    ' Créer liste des tables à importer
    arrTables = Array("dbo.F_ARTFOURNISS", "dbo.F_ARTSTOCK", "dbo.F_DOCLIGNE", "dbo.F_NOMENCLAT")
     
    ' Boucler sur les tables et les importer une par une
    For i = LBound(arrTables) To UBound(arrTables)
        ' Table Source
        strSce = arrTables(i)
     
        ' Table Destination (Access)
        strDest = Replace(strSce, ".", "_")
     
        ' Supprimer table destination
        On Error Resume Next
        DoCmd.DeleteObject acTable, strDest
        On Error GoTo 0
     
        ' Réaliser l'importation
        DoCmd.TransferDatabase acImport, "Base de données ODBC", _
              strConnODBC, acTable, strSce, strDest
     
    Next
    End Function
    Explications:

    Ici on crée la liste des tables SQL Server à importer en créant un tableau arrTables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Créer liste des tables à importer
    arrTables = Array("dbo.F_ARTFOURNISS", "dbo.F_ARTSTOCK", "dbo.F_DOCLIGNE", "dbo.F_NOMENCLAT")
    Ensuite on boucle sur les éléments du tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ' Boucler sur les tables et les importer une par une
    For i = LBound(arrTables) To UBound(arrTables)
        ' ... traitements
    Next
    Détails des traitements pour chaque élément du tableau :


    Sans la boucle, ça donnerait ça (plus besoin du tableau)
    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
    Option Compare Database
     
    Function ImporterTables()
    Dim strConnODBC As String
    Dim strSce As String, strDest As String
     
    ' Chaîne de connexion ODBC
    strConnODBC = "ODBC;DSN=DP_SAGE100_SQL_Server;APP=Microsoft Office 2003;WSID=PC0905-6;DATABASE=FFSA;Trusted_Connection=Yes"
     
    ' -------------------------------------------
    ' Importation de dbo.F_ARTFOURNISS
    ' -------------------------------------------
     
    ' Table Source
    strSce = "dbo.F_ARTFOURNISS"
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
     
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
     
    ' Réaliser l'importation
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
    	  strConnODBC, acTable, strSce, strDest
     
     
    ' -------------------------------------------
    ' Importation de dbo.F_ARTSTOCK
    ' -------------------------------------------
     
    ' Table Source
    strSce = "dbo.F_ARTSTOCK"
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
     
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
     
    ' Réaliser l'importation
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
    	  strConnODBC, acTable, strSce, strDest
     
     
    ' -------------------------------------------
    ' Importation de dbo.F_DOCLIGNE
    ' -------------------------------------------
     
    ' Table Source
    strSce = "dbo.F_DOCLIGNE"
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
     
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
     
    ' Réaliser l'importation
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
    	  strConnODBC, acTable, strSce, strDest
     
     
    ' -------------------------------------------
    ' Importation de dbo.F_NOMENCLAT
    ' -------------------------------------------
     
    ' Table Source
    strSce = "dbo.F_NOMENCLAT"
     
    ' Table Destination (Access)
    strDest = Replace(strSce, ".", "_")
     
    ' Supprimer table destination
    On Error Resume Next
    DoCmd.DeleteObject acTable, strDest
    On Error GoTo 0
     
    ' Réaliser l'importation
    DoCmd.TransferDatabase acImport, "Base de données ODBC", _
    	  strConnODBC, acTable, strSce, strDest
     
    End Function
    A+

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Juin 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par LedZeppII Voir le message
    Pour trouver la chaîne de connexion ODBC:
    • Manuellement, au lieu de faire un import, lie une table.
      Disons qu'elle s'appelle T_LIEE.
    • Va dans l'éditeur Visual Basic (Alt+F11).
    • Ouvre la fenêtre d'exécution (Ctrl+G).
    • Dans la fenêtre d'exécution tape
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ? CurrentDb.TableDefs("T_LIEE").Connect
      et appuie sur la touche <Entrée>.
      La chaîne de connexion s'affiche sur la ligne suivante
    • Copie cette chaîne de caractères et colle la dans le code, en lieu et place de ODBC;....
    A+
    Bonjour,
    dans mon cas c'est une macro associée à des rapports BO, et je n'arrive pas à trouver la chaîne de connexion ODBC!
    Pouvez vous expliquer plus en détails ce que vous voulez dire par "Manuellement, au lieu de faire un import, lie une table"

    Merci pour votre aide

  10. #10
    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 768
    Points
    7 768
    Par défaut
    Bonjour,

    «Manuellement» signifie depuis l'interface utilisateur d'Access (comme ici).
    C'est à dire qu'on crée une table liée ODBC à l'aide de l'interface utilisateur d'Access.

    A+

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingénieur Topographe
    Inscrit en
    Juin 2018
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur Topographe
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2018
    Messages : 16
    Points : 11
    Points
    11
    Par défaut
    Bonjour,
    Je passe un message 8 ans après juste pour vous remercier de la solution apporté quelques messages plus haut
    C'est très bien écrit et très compréhensible !
    Merci pour avoir sauvé mon projet !

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

Discussions similaires

  1. [AC-2007] import de donne via odbc de hyperfile
    Par mourad1987 dans le forum Access
    Réponses: 1
    Dernier message: 23/03/2012, 09h30
  2. Problème importation des données via talend
    Par france38 dans le forum SugarCRM
    Réponses: 0
    Dernier message: 20/05/2011, 15h41
  3. import de données via ODBC
    Par admcent dans le forum Oracle
    Réponses: 1
    Dernier message: 08/10/2007, 12h24
  4. import de données via ODBC
    Par admcent dans le forum Oracle
    Réponses: 0
    Dernier message: 04/10/2007, 14h00
  5. Import de données via ODBC
    Par admcent dans le forum Oracle
    Réponses: 0
    Dernier message: 03/10/2007, 12h26

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