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 :

Import excel vers access champ mémo tronqué


Sujet :

Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Import excel vers access champ mémo tronqué
    Bonjour,
    Je souhaite faire un import d'un fichier excel vers une table access mais le champ mémo est tronqué.
    J'ai importé manuellement le fichier, vider les données, modifier le champ texte à mémo et ré-importé le fichier dans la table existante mais c'est toujours tronqué.
    Est-ce que quelqu'un peut m'aider svp? Merci par avance.

  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 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Bonjour,

    Problème bien connu.
    Lors de l'import il analyse les première ligne, si il détecte des champs de moins de 256 caractères il considère que c'est du texte. Tu dois être dans ce cas là.

    Solution 1 :
    Importer dans une table où les champs ont le bon type. (Changer le type de la colonne dans la table déjà créé lors de l'import).

    Solution 2 :
    Organiser tes lignes pour que les contenus les plus important sur ce champ soit en premier.

    Perso je choisi toujours la première, beaucoup contrôlable.

    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

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour Loufab, et merci pour ton retour.
    J'ai trouvé le problème : format des cellules excel, j'ai tout mis en format texte et l'import fonctionne.

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Problème non résolu, j'ai donc réouvert la discussion.

    Pour un même fichier excel avec deux onglets :
    - 1er onglet : récupération de deux champs "Résumé" et "Actions Immédiates"
    - 2ème onglet : récupération d'un champ "Description"
    Lors de l'import d'Excel vers Acces (via vba) dans 2 tables différentes, les champs sont en format Mémo (donc avec plus de 255 caractères) mais pour les champs "Résumé" et "Actions Immédiates", ils sont tronqués à 255 caractères.
    Je ne comprends pas pourquoi.

    La procédure vba consiste à importer les onglets dans des tables temporaires, effacer les données des tables initiales, repeupler les tables initiales avec les tables temporaires et effacer les tables temporaires.

    Est-ce que quelqu'un peut m'aider svp? merci.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Personnellement j'ai fini de me battre avec Excel pour les types et je fais mon transfert moi-même.

    Ici le code que j'utilise.
    Les trucs qui sont "Progression" servent uniquement à gérer une barre de progression et peuvent être ignorés.
    clsResultVerif sert à récupérer le résultat du traitement et peut être ignoré.



    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
    Public Function ChargerFichier( _
                            prmInfoFichier As clsInfoFichier, _
                            prmIdentifiantFeuille As Variant, prmLigneEntete As Long, _
                            prmNomTable As String, _
                            Optional prmFrmProgression As Form_frmProgression, Optional prmViderTable As Boolean = True) As clsResultVerif
     
        Dim iProgression As Double: iProgression = mdlProgression.LireValeur(prmFrmProgression)
     
        'Copie les données du fichier dans la table temporaire
        Dim result As New clsResultVerif
        Dim mess As String
     
        Dim db As DAO.Database: Set db = CurrentDb
     
        'Vide la table temporaire d'importation
        If prmViderTable Then
            Call mdlTable.ViderReinitialiserTable(prmNomTable, "Clef")
        End If
     
        'Ouvre la table de destination
        Dim tDestination As DAO.TableDef: Set tDestination = db.TableDefs(prmNomTable)
        Dim rDestination As DAO.Recordset: Set rDestination = tDestination.OpenRecordset(dbOpenDynaset)
        Dim champ As Field
     
        'Lit le fichier
        Dim appExcel As New clsAppExcel
        Call appExcel.OuvrirFichier(prmInfoFichier)
     
        If IsNumeric(prmIdentifiantFeuille) Then
                Call appExcel.AssignerFeuille_Index(CLng(prmIdentifiantFeuille))
            Else
                Call appExcel.AssignerFeuille_Nom(CStr(prmIdentifiantFeuille))
        End If
     
        Dim Zone As Object 'Excel.Range
     
        Call mdlProgression.AugmenterValeurMax(prmFrmProgression, CDbl(appExcel.Feuille.UsedRange.Rows.Count))
     
        '=== Trouve les colonnes correspondants au champ
        ' Comme on a vérifié la structure, on est sûr que toutes les colonnes correspondant à champ sont là.
        Dim listeColonne As New Dictionary
        For Each Zone In appExcel.Feuille.UsedRange.Rows(prmLigneEntete).Cells
            Set appExcel.Zone = Zone: Call appExcel.AfficherZone
     
            If mdlTable.EstChampExistant(tDestination, appExcel.Zone.Value) Then
                Call listeColonne.Add(appExcel.Zone.Value, Zone.Column)
            End If
     
        Next Zone
        '--- Trouve les colonnes correspondants au champ
     
        '=== Parcours les lignes
        Dim nomChamp As Variant
     
        Dim ligne As Object 'Excel.Range
     
        For Each ligne In appExcel.Feuille.UsedRange.Rows
     
            iProgression = mdlProgression.GererProgression(prmFrmProgression, iProgression, 1)
     
            If ligne.row > prmLigneEntete Then
                rDestination.AddNew
     
                '=== Recopie les colonnes dans les champs correspondents
                Set appExcel.Zone = ligne.Cells(1, 1): Call appExcel.AfficherZone
     
                For Each nomChamp In listeColonne.Keys
                    Set champ = rDestination.Fields(nomChamp)
                    champ = ligne.Cells(1, listeColonne.Item(nomChamp)).Value
                Next nomChamp
                '--- Recopie les colonnes dans les champs correspondents
     
                rDestination.Update
            End If
     
        Next ligne
        '--- Parcours les lignes
     
        Set listeColonne = Nothing
     
        rDestination.Close: Set rDestination = Nothing 'Ferme et libère explictement la mémoire utilisée
        Set tDestination = Nothing
        db.Close: Set db = Nothing 'Ferme et libère explictement la mémoire utilisée
     
        Call appExcel.FermerFichier
        Call appExcel.FermerExcel
        Set appExcel = Nothing
     
        'Debug.Print cptLigne
        If result.aErreur Or result.AWarning Then
            Call result.AjouterEnteteMessage(" Fichier : [" & prmInfoFichier.Repertoire_Nom_Extention & "].")
        End If
     
    Exit_ChargerFichier:
        Set ChargerFichier = result: Set result = Nothing
        Exit Function
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub ViderReinitialiserTable(prmNomTable As String, prmNomChampCompteur As String)
        Dim db As DAO.Database: Set db = CurrentDb
        Call db.Execute("delete * from [" & prmNomTable & "]", dbFailOnError)
        db.Close: Set db = Nothing
        Call ReinitiliaserAutoNum(prmNomTable, prmNomChampCompteur)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Test_ReinitiliaserAutoNum()
        Call ReinitiliaserAutoNum("tblSAP_BaseCharge", "Clef")
    End Sub
    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
    Private Sub ReinitiliaserAutoNum(prmNomTable As String, prmNomChampCompteur As String)
        'Reinitialise le à 1 le compteur utiliser pour la numérotation automatique des enregisterments
        ' Seulement sur une table vide.
     
        ' La reinitialisation normale se fait automatiquement sur une table vide lors du processus de compactage.
        ' Comme les tables de données ne seront jamais vides, il faut procéder à la réinitialisation manuellement après qu'elles aient été vidées.
     
        On Error GoTo Err_ReinitiliaserAutoNum
     
        If DCount("*", prmNomTable) = 0 Then
            Dim db As DAO.Database
            Set db = CurrentDb
     
            '=== Récupérer le nom de la base distante si la table est liée
            Dim t As DAO.TableDef: Set t = db.TableDefs(prmNomTable)
            Dim RepertoireNomBD As String
     
            If t.Connect <> "" Then
                RepertoireNomBD = Mid(t.Connect, Len(";DATABASE=") + 1)
            End If
     
            Set t = Nothing
            '-- Récupérer le nom de la base distante si la table est liée
     
            '=== Gérer table liée
            If RepertoireNomBD <> "" Then
                db.Close: Set db = Nothing
                Set db = DBEngine.OpenDatabase(RepertoireNomBD)
            End If
            '--- Gérer table liée
     
            Dim sql As String: sql = "ALTER TABLE [" & prmNomTable & "] ALTER COLUMN [" & prmNomChampCompteur & "] COUNTER(1,1)"
            Call db.Execute(sql, dbFailOnError)
            db.Close: Set db = Nothing
        End If
     
    Exit_ReinitiliaserAutoNum:
        Exit Sub
     
    Err_ReinitiliaserAutoNum:
        Select Case Err.Number
            Case 3211, 3262 'Table ouverte ou verrouillée
                'OK, on va ignorer l'erreur car ce n'est pas grâve.
                ' On reinitialisera la table une autre fois.
                Resume Exit_ReinitiliaserAutoNum
     
            Case Else
                'Renvoi l'ereur actuelle au programme appelant
                Err.Raise Err.Number
     
        End Select
     
    End Sub
    ClsAppExcel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Option Compare Database
    Option Explicit
     
    'Routine pour gérer les 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Private m_AppExcel As Excel.Application
    Public Classeur As Excel.Workbook
    Public Feuille As Excel.Worksheet
    Public infoFichier As clsInfoFichier
    Public Zone As Excel.Range
     
    Public Function xlAutomatic() As Long
        xlAutomatic = -4105
    End Function
     
    Public Function xlCenter() As Long
        xlCenter = -4108
    End Function
     
    Public Function xlContinuous() As Long
        xlContinuous = 1
    End Function
     
    Public Function xlEdgeBottom() As Long
        xlEdgeBottom = 9
    End Function
     
    Public Function xlEdgeLeft() As Long
        xlEdgeLeft = 7
    End Function
     
    Public Function xlEdgeRight() As Long
        xlEdgeRight = 10
    End Function
     
    Public Function xlEdgeTop() As Long
        xlEdgeTop = 8
    End Function
     
    Public Function xlInsideVertical() As Long
        xlInsideVertical = 11
    End Function
     
    Public Function xlMaximized() As Long
        xlMaximized = -4137
    End Function
     
    Public Function xlMedium() As Long
        xlMedium = -4138
    End Function
     
    Public Function xlOpenXMLWorkbook() As Long
        xlOpenXMLWorkbook = 51
    End Function
     
    Public Function xlRight() As Long
        xlRight = -4152
    End Function
     
    Public Function xlThin() As Long
        xlThin = 2
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Class_Initialize()
        Set Me.infoFichier = New clsInfoFichier
        Set m_AppExcel = CreateObject("Excel.Application")
        m_AppExcel.Visible = True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Property Get appExcel() As Object 'Excel.Application
        Set appExcel = m_AppExcel
    End Property
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub FermerExcel()
        If Not Me.Classeur Is Nothing Then
            Call FermerFichier(False)
        End If
     
        Call m_AppExcel.Quit
        Set m_AppExcel = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub OuvrirFichier(prmInfoFichier As clsInfoFichier)
        Set Me.infoFichier = prmInfoFichier
        Set Classeur = Me.appExcel.workbooks.Open(Me.infoFichier.Repertoire_Nom_Extention)
        Me.appExcel.ActiveWindow.WindowState = xlMaximized
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub FermerFichier(Optional prmEstSauvegarde As Boolean = False)
     
        If prmEstSauvegarde Then
            Call Me.Classeur.Save
        End If
     
        Me.appExcel.DisplayAlerts = False
        Call Me.Classeur.Close
        Me.appExcel.DisplayAlerts = True
        Set Me.Classeur = Nothing
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function estFeuilleExistante(prmNomFeuille As String) As Boolean
     
        Dim result As Boolean: result = False
     
        For Each Feuille In Me.Classeur.Worksheets
            If Feuille.Name = prmNomFeuille Then
                result = True
                Exit For
            End If
        Next Feuille
     
        estFeuilleExistante = result
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub AssignerFeuille_Nom(prmNomFeuille As String)
        Set Feuille = Me.Classeur.Worksheets(prmNomFeuille)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub AssignerFeuille_Index(prmIndex As Long)
        Set Feuille = Me.Classeur.Worksheets(prmIndex)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Sub AfficherZone()
        Me.Zone.Parent.Parent.Activate 'Calsseur
        Me.Zone.Parent.Activate 'Feuille
        Me.Zone.Select 'Zone
        DoEvents
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub FigerVolet(Optional prmCellule As Object = Nothing)
     
        If Not prmCellule Is Nothing Then
            Set Me.Zone = prmCellule
            Call Me.AfficherZone
        End If
     
        appExcel.ActiveWindow.FreezePanes = False
        appExcel.ActiveWindow.FreezePanes = True
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Class_Terminate()
     
        Set Zone = Nothing
        Set Feuille = Nothing
     
        If Not Me.Classeur Is Nothing Then
            Set Me.Classeur = Nothing
        End If
     
        If Not m_AppExcel Is Nothing Then
            Set m_AppExcel = Nothing
        End If
     
    End Sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci marot_r mais étant débutante sur vba, je ne comprend pas tout...

    Par contre, j'ai fait un test ce matin car j'ai vu dans un forum que "Le type des champs est déterminé par la valeur de la 1ere ligne de données Excel", du coup j'ai ajouté une ligne dans mon fichier et après ça fonctionne très bien, je n'ai plus les champs tronqués.
    Mais impossible de faire ça à chaque fois... je mets donc mon code au cas où :

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
     
    Private Sub MAJForecast_Click()
     
    DoCmd.SetWarnings False
     
    '''''''''''''''''''''''''''''''''''''''''''IMPORT FICHIER FORECAST NR''''''''''''''''''''''''''''''''''''''''''
    Dim blnHasFieldNames As Boolean, blnEXCEL As Boolean, blnReadOnly As Boolean
    Dim lngCount As Long
    Dim objExcelNR As Object, objExcelHI As Object
    Dim objWorkbookNR As Object, objWorkbookHI As Object
    Dim colWorksheets As Collection
    Dim strPathFileNR As String
    Dim strPathFileHI As String
     
    ' Establish an EXCEL application object
    On Error Resume Next
    Set objExcelNR = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
          Set objExcelNR = CreateObject("Excel.Application")
          blnEXCEL = True
    End If
    Err.Clear
    On Error GoTo 0
     
    ' Change this next line to True if the first row in EXCEL worksheet
    ' has field names
    blnHasFieldNames = True
     
    ' Replace S:\Fraude\...\L_HINROExtract.xlsx with the actual path and filename
    strPathFileNR = "S:\Fraude\01_INCIDENTS\Suivi des affaires\Extractions Forecast pour synthèse\L_HINROExtract.xlsx"
     
    blnReadOnly = True ' open EXCEL file in read-only mode
     
    ' Open the EXCEL file and read the worksheet names into a collection
    Set colWorksheets = New Collection
    Set objWorkbookNR = objExcelNR.Workbooks.Open(strPathFileNR, , blnReadOnly)
    For lngCount = 1 To objWorkbookNR.Worksheets.Count
          colWorksheets.Add objWorkbookNR.Worksheets(lngCount).Name
    Next lngCount
     
    ' Close the EXCEL file without saving the file, and clean up the EXCEL objects
    objWorkbookNR.Close False
    Set objWorkbookNR = Nothing
    If blnEXCEL = True Then objExcelNR.Quit
    Set objExcelNR = Nothing
     
    ' Import the data from each worksheet into a separate table
    For lngCount = colWorksheets.Count To 1 Step -1
          DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "TMP_NR_" & colWorksheets(lngCount), strPathFileNR, blnHasFieldNames, _
                colWorksheets(lngCount) & "$"
    Next lngCount
     
    ' Delete the collection
    Set colWorksheets = Nothing
     
    '----------------EFFACEMENT DES DONNEES DANS LES TABLES NR
     
    DoCmd.RunSQL "DELETE FROM T_NR_Identification"
    DoCmd.RunSQL "DELETE FROM T_NR_IA"
     
    '----------------REPEUPLEMENT DES DONNEES DANS LES TABLES NR
     
    DoCmd.RunSQL "INSERT INTO T_NR_Identification SELECT * FROM TMP_NR_Identification"
    'DoCmd.RunSQL "ALTER TABLE T_NR_Identification ALTER COLUMN Résumé MEMO"
    'DoCmd.RunSQL "ALTER TABLE T_NR_Identification ALTER COLUMN [Actions Immédiates]MEMO"
     
    DoCmd.RunSQL "INSERT INTO T_NR_IA SELECT * FROM [TMP_NR_Informations additionelles]"
     
    '----------------SUPPRESSION TABLE TEMPORAIRE NR
     
    DoCmd.RunSQL ("DROP TABLE TMP_NR_Identification")
    DoCmd.RunSQL ("DROP TABLE [TMP_NR_Informations additionelles]")
     
    MsgBox "Le chargement des incidents NR est terminé", vbInformation + vbOKOnly, "Import NR"
     
     
    '''''''''''''''''''''''''''''''''''''''''''IMPORT FICHIER FORECAST HI''''''''''''''''''''''''''''''''''''''''''
    ' Establish an EXCEL application object
    On Error Resume Next
    Set objExcelHI = GetObject(, "Excel.Application")
    If Err.Number <> 0 Then
          Set objExcelHI = CreateObject("Excel.Application")
          blnEXCEL = True
    End If
    Err.Clear
    On Error GoTo 0
     
    ' Change this next line to True if the first row in EXCEL worksheet
    ' has field names
    blnHasFieldNames = True
     
    ' Replace S:\Fraude\...\L_HINROExtract.xlsx with the actual path and filename
    strPathFileHI = "S:\Fraude\01_INCIDENTS\Suivi des affaires\Extractions Forecast pour synthèse\L_HIExtract.xlsx"
     
    blnReadOnly = True ' open EXCEL file in read-only mode
     
    ' Open the EXCEL file and read the worksheet names into a collection
    Set colWorksheets = New Collection
    Set objWorkbookHI = objExcelHI.Workbooks.Open(strPathFileHI, , blnReadOnly)
    For lngCount = 1 To objWorkbookHI.Worksheets.Count
          colWorksheets.Add objWorkbookHI.Worksheets(lngCount).Name
    Next lngCount
     
    ' Close the EXCEL file without saving the file, and clean up the EXCEL objects
    objWorkbookHI.Close False
    Set objWorkbookHI = Nothing
    If blnEXCEL = True Then objExcelHI.Quit
    Set objExcelHI = Nothing
     
    ' Import the data from each worksheet into a separate table
    For lngCount = colWorksheets.Count To 1 Step -1
          DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "TMP_HI_" & colWorksheets(lngCount), strPathFileHI, blnHasFieldNames, _
                colWorksheets(lngCount) & "$"
    Next lngCount
     
    ' Delete the collection
    Set colWorksheets = Nothing
     
    '----------------EFFACEMENT DES DONNEES DANS LES TABLES HI
     
    DoCmd.RunSQL "DELETE FROM T_HI_Identification"
    DoCmd.RunSQL "DELETE FROM T_HI_Cause"
    DoCmd.RunSQL "DELETE FROM T_HI_Effet"
    DoCmd.RunSQL "DELETE FROM T_HI_IA"
     
    '----------------REPEUPLEMENT DES DONNEES DANS LES TABLES HI
     
    DoCmd.RunSQL "INSERT INTO T_HI_Identification SELECT * FROM TMP_HI_Identification"
    DoCmd.RunSQL "INSERT INTO T_HI_Cause SELECT * FROM TMP_HI_Causes"
    DoCmd.RunSQL "INSERT INTO T_HI_Effet SELECT * FROM TMP_HI_Effets"
    DoCmd.RunSQL "INSERT INTO T_HI_IA SELECT * FROM [TMP_HI_Informations additionelles]"
     
     
    '----------------SUPPRESSION TABLE TEMPORAIRE HI
     
    DoCmd.RunSQL ("DROP TABLE TMP_HI_Identification")
    DoCmd.RunSQL ("DROP TABLE TMP_HI_Causes")
    DoCmd.RunSQL ("DROP TABLE TMP_HI_Effets")
    DoCmd.RunSQL ("DROP TABLE [TMP_HI_Informations additionelles]")
    DoCmd.RunSQL ("DROP TABLE TMP_HI_Assurance")
     
    MsgBox "Le chargement des incidents HI est terminé", vbInformation + vbOKOnly, "Import HI"
     
    DoCmd.OpenQuery "Requête1"
     
    DoCmd.SetWarnings True
     
    End Sub

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Requête UNION champ mémo tronqué
    Bonjour,
    Je suis de nouveau de retour pour le même problème de tronquage du champ mémo mais j'ai un peu avancé, après quelques mois d'absence...
    Le problème ne vient pas de l'import excel mais après une requête UNION.
    Est-ce que quelqu'un peut m'aider svp? merci

  8. #8
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Bonjour,

    la très complète solution proposée marot_r ne convient donc pas à ton cas ?

    Quand tu demandes de l'aide, on peut essayer, mais comme ma femme m'a offert un nouveau manteau pour la St Valentin, ma boule de cristal est restée dans ma précédente redingote...
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    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 006
    Points : 24 598
    Points
    24 598
    Par défaut
    Sympa cette classe René.
    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

  10. #10
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Merci loufab, c'est le résultat d'environ 1 mois de tâtonnement sur les échanges Access/Excel ... formateur mais un peu frustrant :-).

    Le problème ne vient pas de l'import excel mais après une requête UNION.
    Je suis surpris, vérifie si tu n'as pas une requête de regroupement avant.
    Access coupe les champs mémos (sans rien dire) à 255 caractères lors des GROUP BY.

    Sinon, la seule solution que je vois est de remplacer la requête union par une table temporaire et des requêtes d'ajout.

    À faire :
    1. Création de la table temporaire
    2. Conversion de chacune des clauses SELECT de la requête UNION en une requête d'ajout.


    Le processus est le suivant :
    1. Vidage de la table temporaire
    2. Exécution des requêtes ajout.
    3. Utilisation de la table à la place de la requête union.
    4. Optionnel : vidage de la table temporaire après usage.


    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2016
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci marot_r, je vais essayer et vous tiens au courant

Discussions similaires

  1. Import Excel vers Access
    Par rabihm81 dans le forum Access
    Réponses: 1
    Dernier message: 07/05/2008, 16h00
  2. Import Excel vers Access MAJ et nouveaux enregistrements
    Par sl1980 dans le forum VBA Access
    Réponses: 8
    Dernier message: 23/01/2008, 09h02
  3. import excel vers access avec bouton "parcourir"
    Par zeloutre dans le forum Access
    Réponses: 3
    Dernier message: 04/04/2007, 19h06
  4. échec importation excel vers access
    Par emmablue dans le forum Access
    Réponses: 2
    Dernier message: 31/07/2006, 11h34
  5. Import Excel vers Access +hypertexte
    Par liop49 dans le forum Access
    Réponses: 2
    Dernier message: 24/07/2006, 14h40

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