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 :

Spécification d'importation différente entre Access 2002 et 20013


Sujet :

Access

  1. #1
    Invité
    Invité(e)
    Par défaut Spécification d'importation différente entre Access 2002 et 20013
    Bonjour

    Régulièrement (en fait tous les jours) j'importe des fichiers (texte ou Excel) dans Access.

    Dans les versions précédentes (2002 à 2003), l'ordre des colonnes était conservés, que l'on fasse l'opération manuellement ou grâce à une spécification d'importation.

    Nous venons de passer à Office 2013, et nous venons de constater plusieurs choses (de même que pour Access 2007).

    Lors d'un import manuel l'ordre des colonnes n'est pas conservé.
    Lors d'un import par une spécification enregistré, l'ordre des colonnes est différent et ne respecte pas l'ordre de la spécification.

    Quelqu'un a déjà eut se soucis ou un retour d'expérience sur le sujet.

    Avant que l'on ne me pose la question, je tiens à préciser que l'ordre des colonnes est très important pour nous.

    Je rajoute que lorsque l'on utilise la spécification d'import avec une ligne de code (DoCmd.TransfertTexte) l'ordre du filtre est respecté.

    Merci

    Philippe

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut

    A la suite de mes différentes recherches, il s'avère qu'il n'y a pas de solution miracle, je vais devoir créer un complément pour pouvoir moi même paramétrer les imports de données en provenance de fichiers texte.

    Techniquement il n'y aura pas de soucis, peut-être le sujet d'un tuto, il y a tellement longtemps que je n'ai pas écrit d'articles.

    Je laisse cette discussion ouverte pour ceux qui souhaitent y apporter leur grain à moudre.

    Philippe

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut

    Petit complément d'information, grâce à une constatation faite par un de mes collègue.

    Lorsque vous faites votre importation, lors de la dernière phase il vous est demandé si vous voulez ajouter une clé primaire, si vous dites non, l'ordre des champs sera respecté.

    Il suffit de passer la table ensuite en mode création d'insérer un champ Numauto qui vous servira de clé.

    Philippe

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Une nouvelle constatation :

    Access 2013 et base au format .mdb

    Import avec clé primaire = mélange des champs
    Import sans clé primaire = l'ordre des champs est respecté

    Access 2013 et base au format .accdb

    Import avec clé primaire = l'ordre des champs est respecté
    Import sans clé primaire = l'ordre des champs est respecté

    Voilà le dernier constat.

    Philippe

  5. #5
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Bonjour Philippe,

    Je fais aussi beaucoup d'importations en tout genre. Je n'ai rencontré aucun pb quand je suis passé de 2003 à 2010.
    Voici par exemple un code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    gMaBD.Execute "DELETE * FROM T_w_traitement", dbSeeChanges
            gStrSql = "ALTER TABLE T_w_traitement ALTER COLUMN  idAuto  COUNTER (1,1)"
            gMaBD.Execute gStrSql, dbSeeChanges
     
            'Transferer le fichier
            DoCmd.TransferText acImportDelim, "T", "T_w_traitement", Fic_nomLong
    Bon w-e
    "Always look at the bright side of life." Monty Python.

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

    Merci pour ce retour, mais dans mon cas ce n'est pas applicable.

    Dans mon métier je reçois des fichiers d'adresses de différentes sources et de différents formats (txt, csv, excel, etc...) et donc il y a énormément de cas particuliers que l'on ne peut pas automatiser.

    Et même si on automatise, on a souvent des surprises, notamment des modifications de structures, l'ajout ou la suppression de champs.

    Philippe

  7. #7
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 878
    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 878
    Points : 4 754
    Points
    4 754
    Par défaut
    Alors voici un exemple d'importation plus élaboré qui me sert à importer une feuille Excel en controlant précisément les données, dans une table de structure différente.
    Il y a plusieurs bonnes idées dedans, puisse cela te servir.
    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
     
    '***************************************************
    Private Sub Import_T_ref_Domaine()
    '***************************************************
    ' source   onglet:  InputWkb1.Worksheets(4)  , la récupération des données commence ici à la ligne : row 1 (ligne des entetes )
    ' Import dans table   T_ref_Domaine       
    '---------------------------------------------------
     
        Dim InputSht1 As Worksheet
        Dim Arr1() As Variant
        Dim i As Long, j As Long
        Dim LastRow As Long, LastCol As Long, strSql As String
        Dim myDb As DAO.Database
        Dim rs1 As DAO.Recordset
        Dim StatusMsg As String, varReturn As Variant, lCount As Long, strTable As String
        Dim strRegroupDefaultValue As String
     
     
        Dim TimerDeBut As Double
        TimerDeBut = Timer
     
        strTable = "T_ref_Domaine"
        StatusMsg = "Patientez, importation dans " & strTable & " en cours d'exécution..."
     
        'Call GetDbFullpath(strTable)  ' retourne la valeur de myDbData
        Set myDb = CurrentDb
     
        strSql = "DELETE * FROM " & strTable 
        myDb.Execute strSql, dbSeeChanges
        'strSql = "ALTER TABLE " & strTable & " ALTER COLUMN  Ref_id  COUNTER (1,1)"
        ' myDb.Execute strSql, dbSeeChanges
     
        Set rs1 = myDb.OpenRecordset("SELECT * FROM " & strTable, dbOpenDynaset, dbSeeChanges)
     
        Set InputSht1 = InputWkb1.Worksheets(4)
     
        With InputSht1
     
            LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
     
            LastCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column
     
            Arr1 = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
     
        End With
     
        i = 1
        For j = 1 To LastCol
            Debug.Print  "entête_colonne " & j  & " : " &  UCase(Arr1(1, j))
        Next j
     
        ' Colonnes de la feuille "Colonnes Import"
        ' ----------------------------------------
        '  Info nb ligXL : 140
        '    Info nb colXL : 4
        '    entête_colonne 1: DOMAINE
        '    entête_colonne 2: LIBELLÉ DOMAINE
        '    entête_colonne 3: FILIÈRE
        '    entête_colonne 4: Code APAC
     
        ' Table T_ref_Domaine
        ' -------------------
        ' SELECT Dom_cle, Metier, Dom_libelle, Dom_Filiere, APAC_SCode, CreatDate, CreatUser
     
        Debug.Print "i max : " & UBound(Arr1, 1)
        Debug.Print "j max : " & UBound(Arr1, 2)
     
        varReturn = SysCmd(acSysCmdInitMeter, StatusMsg, UBound(Arr1, 1))
     
        For i = 2 To UBound(Arr1, 1)
     
            DoEvents
            varReturn = SysCmd(acSysCmdUpdateMeter, i)  'Progression
     
            If IsNothing(Arr1(i, 1)) Then
                ' 2012-05-25
                'debug.print  "la ligne " & i & " est vide, donc non importée"
            Else
     
                rs1.AddNew
                For j = 1 To UBound(Arr1, 2)
                    'Debug.Print "[" & Nz(arr1(i, j), 0) & "]"
                    Select Case j
     
                    Case 1: rs1.Fields("Dom_cle") = Nz(Arr1(i, j), 0)
                    Case 2: rs1.Fields("Dom_libelle") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("Dom_libelle").Size)
                    Case 3: rs1.Fields("Dom_Filiere") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("Dom_Filiere").Size)
                    Case 5: rs1.Fields("APAC_SCode") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("APAC_SCode").Size)
     
                    End Select
                Next j
     
                rs1.Fields("CreatDate") = Now
                rs1.Fields("CreatUser") = Environ("USERNAME")      
                rs1.Update
            End If
     
        Next i
     
       debug.print    DCount("*", strTable) & " records importés dans " & strTable
     
    Exit_0:
        varReturn = SysCmd(acSysCmdRemoveMeter)
        varReturn = SysCmd(acSysCmdClearStatus)
        Set rs1 = Nothing
        Set myDb = Nothing
        Set InputSht1 = Nothing
     
    End Sub
    Bon we
    "Always look at the bright side of life." Monty Python.

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

    Piste intéressante, j'avais commencé à réfléchir dans ce sens pour la création d'un complément.

    Philippe

  9. #9
    Membre habitué
    Homme Profil pro
    Etudiant - Développeur
    Inscrit en
    Mai 2014
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Etudiant - Développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2014
    Messages : 119
    Points : 159
    Points
    159
    Par défaut
    Citation Envoyé par micniv Voir le message
    Alors voici un exemple d'importation plus élaboré qui me sert à importer une feuille Excel en controlant précisément les données, dans une table de structure différente.
    Il y a plusieurs bonnes idées dedans, puisse cela te servir.
    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
     
    '***************************************************
    Private Sub Import_T_ref_Domaine()
    '***************************************************
    ' source   onglet:  InputWkb1.Worksheets(4)  , la récupération des données commence ici à la ligne : row 1 (ligne des entetes )
    ' Import dans table   T_ref_Domaine       
    '---------------------------------------------------
     
        Dim InputSht1 As Worksheet
        Dim Arr1() As Variant
        Dim i As Long, j As Long
        Dim LastRow As Long, LastCol As Long, strSql As String
        Dim myDb As DAO.Database
        Dim rs1 As DAO.Recordset
        Dim StatusMsg As String, varReturn As Variant, lCount As Long, strTable As String
        Dim strRegroupDefaultValue As String
     
     
        Dim TimerDeBut As Double
        TimerDeBut = Timer
     
        strTable = "T_ref_Domaine"
        StatusMsg = "Patientez, importation dans " & strTable & " en cours d'exécution..."
     
        'Call GetDbFullpath(strTable)  ' retourne la valeur de myDbData
        Set myDb = CurrentDb
     
        strSql = "DELETE * FROM " & strTable 
        myDb.Execute strSql, dbSeeChanges
        'strSql = "ALTER TABLE " & strTable & " ALTER COLUMN  Ref_id  COUNTER (1,1)"
        ' myDb.Execute strSql, dbSeeChanges
     
        Set rs1 = myDb.OpenRecordset("SELECT * FROM " & strTable, dbOpenDynaset, dbSeeChanges)
     
        Set InputSht1 = InputWkb1.Worksheets(4)
     
        With InputSht1
     
            LastRow = .UsedRange.Rows(.UsedRange.Rows.Count).Row
     
            LastCol = .UsedRange.Columns(.UsedRange.Columns.Count).Column
     
            Arr1 = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
     
        End With
     
        i = 1
        For j = 1 To LastCol
            Debug.Print  "entête_colonne " & j  & " : " &  UCase(Arr1(1, j))
        Next j
     
        ' Colonnes de la feuille "Colonnes Import"
        ' ----------------------------------------
        '  Info nb ligXL : 140
        '    Info nb colXL : 4
        '    entête_colonne 1: DOMAINE
        '    entête_colonne 2: LIBELLÉ DOMAINE
        '    entête_colonne 3: FILIÈRE
        '    entête_colonne 4: Code APAC
     
        ' Table T_ref_Domaine
        ' -------------------
        ' SELECT Dom_cle, Metier, Dom_libelle, Dom_Filiere, APAC_SCode, CreatDate, CreatUser
     
        Debug.Print "i max : " & UBound(Arr1, 1)
        Debug.Print "j max : " & UBound(Arr1, 2)
     
        varReturn = SysCmd(acSysCmdInitMeter, StatusMsg, UBound(Arr1, 1))
     
        For i = 2 To UBound(Arr1, 1)
     
            DoEvents
            varReturn = SysCmd(acSysCmdUpdateMeter, i)  'Progression
     
            If IsNothing(Arr1(i, 1)) Then
                ' 2012-05-25
                'debug.print  "la ligne " & i & " est vide, donc non importée"
            Else
     
                rs1.AddNew
                For j = 1 To UBound(Arr1, 2)
                    'Debug.Print "[" & Nz(arr1(i, j), 0) & "]"
                    Select Case j
     
                    Case 1: rs1.Fields("Dom_cle") = Nz(Arr1(i, j), 0)
                    Case 2: rs1.Fields("Dom_libelle") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("Dom_libelle").Size)
                    Case 3: rs1.Fields("Dom_Filiere") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("Dom_Filiere").Size)
                    Case 5: rs1.Fields("APAC_SCode") = Left(Trim(Nz(Arr1(i, j))), rs1.Fields("APAC_SCode").Size)
     
                    End Select
                Next j
     
                rs1.Fields("CreatDate") = Now
                rs1.Fields("CreatUser") = Environ("USERNAME")      
                rs1.Update
            End If
     
        Next i
     
       debug.print    DCount("*", strTable) & " records importés dans " & strTable
     
    Exit_0:
        varReturn = SysCmd(acSysCmdRemoveMeter)
        varReturn = SysCmd(acSysCmdClearStatus)
        Set rs1 = Nothing
        Set myDb = Nothing
        Set InputSht1 = Nothing
     
    End Sub
    Bon we
    peux tu mettre des commentaire sur ton code pour savoir quel ligne correspond a quoi?

Discussions similaires

  1. Retour différent entre Access et SQL Server
    Par Jean-Philippe André dans le forum Langage SQL
    Réponses: 1
    Dernier message: 03/02/2012, 09h51
  2. compatibilité entre access 2002 et access 2003
    Par Abdel Illah dans le forum Access
    Réponses: 1
    Dernier message: 03/08/2008, 08h55
  3. Resultat de requête différent entre Access et Toad
    Par nicky0007us dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 13/06/2008, 17h57
  4. Polices différentes dans Access 2002
    Par Pensardin dans le forum Modélisation
    Réponses: 1
    Dernier message: 04/08/2007, 22h49
  5. Tris différents entre ACCESS et Oracle !
    Par Toutatis dans le forum Oracle
    Réponses: 1
    Dernier message: 16/05/2006, 14h17

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