Problème avec CreateObject depuis migration vers Windows10
Résolu
bassmart
Messages postés
281
Date d'inscription
Statut
Membre
Dernière intervention
-
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
f894009 Messages postés 17277 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voici la partie de mon code qui cause problème. La macro arrête à la ligne
Cette macro me sert à ouvrir et faire une recherche dans une base fermée Access à partir d'un fichier Excel. Je sais que ça vient de la ligne Provider que je dois changer, mais par quoi??
Pour le moment, j'ai seulement installer le moteur de base de données Microsoft Acces 2010.
Voici la partie de mon code qui cause problème. La macro arrête à la ligne
.open
Set Cn = CreateObject("ADODB.connection") With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & Fichier2 & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With
Cette macro me sert à ouvrir et faire une recherche dans une base fermée Access à partir d'un fichier Excel. Je sais que ça vient de la ligne Provider que je dois changer, mais par quoi??
Pour le moment, j'ai seulement installer le moteur de base de données Microsoft Acces 2010.
A voir également:
- Problème avec CreateObject depuis migration vers Windows10
- Migration windows 7 vers windows 10 - Accueil - Mise à jour
- Clavier qwerty vers azerty - Guide
- Vers quelle adresse web renvoie ce lien - Guide
- Envoyer vers - Guide
- Migration windows 10 vers windows 11 gratuit - Guide
7 réponses
Bonjour,
comme ceci:
Voilà
comme ceci:
'Vous devez préalablement activer la référence Microsoft ActiveX Data Objects x.x Library pour utiliser les exemples présentés dans ce tutoriel. Dim Cn As ADODB.Connection Set Cn = New ADODB.Connection With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & chemin & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With
Voilà
Essaie cela:
@+ Le Pivert
'https://silkyroad.developpez.com/VBA/ClasseursFermes/ 'https://silkyroad.developpez.com/VBA/ClasseursFermes/#LV 'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security 'Vous devez préalablement activer la référence Microsoft ActiveX Data Objects x.x Library pour utiliser les exemples présentés dans ce tutoriel. Sub RequeteClasseurFerme(ByVal chemin As String) Dim Cn As ADODB.Connection Dim NomFeuille As String, texte_SQL As String Dim Rst As ADODB.Recordset Dim oCat As ADOX.Catalog Dim Resultat As String Dim Feuille As ADOX.Table Set Cn = New ADODB.Connection Set oCat = New ADOX.Catalog With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & chemin & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With Set oCat.ActiveConnection = Cn For Each Feuille In oCat.Tables Resultat = Feuille.Name Next 'Nom de la feuille dans le classeur fermé NomFeuille = Resultat 'Définit la requête. '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille. texte_SQL = "SELECT * FROM [" & NomFeuille & "]" Set Rst = New ADODB.Recordset Set Rst = Cn.Execute(texte_SQL) 'Ecrit le résultat de la requête dans la cellule A1 Range("A1").CopyFromRecordset Rst '--- Fermeture connexion --- Set Feuille = Nothing Set oCat = Nothing Cn.Close Set Cn = Nothing End Sub 'pour lancer: RequeteClasseurFerme("chemin de classeur")
@+ Le Pivert
Bonjour,
J'ai essayé et ça ne fonctionne pas, Excel ferme tout seul.
J'ai utilisé le "Microsoft ActiveX Data Objetcts 2.0 Library"
Merci,
J'ai essayé et ça ne fonctionne pas, Excel ferme tout seul.
J'ai utilisé le "Microsoft ActiveX Data Objetcts 2.0 Library"
Merci,
Bonjour,
Je code comme ceci:
Sub Connexion_Base_Access()
Dim conn As Object
On Error GoTo fin
Chemin_Base = ThisWorkbook.Path 'a adapter
Set conn = CreateObject("ADODB.Connection")
'chaine de connexion 2007_2010_2013
Nom_Bases = "azerty.accdb" 'a adapter
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Chemin_Base & "\" & Nom_Bases
'Connexion a la base
conn.Open connstring
Exit Sub
fin:
MsgBox "Erreur de connection base!!!! " & vbNewLine & "Prevenir Administrateur"
End Sub
Avce ces ref ici 15->2013, le common control n'a rien a voir. Pas besoin d'une ref ADO

