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 :

import cellules Excel avec Alt-Enter


Sujet :

VBA Access

  1. #1
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 469
    Par défaut import cellules Excel avec Alt-Enter
    Bonjour,

    Je dois importer des fichiers Excel où l'utilisateur à enrégistré plusieurs données dans la même cellule et pour les écrire sur plusieurs lignes dans Excel il a utilisé Alt-Enter.
    Son fichier Excel est comme ceci :
    Nom : ExcelAltEnter.jpg
Affichages : 73
Taille : 8,8 Ko
    Dans Access, après un Docmd.Transferspreadsheet, les données sont importées sur plusieurs lignes :
    Nom : Table1.jpg
Affichages : 64
Taille : 11,3 Ko
    J'aurais dû avoir ceci : Nom : Table1_2rows.jpg
Affichages : 66
Taille : 10,9 Ko

    Le plus simple est de demander à l'utilisateur de revoir manuellement son fichier et de corriger ses données mais cela n'est pas vraiment envisageable.
    Autre solution : piloter Excel à partir de Access et remplacer tous les chr(10) par un espace. C'est un peu lourd comme solution. Avant de m'y mettre, j'aimerais connaître votre avis.
    Avez-vous une idée simple qui pourrait me donner le résultat désiré ?

    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je viens de faire un test car ça m'a turlupiné votre histoire...
    Et que ce soit par le biais de l'assistant ou par le biais de la méthode TransferSpreadsheet, je n'ai pas rencontré le souci que vous rencontrez.

    Ma source de données est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Quoi	Couleur
    Table	"noire
             rouge
             orange"
    Chaise	"jaune
             bleue"
    et dans la table cible j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Quoi	Couleur
    Table	"noirerougeorange"
    Chaise	"jaunebleue"
    Les séparateurs de valeurs sont non visibles mais pourtant bien là car si je fais un copier / coller dans Excel du contenu de cette table, j'obtiens l'exactitude de ce que j’avais au départ.

    Et donc, pour répondre plus précisément à votre question, il n'existe pas d'options de considération des caractères non imprimables dans un processus d'importation de données.
    Quoi qu'il en soit, vous pouvez ainsi que vous le soulignez exploiter un objet Workbook où vous procéderiez à un Replace du saut de ligne car demander à votre fournisseur de changer ses habitudes va être plus délicat à mettre en oeuvre.

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  3. #3
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 469
    Par défaut
    Bonjour,
    Merci pour vos commentaires.
    J'ai encore fait d'autres tests avec un petit fichier Excel et un base Access vierge. J'obtiens les mêmes résultats que vous. Mon problème est donc ailleurs.
    Je continue à chercher.

    Merci et bon week-end

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 133
    Billets dans le blog
    5
    Par défaut
    Dans une des cellules concernées avec les couleurs du classeur orignal, tentez un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub testAltEntree()
    Dim arTest                                             As Variant
     
        arTest = Split(ActiveCell.Value, vbCr)
        Debug.Print UBound(arTest)
    End Sub
    si vous obtenez une erreur 9, c'est que ce n'est pas un Chr(13)

    Vérifier alors avec la valeur du séparateur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub testQuelChar()
    Dim intTest                                             As Integer
    Const COULEUR = "noire"
     
        intTest = Asc(Mid(ActiveCell.Value, Len(COULEUR) + 1, 1))
        Debug.Print intTest
    End Sub
    Il doit en théorie vous retourner 10

    Bien entendu, il faut que la première couleur soit noire (donc à adapter dans le constante selon votre cellule)

    Argy
    Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

    Ils comptent sur vous...
    Web Site@Mail
    Tutoriels : Déployez vos applications Access 2010 à 2019 */* Réalisez un Assistant de présaisie...
    MDB Viewer : Visionneuse Access v4.0

  5. #5
    Membre chevronné
    Inscrit en
    Février 2011
    Messages
    469
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 469
    Par défaut
    Bonjour,

    Pour finir, j'ai décidé d'ouvrir Excel et de corriger les cellules dans Excel avant de les importer dans Access.

    Au cas où cela pourrait servir à quelqu'un d'autre, 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
    Option Compare Database
    Option Explicit
    Function TestSuppressAltEnter()
    Dim strPathFileMonFicher As String
    strPathFileMonFicher = "C:\Temp\Book1.xlsx"
    Debug.Print SuppressAltEnter(strPathFileMonFicher)
    End Function
     
    Function SuppressAltEnter(strPathFileMonFicher) As String
    'Le fichier Excel que je reçois contient des cellules avec Alt-Enter pour montrer plusieurs valeurs sur plusieurs lignes à l'écran.
    'Malheureusement, quand j'importe ce fichier Access me crée une ligne par valeur au lieu de me mettre tout dans une seule ligne de ma table.
    'Cette fonction supprime le Alt-Enter de la colonne Excel et replace par un espace.
    'late binding (sans reference dans le menu Tools/references/..)
    'Plus difficle à programmer pcq quand je tape objWB. il ne me donne pas de petit menu intellisense : il faut connaître la syntaxe.
    'par contre, si on installe sur un autre PC qui utilise la reference 'Office Excel 12' ou  16  cela fonctionne toujours.
     
    Dim objXL As Object
    Dim objWB As Object
    Dim objSht As Object
    Dim WK As Object
    Dim i As Integer
    Dim LastRow As Long
    Dim R As Long
    Dim strValue As String
    Dim sheetExist As Boolean
    Dim strSQL As String
    Dim strErr As String
    Dim strStep As String
     
    On Error GoTo errParagraph
     
    SuppressAltEnter = "Open Excel"
    strStep = "Open Excel"
    Set objXL = CreateObject("Excel.Application")
     
    'open Excel file :
    Set objWB = objXL.workbooks.Open(strPathFileMonFicher)
     
     
    'Verify the sheet VALUES does exist
    strStep = "Verify the sheet VALUES does exist"
    sheetExist = False
    For i = 1 To objWB.sheets.Count
        strStep = "looking for  the name of the sheet " & i
        If objWB.sheets(i).Name = "VALUES" Then
            sheetExist = True
        End If
    Next i
    If Not sheetExist Then
        'The sheet VALUES is not present in the Excel spreadsheet
        SuppressAltEnter = "The sheet VALUES is not present in the Excel File"
        strStep = "The sheet VALUES is not present in the Excel File"
        objWB.Close False       'Do not save
        Set objWB = Nothing
        Set objWB = Nothing
        Set objXL = Nothing
        Exit Function
    End If
     
    'La feuille qui nous intéresse et que l'on doit modifier est la feuille VALUES
    objWB.sheets("VALUES").Activate
     
    'Trouver la dernière ligne de la feuille
    'LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    strStep = "looking for last row"
    objWB.sheets("VALUES").UsedRange        'Refresh UsedRange
    LastRow = objWB.sheets("VALUES").UsedRange.Rows(objWB.sheets("VALUES").UsedRange.Rows.Count).Row
    strStep = "lastRow = " & LastRow
     
    'Lire la feuille de la dernière ligne à la seconde en remontant.  La première ligne contient des titres.
    For R = LastRow To 2 Step -1
        Debug.Print "R = ", R
        'find column M.    Je suis sûr et certain que ma valeur à changer est en colonne M parce que les fonctions précédentes de mon process on vérifier le format du fichier et les noms des colonnes.
        strValue = objWB.sheets("VALUES").Cells(R, "M")
        strStep = "processing Excel row " & R & "for Value " & strValue
        'Replace the Alt-Enter by a space.
        strValue = Replace(strValue, Chr(10), " ")
        objWB.sheets("VALUES").Cells(R, "M") = strValue
    Next R
     
    strStep = "fermeture de Excel"
    objWB.Close True
    DoEvents
    objXL.Quit
     
    Set objSht = Nothing
    Set objWB = Nothing
    Set objXL = Nothing
     
    SuppressAltEnter = "OK"
     
    Exit Function
     
    errParagraph:
        'Les messages d'erreur de Microsoft contiennent parfois une apostrophe or l'apostrophe est un charactère réservé de la syntaxe SQL.  Je la remplace par un espace.
        strErr = Replace(Err.Description, "'", " ")
        strSQL = "INSERT INTO [tblLog] (Func, Msg1, Msg2, DateStamp) " & _
                 "VALUES ('SuppressAltEnter', '" & strErr & "', '" & strStep & "', Now())"
        'J'enrégistre le message d'erreur dans une table de Log.  Quand l'utilisateur me téléphonera furieux à cause d'une erreur, je pourrai voir les détails.
        CurrentDb.Execute strSQL
        MsgBox "Error in Suppress AltEnter.   I quit.", vbCritical
        Application.Quit
    End Function

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

Discussions similaires

  1. [2012] SSIS- Import fichier Excel avec cellules fusionnées
    Par tasnimen dans le forum SSIS
    Réponses: 10
    Dernier message: 21/10/2016, 13h48
  2. [ODS] Import Fichier Excel avec cellules fusionnées
    Par Keddy dans le forum ODS et reporting
    Réponses: 2
    Dernier message: 24/10/2014, 22h37
  3. Réponses: 9
    Dernier message: 27/06/2006, 17h55
  4. Comment lire le contenu en arabe d'une cellule excel avec
    Par deneche dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/03/2006, 11h01
  5. Remplir les cellules Excel avec des variables VB
    Par rupeni dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/11/2005, 10h31

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