Problème avec CreateObject depuis migration vers Windows10

Résolu/Fermé
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 - 17 déc. 2019 à 21:27
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 - 15 févr. 2020 à 06:54
Bonjour,

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:

7 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
10 janv. 2020 à 07:54
Re,

Ben, pas de probleme avec 2010 et ref mini:

1
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
10 janv. 2020 à 15:15
Bonjour,

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!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
13 févr. 2020 à 17:50
Bonjour,

Le problème en encore revenu aujourd'hui et je ne comprend toujours pas le problème vient d'où?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
14 févr. 2020 à 06:42
Bonjour,

Vous pouvez mettre vos fichiers a dispo?
Si probleme infos sensibles passez par les messages prives
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
14 févr. 2020 à 17:42
Bonjour,

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!
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
14 févr. 2020 à 17:58
Re,

Y a pas de connection avec une base Access, que des fichier Excel!!
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
18 déc. 2019 à 15:31
Bonjour,

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à
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 18 déc. 2019 à 18:39
Bonjour a vous deux,

ouvrir et faire une recherche dans une base fermée Access à partir d'un fichier Excel.
Y a un bleme, car le code fait une connexion avec un fichier Excel!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
18 déc. 2019 à 19:59
Bonjour,

Effectivement, mon erreur! C'est une table d'une base Access qui à été exporter en fichier Excel.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 21 déc. 2019 à 09:18
Essaie cela:

'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
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
18 déc. 2019 à 18:54
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,
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 19 déc. 2019 à 07:21
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 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
Modifié le 19 déc. 2019 à 21:54
Je n'y arrive toujours pas!

Qu'est-ce que le "nom_base" signifie?

J'ai envoyé mon code complet plus bas.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
19 déc. 2019 à 21:58
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
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
20 déc. 2019 à 07:19
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
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
20 déc. 2019 à 14:00
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?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023
Modifié le 20 déc. 2019 à 18:28
Re,

mais bien à un fichier Excel.
En partant de quoi, Access… Excel...

J'ai fait une erreur dans mes explications
Sans dec….

Est-ce que ça change quelques choses
Ben un peu.....

Je reprends la chose
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
20 déc. 2019 à 19:50
Mon fichier Excel est extrait (exporté) d'une base Access. C'est la table SONDAGE qui est extraite en fichier Excel (.xlsx).

Merci!
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
20 déc. 2019 à 19:52
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!!!!!
0

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

Posez votre question
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
7 janv. 2020 à 14:33
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.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1
8 janv. 2020 à 22:02
Bonjour,

Je ne sais pas ce qui c'est passé, mais le problème est revenu aujourd'hui après avoir redémarré mon poste.

J'ai vérifié et les références sont toujours là!


Merci!
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
9 janv. 2020 à 06:54
Bonjour et meilleurs voeux,

J'utilise uniquement ce que je vous ai mis en image post 5!!
Je vais vous chercher dans mon capharnaüm un fichier que j'ai code.
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
Modifié le 9 janv. 2020 à 09:49
Re,

fichier code et fichier source a lire: https://mon-partage.fr/f/dpykFocQ/

A tester, j'ai Excel2013 vous Excel 2010.
0
bassmart Messages postés 281 Date d'inscription jeudi 19 février 2015 Statut Membre Dernière intervention 19 décembre 2023 1 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
9 janv. 2020 à 20:34
Bonjour,

J'ai le même problème avec votre macro, elle bloque sur la ligne ".open".

Voici le message:
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 10 janv. 2020 à 07:08
Bonjour,

Je vais provisoirement installer office 2010 pour voir ce qui ce passe!!
Afin de savoir si problème office ou ......
0