kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007
-
19 juin 2007 à 08:46
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 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")
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 19 juin 2007 à 08:59
Salut,
Avant d'aller plus loin, je doit te dire qu'il y a des erreurs de compréhension.
Exemple
Dim NomDuFichierNomDuFichier InputBox( "Entrez le nom du fichier à importer " ) > Ici NomDuFichier est une StringSet NomDuFichier CreateObject( "Excel.application" ) > ICi cela va devenir une appli Excel
Pas tres logique tout ca.
Si tu veux ouvrir le classeur NomDuFichier
Dim xls As Excel.Application 'Excel
Dim MonClasseur As Excel.Workbook ' Le classeur
Set xls = New Excel.Application
'Si NomDuFichier est un chemin valide de classeur (pas verifiée)
Set MonClasseur = xls.Workbooks.Open(NomDuFichier)
'ou bien au vu du bas de ton post
Set MonClasseur = xls.Workbooks.Open(Pathfic & NomFic)
'Si il n'existe et que tu veux le créer
Set MonClasseur = xls.Workbooks.Add
Call MonClasseur.SaveAs(Pathfic & NomFic), ----
[code.aspx?ID=41455 By Renfield]
Dopnc en fait tout dépends de ce que tu souhaites faire exactement. il te faut donc mieux préciser.
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 09:25
Pour le NomDuFichier, ce que je voulais en fait, c'est que l'utilisateur entre le nom du fichier à importer, donc me servir du nom entrer pour apres ouvrir ce fichier...
Petite précision mon code s'arrete et ne rentre pas a l'ouverture du classeur d'importation.
Merci de ta réponse jrivet, mais ça ne marche toujours pas
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 10:29
Ben en fait je n'ai pas untilisé CommonFileDialog tout simplement parce que je ne connais pas... j'ai commencé VBA il y a 1 semaine... Pourrais-tu m'expliquer ton CommonFileDialog stp?
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)
Dim MonClasseur As Excel.Workbook 'Le classeur
Set xls = New Excel.Application
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
Set MonClasseur = xls.Workbooks.Open(Pathfic & NomFic)
MsgBox ("Le classeur d'importation est ouvert")
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 19 juin 2007 à 10:37
Re,
Ok je vais essayer de te faire un ptit code d'exemple en suivant au mieux l'idée du code existant.
NOTE: Tu développes avec ACCESS c'est bien cela?
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 11:19
Dans le fichier excel les données se trouvent toujours dans la feuille 1 et que uniquement dans la feuille 1.
Par contre qu'est ce que tu entant par données "correct"?
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 19 juin 2007 à 11:21
Re,
Ce que j'entends par correct c'est par exemple des fichiers Excel contenant des données dans la feuille 1 mais qui ne corresponde pas à ce que tu veux insérer dans les tables
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 11:28
Ok, ben les données se trouvant sur la feuille 1 corespondent obligatoirement à ce qui est inseré dans les tables. Mais si effectivement elles ne correspondent pas (ce qui est tres improbable) je n'ai pas reflechi à ce probleme...
Mais honnetement les données doivent corespondres.
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 11:50
Oui j'avais déjà regarder de ce coté là mais ça n'avais pas donné grand chose, je ne pense pas que ce soit la méthode la plus approprié à ce que l'on me demande de réaliser (ça n'est que mon avis de débutant...)
Mais merci de ta reponse MPI
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 19 juin 2007 à 11:51
Salut,
A ben j'allais le dire pour oCmd.TransferSpreadsheet
[auteurdetail.aspx?ID=1090549 kido87]: LIT BIEN MES COMMENTAIRES
Le code suivant ne fonctionen surement pas sans petites modifications mais il te montre la facon de procéder
'Depuis l'IDE VBA
'Menu Outils => Références => Microsoft Common Dialog Control 6.0 (SP6)
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 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 Integer 'Compteur => UN COMPTEUR N A PAS A ETRE DE TYPE STRING
Dim NomDuFichier 'Nom du fichier à importer (insertion des cellule Excel)
Dim xls As Excel.Application 'Excel
Dim MonClasseur As Excel.Workbook 'Le classeur
Dim MaFeuilleDeDonnees As Excel.Worksheet 'la Feuille
Dim CDialog As New MSComDlg.CommonDialog 'la boite de dialog
With CDialog
'Répertoire d'ouverture
.InitDir = "C:\"
'Filtre sur les Classeur Excel
.Filter = "*.xls Classeur Excel|*.xls"
'Montre la boite de dialogue ouverture de fichier
.ShowOpen
'Récupère le CHEMIN ET LE NOM choisi
NomDuFichier = .FileName
End With
If NomDuFichier = vbNullString Then
Call MsgBox("Veuillez sélectionner un fichier", vbExclamation Or vbOKOnly, "Attention !!!")
Exit Sub
End If
Set Dbs CurrentDb 'CurrentDb> Suivi_activites
'Initialisation Nom de la table d'importation n°1
NomTable = "Projets"
'Initialisation Nom de la table d'importation n°2
NomTable2 = "Agents"
'Ouverture de l'appli EXCEL
Set xls = New Excel.Application
'OUverture du classeur Excel Choisi plus haut
Set MonClasseur = xls.Workbooks.Open(NomDuFichier)
'Affectation de notre objet Feuille
Set MaFeuilleDeDonnees = MonClasseur.Worksheets(1)
Call MsgBox("Le classeur d'importation est ouvert", vbInformation Or vbOKOnly)
'Creation des tables d'importation
'ATTENTION Num_projet n'est pas autoincrément
'ATTENTION QUE SE PASSE T IL SI LES TABLES EXISTENT DEJA
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")
'REGARDER DE CE COTE CAR PEU ETRE PLUS SIMPLE
'Call DoCmd.TransferSpreadsheet(acImport, acSpreadsheetTypeExcel9, "Projets", NomDuFichier)
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
'ATTENTION IL SEMBLE QU'IL TE MANQUE DES DONNEES
'OU BIEN QU'ELLE NE CONCORDES PAS AVEC LA TABLE
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
Avancement = .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 ('" & Num_projet & "','" & Semaine_realisation & "','" _
& Metier & "','" & Projet & "','" & Description & "','" & Tache & "','" & Temps_passe & "');"
Dbs.Execute SQL
'POURQUOI INSERER SI PAS RECUPERER LES DONNEES RELATIVES AU AGENTS
' SQL = "INSERT INTO NomTable2 (Num_agent, Nom_agent, Num_projet) values ('" & VNum_agent & "','" & VNom_agent & "','" & VNum_projet & "');"
' Dbs.Execute SQL
j = j + 1
Loop
End With
'Fermeture du classeur d'Importation
'False = pas sauvegarder les changements
Call MonClasseur.Close(False)
'Quitte l'appli Excel
Call xls.Quit
MsgBox ("Le classeur d'importation est fermé")
MsgBox (" Importation des données effectuée ")
err:
'Destruction des objets
Set xls = Nothing
Set MonClasseur = Nothing
Set MaFeuilleDeDonnees = Nothing
Set CDialog = Nothing
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 11:58
ahh!!! Merci te ta réponse et de ton code je vais tester, et m'appuyer sur ton code. Merci beaucoup, je vais tester tout a l'heure. je te tiens au courant.
Merci encore à ceux qui ont repondus
++
kido87
Messages postés39Date d'inscriptionlundi 21 mai 2007StatutMembreDernière intervention29 juin 2007 19 juin 2007 à 14:01
Oui c'est encore moi, je suis en train d'exploiter ton code qui est exellent mais il se trouve que j'ai un petit soucis avec:
Dim CDialog As New MSComDlg.CommonDialog
j'ai une erreur:
erreur de compilation:
type défini par l'utilisateur non défini
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 19 juin 2007 à 14:35
Salut,
Comment ca il ne fait rien... (toujours penser à décrire son problème le mieux possible)
Je ne l'ai pas écrit comme ca sans le testé.
CHEZ MOI
J'ai résussi à choisir un fichier avec la boite de dialogue, à creer les tables a ouvrir le classeur, mais pour la boucle de données, il faut que tu lises mes commentaires car ta récupération de données n'est pas "LOGIQUE" par rapport au données à insérer dans les tables.