Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/11/2011, 07h29   #1
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Par défaut Erreur sur Importation

Bonjour le forum

J' ai récupéré ce code qui permet de faire de l' import de donnée excel vers access, mais j' ai un méssage d' erreur que je n' arrive pas à corriger. Voici le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Public Function ImportEXcel_v2()
DoCmd.SetWarnings False
Dim appexcel As Excel.Application
Dim wbexcel As Excel.Workbook
Dim i As Integer
Dim sql As String
 
Set appexcel = CreateObject("Excel.Application")
'appexcel.Visible = True
Set wbexcel = appexcel.Workbooks.Open("d:\tel_ equipe.xls")
appexcel.Sheets("tetard").Select
While appexcel.Cells(i, 1).Value <> ""
'Liste3.AddItem appexcel.Cells(i, 1), i
sql = "INSERT INTO tblContacts ([Titre], [NomContact], [PrénomContact], [Société], [Fonction],
[Adresse de messagerie], [Téléphone professionnel], [Téléphone mobile],[Numéro de télécopie] )
 VALUES('" + appexcel.Cells(i, 1) + "','" + appexcel.Cells(i, 2) + "','" + appexcel.Cells(i, 3)
 + "','" + appexcel.Cells(i, 4) + "','" + appexcel.Cells(i, 5) + "','" + appexcel.Cells(i, 6) + "');"
DoCmd.RunSQL sql
i = i + 1
Wend
wbexcel.Close (True)
End Function
Le message d' erreur porte sur
Code :
While appexcel.Cells(i, 1).Value <> ""
Erreur
Citation:
Erreur d' execution 1001
Ereur definie par l' application ou par l' objet
Merci d' avance pour toute aide
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2011, 08h34   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
C'est normal tu fait référence à un objet Range directement à partir de l'application, il faut préciser le classeur et la feuille sur laquelle tu travailles.

J'ai corrigé aussi ta chaîne SQL (voir les commentaires dans le code)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim TheSheet As Worksheet
Dim TheCell As Range
 
Set appexcel = CreateObject("Excel.Application")
'appexcel.Visible = True
Set wbexcel = appexcel.Workbooks.Open("d:\tel_ equipe.xls")
'ici il faut faire référence au classeur plutot qu'a l'application
'et éviter les select
Set TheSheet = wbexcel.Sheets("tetard") '.Select
While TheSheet.Cells(i, 1).Value <> ""
'Liste3.AddItem appexcel.Cells(i, 1), i
'Si tu veux aller à la ligne il faut utiliser "_" _
(particularité avec une chaine de caracteres, _
il faut fermer les guillement età la ligne suivante placer & et réouvrir les guillements)
'Pour la concaténation de texte c'est & pas +
Sql = "INSERT INTO tblContacts ([Titre], [NomContact], [PrénomContact], [Société], [Fonction]," _
    & "[Adresse de messagerie], [Téléphone professionnel], [Téléphone mobile],[Numéro de télécopie])" _
    & "VALUES('" _
    & TheSheet.Cells(i, 1) & "','" & TheSheet.Cells(i, 2) & "','" & TheSheet.Cells(i, 3) _
    & "','" & TheSheet.Cells(i, 4) & "','" & TheSheet.Cells(i, 5) & "','" & TheSheet.Cells(i, 6) & "');"
DoCmd.RunSQL Sql
i = i + 1
Wend
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/11/2011, 08h12   #3
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonjour Qwazerty et le forum
Merci de m' avoir répondu et fait la correction du code, j' ai fais un test et j' ai une erreur d' execution 1004-Erreur definie par l' application ou par l' objet
et le deboggeur m' indique la requete sql
Code :
1
2
3
4
5
sql = "INSERT INTO tblContacts ([Titre], [NomContact], [PrénomContact], [Société], [Fonction]," _
    & "[Adresse de messagerie], [Téléphone professionnel], [Téléphone mobile],[Numéro de télécopie])" _
    & "VALUES('" _
    & TheSheet.Cells(i, 1) & "','" & TheSheet.Cells(i, 2) & "','" & TheSheet.Cells(i, 3) _
    & "','" & TheSheet.Cells(i, 4) & "','" & TheSheet.Cells(i, 5) & "','" & TheSheet.Cells(i, 6) & "');"
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 18h00   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Il faudrait initialisé i à 1 en ajoutant
juste avant la boucle While, car la premier cellule a pour coordonnées Cells(1,1), zéro n'est donc pas une valeur correct.

Mais bon j'avais pas pris garde à cette boucle While (j'avais du prévoir de la retiré puisque j'avais déclarer TheCell), utilise plutôt For Each Next pour un cas comme celui la, voila ce que ça donne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Set appexcel = CreateObject("Excel.Application")
'appexcel.Visible = True
Set wbexcel = appexcel.Workbooks.Open("d:\tel_ equipe.xls")
'ici il faut faire référence au classeur plutot qu'a l'application
'et éviter les select
Set TheSheet = wbexcel.Sheets("tetard") '.Select
For Each TheCell In TheSheet.Range("A1", TheSheet.Cells(TheSheet.Rows.Count, "A").End(xlUp))
    If TheCell.Value <> "" Then
        Sql = "INSERT INTO tblContacts ([Titre], [NomContact], [PrénomContact], [Société], [Fonction]," _
            & "[Adresse de messagerie], [Téléphone professionnel], [Téléphone mobile],[Numéro de télécopie])" _
            & "VALUES('" _
            & TheCell & "','" & TheCell.Offset(0, 1) & "','" & TheCell.Offset(0, 2) _
            & "','" & TheCell.Offset(0, 3) & "','" & TheCell.Offset(0, 4) & "','" & TheCell.Offset(0, 5) & "');"
 
        DoCmd.RunSQL Sql
    End If
Next
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h13   #5
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonjour Qwazerty et le forum
J' ai testé ta modification et j' ai l' erreur suivante:
Erreur d' execution 13
Incompatibilité de type
Et le deboggeur me signale cette ligne
Code :
Set TheSheet = wbexcel.Sheets("tetard")
Pourtant la variable TheSheet est déclaré aisi que qbexcel
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 06h16   #6
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Les deux lignes suivantes sont toujours bien présente dans ton code ?
Code :
1
2
Set wbexcel = appexcel.Workbooks.Open("d:\tel_ equipe.xls")
Set TheSheet = wbexcel.Sheets("tetard")
Si oui, place un espion sur chacune d'elle pour vérifier leur contenu.

"tetard" est bien une feuille excel standard? ce ne serait pas une feuille graphique?

Sinon place un fichier demo si possible.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 18h02   #7
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonsoir Qwazerty et le forum
Suite à ta réponse, j' ai fait une vérification et j' ai remarqué qu' il y avait un espace dans le nom du fichier excel, j' ai fait la modif et entestant le code j' ai l' erreur suivante; erreur d' execution 3346
Le nombre de valeur de la raquete doit coincider avec le nombre de champs destinantion
Ma table contact a environ une vingtaine de champs. Faut il pour une importation que le nombre de champs soit egal des deux cotés
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 18h30   #8
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Je serais tenté de dire oui, il me semble logique que les 2 table doivent être de structure équivalente. Le plus simple pour toi serais de faire un essai avec une table "excel" ayant la même structure que ta table Access de destination.

Je n'ai pas l'habitude d'utiliser ces méthodes, d'autres te répondront surement, si tu n'as pas de réponse ici, il serait peut être opportun de te rapprocher du forum Access VBA étant donnée que la partie qui coince est plus liée au fonctionnement de l'import de base de donnée plutôt qu'au code en lui même.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 14h30   #9
Membre régulier
 
Inscription : avril 2005
Messages : 251
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 251
Points : 86
Points : 86
Bonjour Qwazerty et le forum
Merci d' avoir pris le temps d' essayé de m' aidé, je suivrai tes conseils et me tournerai vers le forum access. Je clôture le post
Bonne continuation
Aladin
Aladin_23 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web