Précédent   Forum du club des développeurs et IT Pro > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 10h56   #1
blacklolou
Invité régulier
 
Homme
Développeur .NET
Inscription : 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 :
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
blacklolou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2013, 00h09   #2
tee_grandbois
Membre Expert
 
Avatar de tee_grandbois
 
Homme
Ingénieur-Consultant
Inscription : novembre 2004
Messages : 667
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 : 667
Points : 1 188
Points : 1 188
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 :
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.
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 14h31   #3
blacklolou
Invité régulier
 
Homme
Développeur .NET
Inscription : 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
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 :
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
blacklolou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 22h10   #4
tee_grandbois
Membre Expert
 
Avatar de tee_grandbois
 
Homme
Ingénieur-Consultant
Inscription : novembre 2004
Messages : 667
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 : 667
Points : 1 188
Points : 1 188
Bonsoir,
si tu avais repris la totalité de mon code, tu n'aurais pas eu ce problème :
Code :
lastLine = xlSheet.cells(rows.Count, 1).End(xlUp).Row
Code :
lastLine = xlSheet.Cells(xlSheet.Cells.Rows.Count, 1).End(xlUp).Row
idem pour lastField et firstLine
tee_grandbois est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 10h24   #5
blacklolou
Invité régulier
 
Homme
Développeur .NET
Inscription : 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
Arf effectivement je suis allé trop vite..
Merci pour ton aide
@+ !
blacklolou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h52.


 
 
 
 
Partenaires

Hébergement Web