anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013
-
13 sept. 2012 à 09:48
anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013
-
18 sept. 2012 à 18:35
Bonjour à tous
j'ai un problème de conversion d'un code VB 2003 à 2007.
En effet, j'ai un code récupéré sur un forum qui permet de rajouter dans une table access un fichier excel cela dans la version 2003. au préalable je supprime la table et ensuite je lance la macro et ça marchait..
Etant passé sur les deux(access et exce)l au 2007 je rencontre quelques petits désagréments, le problème venant aussi dans le post : dois je le mettre sur excel ou access.. j'essaye Excel..
J'ai le code que j'ai essayé de modifier en premier et le code qui marche pour access 2003 et avec des fichiers d excel 2003 est à la fin.
j'ai modifié oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _ par oConn.Open "Provider='Microsoft.Jet.OLEDB.12.0';" & _ qui était conseillé dans un autre post.
et ça aussi de 4 à "12" mais en vain, j'ai du me tromper quelque part..
Cn.Open "Provider=Microsoft.Jet.OLEDB.12.0;" & _
"Data Source=" & Repertoire & "" & Fichier & ";" & _
"Extended Properties=""Excel 12.0;"""
Erreur Dim Cn as New ADODB.Connection
---> Erreur de compilation : Type défini par l'utilisateur non défini..
Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String, Feuille As String
Dim oCat As ADOX.Catalog
'-----------------TOP50-------------------------------------
Set oConn = New ADODB.Connection
oConn.Open "Provider='Microsoft.Jet.OLEDB.12.0';" & _
"Data Source= 'C:\Documents and Settings\RC1194\Desktop\test ACCESS 2007\Encaissements clients v1.accdb';"
'les données seront placés dans Table1
Set oRS = New ADODB.Recordset
oRS.Open "Select * from T-Mois", oConn, adOpenKeyset, adLockOptimistic
'------------------------------------------------------
'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Documents and Settings\RC1194\Desktop\test ACCESS 2007\2012"
Fichier = Dir(Repertoire & "\*.xlsx")
Do While Fichier <> ""
'Connection au classeur Excel
Cn.Open "Provider=Microsoft.Jet.OLEDB.12.0;" & _
"Data Source=" & Repertoire & "" & Fichier & ";" & _
"Extended Properties=""Excel 12.0;"""
'-------------------------
Set oCat = New ADOX.Catalog
Set oCat.ActiveConnection = Cn
'Récupére le nom de la Feuille:
'Attention: l'index correspond à un ordre alphabétique croissant
'et les plages de cellules nommées sont intégrées.
Feuille = oCat.Tables(0).Name
'-------------------------
'requête pour extraire les données de la Feuil1
oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic
' --- Transfert les données dans la base ---
Do While Not (oProdRS.EOF)
oRS.addNew
For j = 0 To oRS.Fields.Count - 2
oRS.Fields(j) = oProdRS.Fields(j).Value
Next j
oRS.Update
oProdRS.moveNext
Loop
'-------------------------------------------
Set oCat = Nothing
oProdRS.Close
'Fermeture de la connection au classeur Excel
Cn.Close
Fichier = Dir
Loop
'oRS.Close
Set oRS = Nothing
'Fermeture de la connection Access
oConn.Close
Set oConn = Nothing
End Sub
Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String, Feuille As String
Dim oCat As ADOX.Catalog
'-----------------TOP50-------------------------------------
Set oConn = New ADODB.Connection
oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
"Data Source= 'C:\Documents and Settings\RC1194\Desktop\Test appli\maBase.mdb';"
'les données seront placés dans Table1
Set oRS = New ADODB.Recordset
oRS.Open "Select * from Top50", oConn, adOpenKeyset, adLockOptimistic
'------------------------------------------------------
'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Documents and Settings\RC1194\Desktop\Test appli\sauvegarde\Suivi Top Production 10 derniers jours AC"
Fichier = Dir(Repertoire & "\*.xls")
Do While Fichier <> ""
'Connection au classeur Excel
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Repertoire & "" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;"""
'-------------------------
Set oCat = New ADOX.Catalog
Set oCat.ActiveConnection = Cn
'Récupére le nom de la Feuille:
'Attention: l'index correspond à un ordre alphabétique croissant
'et les plages de cellules nommées sont intégrées.
Feuille = oCat.Tables(0).Name
'-------------------------
'requête pour extraire les données de la Feuil1
oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic
' --- Transfert les données dans la base ---
Do While Not (oProdRS.EOF)
oRS.addNew
For j = 0 To oRS.Fields.Count - 2
oRS.Fields(j) = oProdRS.Fields(j).Value
Next j
oRS.Update
oProdRS.moveNext
Loop
'-------------------------------------------
Set oCat = Nothing
oProdRS.Close
'Fermeture de la connection au classeur Excel
Cn.Close
Fichier = Dir
Loop
'oRS.Close
Set oRS = Nothing
'Fermeture de la connection Access
oConn.Close
Set oConn = Nothing
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 sept. 2012 à 13:02
Salut
Pas tout détaillé, mais :
- vas sur <ce site> dont nous parlons en permanence dès qu'il s'agit de connexion aux DB
- Pour ton erreur, 2 choses :
D'abord, il faut ajouter la référence aux objets ADO dans ton projet :
"Microsoft ActiveX Data Objects X.Y Library"
X.Y : Soit 2.8, soit 6.1, mais 6.1 doit être du .Net - à vérifier.
Ensuite, la formulation correcte de l'utilisation de New :
Dim Toto As LeType
Set Toto = New LeType
et pas de New dans le Dim
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013 14 sept. 2012 à 14:18
Bonjour à vous deux
merci de votre retour
Je n'ai pas réussi malgré vos remarques, j'ai toujours la même erreur je n'ai pas du changer les bonnes choses.
Je vais regarder plus en détail ce week end je ne suis pas un programmeur en vba ni en rien du tout, il me faut un peu plus de temps pour comprendre!
merci en tout cas
Anthooooony
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 14 sept. 2012 à 14:41
Salut,
complètement d'accord avec jack sur l'utilisation du new
d'autan que l'un des principaux problèmes d'Xl2007 est que quelque type de variables ont changés ou ne sont plus présents.
Du coup il est préférable pour les variables objet d'utiliser le type Object quand c'est possible ou de vérifier que la référence utiliser avec Xl2003 est bien bien référencée dans Xl2007.
A+
Vous n’avez pas trouvé la réponse que vous recherchez ?
anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013 17 sept. 2012 à 18:05
Bonjour à tous
merci pour votre retour !
Je suis un peu à la rue ! Mais j'ai eu du bon grace à vous !
Alors juste j'ai pas tout compris avec le "new", j'ai essayé de l'enlevé à certains endroit mais la ligne devenait rouge je crois qu'a ce moment j'ai contrarié Excel et c'est pas bon quand il l'est !
Alors je n'ai plus de problème lorsque je lance la macro celle ci s'exécute sans embuche.
Cependant, le résultat est surprennant !Dans Access j'ai le nombre de ligne que j'avais dans excel mais sans contenu... j'ai essayé pour un test j'avais 1 jusqu'à 231 en nombre sur excel, et sur access j'ai 231 lignes totalement vide. J'ai bien paramétré access en numérique mais rien n'y fait..
Je me permets de vous remettre le code actualisé avec des petits bidouilles d'un amateur que je suis. Si vous avez une idée, j'y suis bientôt ..
Désolé du dérangement, mais la j'ai passé deux jours à faire à la main alors que je pouvais le faire avant en 1 minute grr.
Merci d'avance,
Anthooooony
Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'
Dim Cn As New ADODB.Connection
Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
Dim oConn As ADODB.Connection
Dim j As Integer
Dim Fichier As String, Repertoire As String, Feuille As String
Dim oCat As ADOX.Catalog
'---------test---------------------------------------------
'Connection à la Base Access
Set oConn = New ADODB.Connection
oConn.Open "Provider='Microsoft.ace.oledb.12.0';" & _
"Data Source= 'C:\Documents and Settings\RC1194\Desktop\formulaire\test.accdb';"
'les données seront placés dans Table1
Set oRS = New ADODB.Recordset
oRS.Open "Select * from Table1", oConn, adOpenKeyset, adLockOptimistic
'------------------------------------------------------
'Boucle sur les classeurs Excel du répertoire cible
Repertoire = "C:\Documents and Settings\RC1194\Desktop\formulaire\table1"
Fichier = Dir(Repertoire & "\*.xlsx")
Do While Fichier <> ""
'Connection au classeur Excel
Cn.Open "Provider=Microsoft.ace.oledb.12.0;" & _
"Data Source=" & Repertoire & "" & Fichier & ";" & _
"Extended Properties=""Excel 8.0;"""
'-------------------------
Set oCat = New ADOX.Catalog
Set oCat.ActiveConnection = Cn
'Récupére le nom de la Feuille:
'Attention: l'index correspond à un ordre alphabétique croissant
'et les plages de cellules nommées sont intégrées.
Feuille = oCat.Tables(0).Name
'-------------------------
'requête pour extraire les données de la Feuil1
oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic
' --- Transfert les données dans la base ---
Do While Not (oProdRS.EOF)
oRS.addNew
For j = 0 To oRS.Fields.Count - 2
oRS.Fields(j) = oProdRS.Fields(j).Value
Next j
oRS.Update
oProdRS.moveNext
Loop
'-------------------------------------------
Set oCat = Nothing
oProdRS.Close
'Fermeture de la connection au classeur Excel
Cn.Close
Fichier = Dir
Loop
'oRS.Close
Set oRS = Nothing
'Fermeture de la connection Access
oConn.Close
Set oConn = Nothing
End Sub
anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013 18 sept. 2012 à 11:05
Re Bonjour
Je suis a fond à fond !
Bon sur Mon travail d'avant j'avais plusieurs colonne, dans ce test je n'avais qu'une colonne.
J'ai fait donc récupérer 4 colonnes dans excel pour les importer dans access, et la !!!! et la !! j'ai eu 3 colonnes remplies et 1 vide grrr je dois avoir quelque chose dans ma fonction qui me veut du mal !
anthooooony
Messages postés28Date d'inscriptionmercredi 1 février 2012StatutMembreDernière intervention17 avril 2013 18 sept. 2012 à 18:35
Bonjour
personne :'(
j'ai trouvé un code SQL mais celui ci me fait indiquer un nom de fichier alors qu'avec le code que j'avais c'était tout les fichiers d'un dossier donnée...