p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : avril 2012
    Messages : 33
    Points : 6
    Points
    6

    Par défaut Erreur gestion excel via code VBA dans access pour importation

    Bonjour,

    Je souhaite importer des données d'un onglet excel dans access, pour ce faire je commence par nommer la plage de donnée excel via un code VBA dans access. Probleme: lorsque le nom de l'onglet comporte des espaces la macro plante.. si je change le nom de l'onglet à la main et relance mon code, ca marche! Comment éviter cette erreur sans avoir à préalablement renommer mon onglet?

    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
     
    Function NameRange_xls(range_name As String, filePath As String, wsSource As String) As Boolean
    '------------------------------------------------------
    'Déclarations
    '------------------------------------------------------
    Dim xlApp       As Excel.Application
    Dim xlSheet     As Excel.Worksheet
    Dim xlBook      As Excel.Workbook
    Dim lastLine    As Long
    Dim lastField   As Long
    Dim firstLine   As Long
     
    Dim rangeToName As range
    '------------------------------------------------------
    'initialiser les variables et ouvrir le fichier excel
    '------------------------------------------------------
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open(filePath)
    Set xlSheet = xlBook.sheets(wsSource)
    On Error GoTo NameRange_xls_Err
     
    '------------------------------------------------------
    'repérer la zone de données et la nommer
    '------------------------------------------------------
    xlSheet.Select
    xlBook.sheets(wsSource).Unprotect ' s'assurer que l'onglet n'est pas protéger pr permettre de nommer le range
    xlSheet.Select
    Dim protection As Boolean
    protection = xlSheet.ProtectionMode
     
    lastLine = cells(rows.Count, 1).End(xlUp).Row
    lastField = cells(lastLine, 1).End(xlToRight).Column
    firstLine = cells(lastLine, 1).End(xlUp).Row
    Set rangeToName = range(cells(firstLine, 1), cells(lastLine, lastField))
    rangeToName.Name = range_name
    '------------------------------------------------------
    'Fermeture du fichier excel + libération de la mémoire
    '------------------------------------------------------
    NameRange_xls_Exit:
        xlBook.Save ' sauver précédent
        xlBook.Close (True)
        xlApp.Quit
     
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
        NameRange_xls = True
        Exit Function
     
    NameRange_xls_Err:
        Resume NameRange_xls_Exit
     
    End Function

  2. #2
    Membre Expert
    Avatar de tee_grandbois
    Homme Profil pro
    Ingénieur-Consultant
    Inscrit en
    novembre 2004
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur-Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2004
    Messages : 665
    Points : 1 204
    Points
    1 204

    Par défaut

    Bonsoir blacklolou,
    d'après ce que j'ai pu tester, les espaces dans le nom d'un onglet n'empêche pas de nommer une plage.
    Donc le problème provient d'ailleurs.
    Dan le code que tu as posté, comme tu trappes l'erreur sans l'afficher, tu ne peux pas savoir si cela a planté ou pas, ni à quelle instruction.
    J'ai modifié ton code en ajoutant ce qui, à mon sens, manquait pour que cela fonctionne (la référence à l'objet xlSheet):
    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
    Function NameRange_xls(range_name As String, filePath As String, wsSource As String) As Boolean
    '------------------------------------------------------
    'Déclarations
    '------------------------------------------------------
    Dim xlApp       As Excel.Application
    Dim xlSheet     As Excel.Worksheet
    Dim xlBook      As Excel.Workbook
    Dim lastLine    As Long
    Dim lastField   As Long
    Dim firstLine   As Long
     
    Dim rangeToName As Range
    '------------------------------------------------------
    'initialiser les variables et ouvrir le fichier excel
    '------------------------------------------------------
    Set xlApp = CreateObject("Excel.Application")
    Set xlBook = xlApp.Workbooks.Open(filePath)
    Set xlSheet = xlBook.Sheets(wsSource)
    On Error GoTo NameRange_xls_Err
     
    '------------------------------------------------------
    'repérer la zone de données et la nommer
    '------------------------------------------------------
    xlSheet.Select
    xlBook.Sheets(wsSource).Unprotect ' s'assurer que l'onglet n'est pas protégé pr permettre de nommer le range
    xlSheet.Select
    Dim protection As Boolean
    protection = xlSheet.ProtectionMode
    lastLine = xlSheet.Cells(xlSheet.Cells.Rows.Count, 1).End(xlUp).Row
    lastField = xlSheet.Cells(lastLine, 1).End(xlToRight).Column
    firstLine = xlSheet.Cells(lastLine, 1).End(xlUp).Row
    Set rangeToName = xlSheet.Range(xlSheet.Cells(firstLine, 1), xlSheet.Cells(lastLine, lastField))
    rangeToName.Name = range_name
     
    '------------------------------------------------------
    'Fermeture du fichier excel + libération de la mémoire
    '------------------------------------------------------
    NameRange_xls_Exit:
        xlBook.Save ' sauver précédent
        xlBook.Close (True)
        xlApp.Quit
     
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
        NameRange_xls = True
        Exit Function
     
    NameRange_xls_Err:
        MsgBox err.Number & " / " & err.DESCRIPTION
        Resume NameRange_xls_Exit
     
    End Function
    Dis-moi si cela a résolu ton problème.

  3. #3
    Invité régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : avril 2012
    Messages : 33
    Points : 6
    Points
    6

    Par défaut

    Bonjour tee_grandbois

    Merci pour tes remarques et conseils. J'ai modifié mon code pour les prendre en compte; cependant j'ai toujours une erreur à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lastLine = xlSheet.cells(rows.Count, 1).End(xlUp).Row
    "1004 erreur définie par l'application ou par l'objet"..
    En modifiant le nom de l'onglet dans excel pour qu'il ne contienne pas d'espace, ca fonctionne toujours!

    Si tu as une autre piste je prend... je tourne un peu en rond là :s

  4. #4
    Membre Expert
    Avatar de tee_grandbois
    Homme Profil pro
    Ingénieur-Consultant
    Inscrit en
    novembre 2004
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Ingénieur-Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2004
    Messages : 665
    Points : 1 204
    Points
    1 204

    Par défaut

    Bonsoir,
    si tu avais repris la totalité de mon code, tu n'aurais pas eu ce problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lastLine = xlSheet.cells(rows.Count, 1).End(xlUp).Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lastLine = xlSheet.Cells(xlSheet.Cells.Rows.Count, 1).End(xlUp).Row
    idem pour lastField et firstLine

  5. #5
    Invité régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    avril 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : avril 2012
    Messages : 33
    Points : 6
    Points
    6

    Par défaut

    Arf effectivement je suis allé trop vite..
    Merci pour ton aide
    @+ !

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

Discussions similaires

  1. Code VBA dans Access et application VB.net
    Par H.Wilfrid dans le forum VB.NET
    Réponses: 0
    Dernier message: 18/06/2013, 11h27
  2. [AC-2003] transfert excel vers access en utilisant du code vba dans access
    Par esisa1 dans le forum Access
    Réponses: 1
    Dernier message: 06/05/2010, 15h04
  3. [XL-2003] Ouverture d'excel via Script VBA depuis Access avec Chargement objet de XLSTART
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2009, 18h04
  4. Erreur dans un code VBA dans Access
    Par Mathieu51 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/10/2009, 15h10
  5. Accés au donnés sur Excel via Code vba Access
    Par sakia dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/11/2007, 16h46

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