[VBA] Problème importation feuille Excel vers Access

Résolu
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007 - 19 juin 2007 à 08:46
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007 - 29 juin 2007 à 16:12
Bonjours à tous, je suis nouveau et pas tres expérimenté en VBA.... Je suis actuellement en stage et on ma demandé de faire un petit code d'importation/convertion Excel vers Acess.
Je vous mon tre  mon code:

Sub Cmd_Importation_Click()
     On Error GoTo err
    
     Dim Num_agent As Integer 'AutoIncrement(pas de numéro d'agent)
     Dim Nom_agent As String 'Nom de l'agent
     Dim Num_projet As Integer 'AutoIncrement (pas de numéro de projet)
     Dim Semaine_realisation As String 'numéro de la semaine de réalisation
     Dim Metier As String 'Métier
     Dim Projet As String 'Nom du projet
     Dim Description As String 'description de l'activité réalisée
     Dim Tache As String 'Avancement (en pourcentage ou terminé)
     Dim Temps_passe As Integer 'Temps_passé sur le projet (en h)
                                                                                         
     Dim SQL As String 'Variable qui permet de créer une table
     Dim Text1 As String 'Variable qui va contenir le nom du fichier à importer
     Dim Text2 As String 'Variable qui va contenir l'emplacement du fichier à importer
     Dim Text3 As String 'Variable qui va contenir le nom de la table d'importation n°1
     Dim Text4 As String 'Variable qui va contenir le nom de la table d'importation n°2
     Dim NomFic As String 'Nom du fichier à importer
     Dim Pathfic As String 'Emplacement du fichier à importer
     Dim NomTable As String 'Nom de la table d'importation n°1
     Dim NomTable2 As String 'Nom de la table d'importation n°2
     Dim j As String 'Compteur
     Dim xls As Excel.Application 'Excel
     Dim Rsg As String 'Renseignement de la boite de dialogue, rentré par l'utilisateur
     Dim NomDuFichier 'Nom du fichier à importer (insertion des cellule Excel)
             
           
     NomDuFichier = InputBox("Entrez le nom du fichier à importer ")
     If (NomDuFichier <> "") Then
     MsgBox NomDuFichier
     Else
     réponse = MsgBox("Nom du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
     Exit Sub
     End If
                  Set Dbs CurrentDb 'CurrentDb> Suivi_activites
     Set NomDuFichier = CreateObject("Excel.application")
    
    
     'Initialisation du fichier a Importer
     Rsg = NomDuFichier
     Text1 = Rsg
     ClasseurXLS = Rsg
     If (Text1 <> "") Then
     NomFic = Text1
     NomFic = NomFic & ".xls"
     Else
     réponse = MsgBox("Nom du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
     Exit Sub
     End If
        
    
     'Initialisation Emplacement à importer
     Rsg = InputBox("Entrez l'emplacement à importer  : ")
     If (Rsg <> "") Then
     MsgBox Rsg
     End If
     Text2 = Rsg
     If (Text2 <> "") Then
     Pathfic = Text2
     Else
     réponse = MsgBox("Emplacement du fichier à importer manquant", vbExclamation + vbOKOnly, "Attention !!!")
     Exit Sub
     End If
    
    
     'Initialisation Nom de la table d'importation n°1
     Text3 = "Projets"
     If (Text3 <> "") Then
     NomTable = Text3
     Else
     réponse = MsgBox("Nom de la table d'importation manquant", vbExclamation + vbOKOnly, "Attention !!!")
     Exit Sub
     End If
    
     'Initialisation Nom de la table d'importation n°2
     Text4 = "Agents"
     If (Text4 <> "") Then
     NomTable2 = Text4
     Else
     réponse = MsgBox("Nom de la table d'importation n°2 manquant", vbExclamation + vbOKOnly, "Attention !!!")
     Exit Sub
     End If
    
    
     'Ouverture du classeur d'Importation
                                                                                                           
     NomDuFichier.Workbooks.Open Pathfic & NomFic
     MsgBox ("Le classeur d'importation est ouvert")
         
     'Creation des tables d'importation
    
     SQL = "create table " & NomTable & "(Num_projet integer, Semaine_realisation string, Metier string, Projet string, Description string, Tache string, Temps_passe integer)"
     Dbs.Execute SQL
     SQL = "create table " & NomTable2 & "(Num_agent integer, Nom_agent string, Num_projet integer)"
     Dbs.Execute SQL
     MsgBox ("Tables d'importation crées")
    
     j = 5 'on initialise j à 5 (Cellules vides avant la ligne 5)
     Do While NomDuFichier.Cells(j, 1) <> ""
     'Recuperations des données lignes par lignes
     Semaine_realistion = NomDuFichier.Cells(j, 3)
     Metier = NomDuFichier.Cells(j, 4)
     Projet = NomDuFichier.Cells(j, 5)
     Activite_realisee = NomDuFichier.Cells(j, 6)
     Temps_passe = NomDuFichier.Cells(j, 7)
     Avancement = NomDuFichier.Cells(j, 8)
     'Insertion des données dans la table
     SQL = "INSERT INTO NomTable (Num_projet, Semaine_realistion, Metier, Projet, Description, Tache, Temps_passe) values ('" & VNum_projet & "','" & VSemaine_realisation & "','" & VMetier & "','" & VProjet & "','" & VDescription & "','" & VTache & "','" & VTemps_passe & "');"
     Dbs.Execute SQL
     SQL = "INSERT INTO NomTable2 (Num_agent, Nom_agent, Num_projet) values ('" & VNum_agent & "','" & VNom_agent & "','" & VNum_projet & "');"
     Dbs.Execute SQL
     j = j + 1
     Loop
                                                                                    
   
     'Fermeture du classeur d'Importation
     NomDuFichier.Workbooks.Close
     MsgBox ("Le classeur d'importation est fermé")
    
    
     MsgBox (" Importation des données effectuée ")
     Exit Sub
    
err:
     NomDuFichier.Workbooks.Close
     End Sub

J'ai quelques petits soucis au niveau de l'ouverture du classeur d'importation:
'Ouverture du classeur d'Importation
                                                                                                           
     NomDuFichier.Workbooks.Open Pathfic & NomFic
     MsgBox ("Le classeur d'importation est ouvert")

Voila si vous pouviez m'aider....
Par avance merci.

45 réponses

kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
19 juin 2007 à 14:45
Bne il ne se passe rien quand j'execute, j'essai de trouver le truc...
Je suis d'accord pour ma recupération de données, j'ai un prob de logique
merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 juin 2007 à 14:56
Re,
As tu supprimer la gestion d'erreur (cela aide pour développer de les voir)

essaie en mettant des points d'arrêt (F9) pour pouvoir ensuite débugguer au pas a pas (F8) et ainsi voir les lignes qui pourraient poser problème.

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
19 juin 2007 à 15:02
Et oui tu avais raison j'ai fais ce que tu m'a dit et effectivement je voi mon erreur:
Erreur d'execution'429':
Un composant ActiveX ne peut pas creer d'objet

merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 juin 2007 à 15:05
Re,
Bah oui mais je ne suis pas devin et ne peux pas t'aider si je ne sais pas sur quelle ligne il te marques cela.

De plus quelle version d'acces / Excel possèdes tu quel est ton WINDOWS

@+: Ju£i?n
Pensez: Réponse acceptée
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
19 juin 2007 à 15:12
Ah oui mince la ligne désolé! Ben ça me met l'erreur a la ligne:
 With CDialog

Ma version windows est : Microsoft Windows XP [version 5.1.2600]
Exel 2003
Access 2003

merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 juin 2007 à 15:17
Salut,
Tu peux m'envoyer ta base (et donc ton code) à epsylon9@gmail.com (car la je seche)
Si ce n'est pas top Secret bien entendu.

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
19 juin 2007 à 15:21
Je ne peux pas t'envoyer la base, je bosse pour une mairie et sur cette bas il ya des choses personnelles concernant les activités de  la mairie et des agents.
Je peux par contre t'envoyer le code ainsi qu'un exemple de feuille Excel que je dois importer
ok?

merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
19 juin 2007 à 15:24
re,
ok on va essayer

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 08:35
Re, j'ai toujours la même erreur avec mon:
With CDialog

Erreur d'execution'429':
Un composant ActiveX ne peut pas creer d'objet

Aidez-moi SVP!!!!
merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 juin 2007 à 08:57
Salut,
Peu tu essayer d'inserer ce meme type d'objet dans un form (je l'avait fait hier) je ne sais pas si cela peu aide

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 09:17
Salut, je suis désolé mais je comprends pas ce que tu veux dire (je suis débutant...)

Merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 juin 2007 à 09:35
Salut,
Et bien a partir de ma boite a outils (là ou tu peux selectionner un TextBox ou Bouton, ...) tu as une option autre controle: cherche alors dans la liste Microsoft Common Dialog Control version 6.0

Il est alors insérer dans la feuille.

Puis réessaie pour voir si tu as la meme erreur

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 09:43
Si c'est dans les références que tu parle, je l'avais deja mis
Il faudrait peut etre mieu que je t'envoi ma abse par mail non?

merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 juin 2007 à 09:45
Salut,
Bah si tu veux .
NOTE: j'espere qu'une 2003 est compatible office 2000

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 09:55
Ah je sais pas... Tu me diras si tu a bien reçu mon mail stp.
merci pour ton aide!
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 juin 2007 à 09:55
Re,
Recu.. je regarde ca tout de suite.

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 09:59
ok, merci
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
20 juin 2007 à 10:12
Salut,
Alors la je suis désolé ca me dépasse...
LE code que tu m'a envoyé (dans le module importation) marche Nickel chez moi....

(hors mis le fait que  qu'il y a un End SUb en trop à la fin mais ce n'est en rien la cause)...

Essaie peu être ainsi (mais je ne suis pas sur que cela change qqch)

Dim CDialog As Object
Set CDialog = CreateObject("MSComDlg.CommonDialog")

      'Répertoire d'ouverture
      CDialog.InitDir = "C:\"
      'Filtre sur les Classeur Excel
      CDialog.Filter = "*.xls Classeur Excel|*.xls"
      'Montre la boite de dialogue ouverture de fichier
      Call CDialog.ShowOpen
      'Récupère le chemin et le nom choisi
      NomDuFichier = CDialog.FileName
, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
20 juin 2007 à 10:26
Oui je viens de voir le End Sub.
Ben j'ai essayé ta méthode mais c'est toujours la même erreur... Je vais essayer de changer de machine peut etre lol, en tout cas merci de ton aide!!
par contre.... lol au niveau de la récupération des données, as-tu pu voir si ma méthode était bonne et sinon tu peux, avec le fichier excel que je t'ai passé me donner ton avis sur ce qu'il faudrais faire. (si tu a le temps lol)

merci
3
kido87 Messages postés 39 Date d'inscription lundi 21 mai 2007 Statut Membre Dernière intervention 29 juin 2007
21 juin 2007 à 09:52
Salut jrivet, j'espere que tu verra mon message lol.
J'en suis toujours au même point, je voulais juste avoir,  à partir du fichier que je t'ai  envoyé, ton avis sur la récupération de données, parce que je n'y arrive pas...
Ma partie de code étant:

j = 5 'on initialise j à 5 (Cellules vides avant la ligne 5)
   With MaFeuilleDeDonnees
       Do While Not IsEmpty(.Range("A" & CStr(j)))
      
           'Recuperations des données lignes par lignes
           Semaine_realisation = .Range("C" & CStr(j)).Value
           Metier = .Range("D" & CStr(j)).Value
           Projet = .Range("E" & CStr(j)).Value
           Activite_realisee = .Range("F" & CStr(j)).Value
           Temps_passe = .Range("G" & CStr(j)).Value
           Tache = .Range("H" & CStr(j)).Value
          
           'Insertion des données dans la table
           SQL = "INSERT INTO NomTable (Num_projet, Semaine_realistion, Metier, Projet, Description, Tache, Temps_passe) values ('" & VNum_projet & "','" & VSemaine_realisation & "','" & VMetier & "','" & VProjet & "','" & VDescription & "','" & VTache & "','" & VTemps_passe & "');"
           Dbs.Execute SQL
          
           j = j + 1
       Loop
   End With

merci
3
Rejoignez-nous