Pour CCM:
Peux plus mettre les balises de code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Je code comme ceci:
Sub Connexion_Base_Access()
Dim conn As Object
On Error GoTo fin
Chemin_Base = ThisWorkbook.Path 'a adapter
Set conn = CreateObject("ADODB.Connection")
'chaine de connexion 2007_2010_2013
Nom_Bases = "azerty.accdb" 'a adapter
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Chemin_Base & "\" & Nom_Bases
'Connexion a la base
conn.Open connstring
Exit Sub
fin:
MsgBox "Erreur de connection base!!!! " & vbNewLine & "Prevenir Administrateur"
End Sub
Avce ces ref ici 15->2013, le common control n'a rien a voir. Pas besoin d'une ref ADO
Pour CCM:
Peux plus mettre les balises de code !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Voici mon code original complet. Il est dans le module1 de ma feuille et est appelé par une macro qui se trouve dans un Userform.
Public T_NT As String Sub Recherche_Classeur_Ferme() Dim Cn As Object Dim Rst As Object 'Comparaison des deux fichiers Dim Fichier2, texte_SQL As String Dim NomFeuille As String '----------------------------- With Worksheets(1) Sondage = ActiveSheet.Cells(2, 1).Value '.Range("A3:A100000").ClearContents End With 'Définit le classeur fermé servant de base de données Fichier2 = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx" 'Nom de la feuille dans le classeur fermé Table = "SONDAGE" & "$" plage = "B1:B100000" Champ = "NO_SONDAGE" '--- Connexion --- Set Cn = CreateObject("ADODB.connection") With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _ & Fichier2 & ";Extended Properties=""Excel 12.0;HDR=YES;""" .Open End With '----------------- '... la requête avec WHERE et LIKE texte_SQL = "SELECT " & Champ & " FROM [" & Table & "] WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';" Set Rst = CreateObject("ADODB.Recordset") Rst.Open texte_SQL, Cn, adOpenStatic 'Ecriture dans la feuille de calcul If Not Rst.EOF Then ActiveSheet.Cells(2, 1).CopyFromRecordset Rst Rst.MoveFirst tsondage = Rst.GetRows Nb = UBound(tsondage, 2) If Nb > 0 Then TS = "[" For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ¤ ": Next NS If NS >= 2 Then UserForm3.Show Else TS = Left(TS, Len(TS) - 3) & "]" T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS End If End If Else 'Infos non trouvees T_NT = T_NT & vbNewLine & Sondage End If '--- Fermeture connexion --- End Sub
Bonjour,
votre code modifie partiellement pour connexion base access.
Pour text_SQL et l'ecriture feuille si il y, a vous de modifier
Sub Recherche_Access()
Dim Cn As Object
Dim Rst As Object 'Comparaison des deux fichiers
Dim Fichier2, texte_SQL As String
Dim NomFeuille As String
'-----------------------------
With Worksheets(1)
Sondage = ActiveSheet.Cells(2, 1).Value
'.Range("A3:A100000").ClearContents
End With
'D?finit la base Accsess a connecter
Fichier2 = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx"
'Nom nom de la table Access pour la recherche
Table = "nom de la table" 'a modifier
'*******************************************************
'--- Connexion base ACCESS ---
Set Cn = CreateObject("ADODB.connection")
Set Rst = CreateObject("ADODB.Recordset")
'chaine de connexion 2007_2010_2013
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier2
'Connexion a la base
Cn.Open connstring
'--------- Requete a modifier suivant recherche
'... la requ?te avec WHERE et LIKE
texte_SQL = "SELECT " & Champ & " FROM " & Table & " WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';"
Rst.Open texte_SQL, Cn, adLockOptimistic
'*******************************************************
'Table vide
If Rst.EOF And Rst.bof Then
MsgBox "Pas d'enregistrement!!!!!!!!!!!!!!!!!!!!"
Rst.Close
Cn.Close
Set Rst = Nothing
Set Cn = Nothing
Exit Sub
End If
'recup enregistrement(s)
If Not Rst.EOF Then
ActiveSheet.Cells(2, 1).CopyFromRecordset Rst
Rst.MoveFirst
tsondage = Rst.GetRows
Nb = UBound(tsondage, 2)
If Nb > 0 Then
TS = "["
For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ? ": Next NS
If NS >= 2 Then
UserForm3.Show
Else
TS = Left(TS, Len(TS) - 3) & "]"
T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS
End If
End If
Else
'Infos non trouvees
T_NT = T_NT & vbNewLine & Sondage
End If
'========================================
'--- Fermeture connexion ---
Rst.Close
Cn.Close
Set Rst = Nothing
Set Cn = Nothing
End Sub
Pour info:
Microsof Forms 2.0 se met automatiquement s'il y a une Userform, c'est votre cas
votre code modifie partiellement pour connexion base access.
Pour text_SQL et l'ecriture feuille si il y, a vous de modifier
Sub Recherche_Access()
Dim Cn As Object
Dim Rst As Object 'Comparaison des deux fichiers
Dim Fichier2, texte_SQL As String
Dim NomFeuille As String
'-----------------------------
With Worksheets(1)
Sondage = ActiveSheet.Cells(2, 1).Value
'.Range("A3:A100000").ClearContents
End With
'D?finit la base Accsess a connecter
Fichier2 = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx"
'Nom nom de la table Access pour la recherche
Table = "nom de la table" 'a modifier
'*******************************************************
'--- Connexion base ACCESS ---
Set Cn = CreateObject("ADODB.connection")
Set Rst = CreateObject("ADODB.Recordset")
'chaine de connexion 2007_2010_2013
connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier2
'Connexion a la base
Cn.Open connstring
'--------- Requete a modifier suivant recherche
'... la requ?te avec WHERE et LIKE
texte_SQL = "SELECT " & Champ & " FROM " & Table & " WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';"
Rst.Open texte_SQL, Cn, adLockOptimistic
'*******************************************************
'Table vide
If Rst.EOF And Rst.bof Then
MsgBox "Pas d'enregistrement!!!!!!!!!!!!!!!!!!!!"
Rst.Close
Cn.Close
Set Rst = Nothing
Set Cn = Nothing
Exit Sub
End If
'recup enregistrement(s)
If Not Rst.EOF Then
ActiveSheet.Cells(2, 1).CopyFromRecordset Rst
Rst.MoveFirst
tsondage = Rst.GetRows
Nb = UBound(tsondage, 2)
If Nb > 0 Then
TS = "["
For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ? ": Next NS
If NS >= 2 Then
UserForm3.Show
Else
TS = Left(TS, Len(TS) - 3) & "]"
T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS
End If
End If
Else
'Infos non trouvees
T_NT = T_NT & vbNewLine & Sondage
End If
'========================================
'--- Fermeture connexion ---
Rst.Close
Cn.Close
Set Rst = Nothing
Set Cn = Nothing
End Sub
Pour info:
Microsof Forms 2.0 se met automatiquement s'il y a une Userform, c'est votre cas
Je n'ai pas encore essayé votre code, mais je ne veux pas me connecter à une base Access mais bien à un fichier Excel.
J'ai fait une erreur dans mes explications un peu plus haut. J'exporte une table Access en fichier Excel qui se nomme SONDAGE.
Est-ce que ça change quelques choses dans la façon de coder?
J'ai fait une erreur dans mes explications un peu plus haut. J'exporte une table Access en fichier Excel qui se nomme SONDAGE.
Est-ce que ça change quelques choses dans la façon de coder?
Re,
Ben votre code marche tres bien!!!!
W10 et Excel 2013
Pensez a la fermeture de Rst et Cn , puis le set nothing en fin de procedure
Public T_NT As String
Sub Recherche_Classeur_Ferme()
Dim Cn As Object
Dim Rst As Object 'Comparaison des deux fichiers
Dim Fichier2, texte_SQL As String
Dim NomFeuille As String
'-----------------------------
With Worksheets(1)
Sondage = ActiveSheet.Cells(2, 1).Value
'.Range("A3:A100000").ClearContents
End With
'test avec un de mes classeurs OK
'Fichier2 = "C:\_Docs_Prog_Excel\_Mashk\Excel_Excel\Sources.xlsx"
'Sondage = "Radar"
'Table = "Sources$" '
'Champ = "Infraction"
'Nom de la feuille dans le classeur ferm?
'------------------------
'D?finit le classeur ferm? servant de base de donn?es
Fichier2 = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx"
Table = "SONDAGE$"
Plage = "B1:B100000"
Champ = "NO_SONDAGE"
'--- Connexion ---
Set Cn = CreateObject("ADODB.connection")
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier2 & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'... la requ?te avec WHERE et LIKE
texte_SQL = "SELECT " & Champ & " FROM [" & Table & "] WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';"
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open texte_SQL, Cn, adOpenStatic
'Ecriture dans la feuille de calcul
If Not Rst.EOF Then
ActiveSheet.Cells(2, 1).CopyFromRecordset Rst
Rst.MoveFirst
tsondage = Rst.GetRows
Nb = UBound(tsondage, 2)
If Nb > 0 Then
TS = "["
For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ? ": Next NS
If NS >= 2 Then
UserForm3.Show
Else
TS = Left(TS, Len(TS) - 3) & "]"
T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS
End If
End If
Else
'Infos non trouvees
T_NT = T_NT & vbNewLine & Sondage
End If
'--- Fermeture connexion ---
End Sub
CCM: peux toujours pas mettre les balises de code!!!!!
Ben votre code marche tres bien!!!!
W10 et Excel 2013
Pensez a la fermeture de Rst et Cn , puis le set nothing en fin de procedure
Public T_NT As String
Sub Recherche_Classeur_Ferme()
Dim Cn As Object
Dim Rst As Object 'Comparaison des deux fichiers
Dim Fichier2, texte_SQL As String
Dim NomFeuille As String
'-----------------------------
With Worksheets(1)
Sondage = ActiveSheet.Cells(2, 1).Value
'.Range("A3:A100000").ClearContents
End With
'test avec un de mes classeurs OK
'Fichier2 = "C:\_Docs_Prog_Excel\_Mashk\Excel_Excel\Sources.xlsx"
'Sondage = "Radar"
'Table = "Sources$" '
'Champ = "Infraction"
'Nom de la feuille dans le classeur ferm?
'------------------------
'D?finit le classeur ferm? servant de base de donn?es
Fichier2 = "T:\Geotechnique\Mouvements\Entrepot\BDFS\0_Sondages_a_saisir_Geotec\" & "SONDAGE.xlsx"
Table = "SONDAGE$"
Plage = "B1:B100000"
Champ = "NO_SONDAGE"
'--- Connexion ---
Set Cn = CreateObject("ADODB.connection")
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& Fichier2 & ";Extended Properties=""Excel 12.0;HDR=YES;"""
.Open
End With
'-----------------
'... la requ?te avec WHERE et LIKE
texte_SQL = "SELECT " & Champ & " FROM [" & Table & "] WHERE " & Champ & " like '" & "%" & Sondage & "%';" ''" & Sondage & "%';"
Set Rst = CreateObject("ADODB.Recordset")
Rst.Open texte_SQL, Cn, adOpenStatic
'Ecriture dans la feuille de calcul
If Not Rst.EOF Then
ActiveSheet.Cells(2, 1).CopyFromRecordset Rst
Rst.MoveFirst
tsondage = Rst.GetRows
Nb = UBound(tsondage, 2)
If Nb > 0 Then
TS = "["
For NS = 0 To Nb: TS = TS & tsondage(0, NS) & " ? ": Next NS
If NS >= 2 Then
UserForm3.Show
Else
TS = Left(TS, Len(TS) - 3) & "]"
T_NT = T_NT & vbNewLine & Sondage & " en " & Nb + 1 & " exemplaires " & vbNewLine & TS
End If
End If
Else
'Infos non trouvees
T_NT = T_NT & vbNewLine & Sondage
End If
'--- Fermeture connexion ---
End Sub
CCM: peux toujours pas mettre les balises de code!!!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
J'ai réglé mon problème, j'ai été dans les références et j'ai ajouter "Microsoft ActiveX Data Objets (Multi-dimensional) 6.0 library" et "Microsoft Jet and Replication Objects 2.6 Library" et ça fonctionne maintenant.
J'ai réglé mon problème, j'ai été dans les références et j'ai ajouter "Microsoft ActiveX Data Objets (Multi-dimensional) 6.0 library" et "Microsoft Jet and Replication Objects 2.6 Library" et ça fonctionne maintenant.
J'ai modifié mes références pour qu'elles soit comme les vôtres et ça fonctionne maintenant.
En espérant, que ça reste comme ça!
Merci beaucoup pour votre aide!
Le problème en encore revenu aujourd'hui et je ne comprend toujours pas le problème vient d'où?
Vous pouvez mettre vos fichiers a dispo?
Si probleme infos sensibles passez par les messages prives
C'est à n'y rien comprendre ce matin ça fonctionne.
J'ai vue quand lançant Microsoft Access, quelque chose c'est installé et j'ai tester mon fichier Excel et ça fonctionnait.
Voici malgré tout le lien pour mon fichier:
https://www.cjoint.com/c/JBoqP74iqU7
Merci!
Y a pas de connection avec une base Access, que des fichier Excel!!