XL 2021 Adodb.Connection lente à s'établir

  • Initiateur de la discussion Initiateur de la discussion fanch55
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fanch55

XLDnaute Barbatruc
Bonjour à tous,

J'utilise ( et conseille beaucoup) Adodb pour extraire des données d'un tableau surtout pour charger des listboxes ou comboboxes.
Les données peuvent ainsi être triées, filtrées et uniques grâce au moteur Sql avant d'être récupérées .

Sauf que depuis quelque temps, la fonction qui était quasi immédiate jusqu'alors prend plus de 10 secondes à chaque Open du classeur qui contient la "Database", même si c'est celui qui est actif .

Je suis persuadé que c'est encore un coup de Windows Update !!!???? 🤔
Ma config : W11, Office 2021 et 32go de mémoire.

Je n'ai plus de pc sous W10 et/ou Office plus ancien pour vérifier mes dires
Si quelqu'un pouvait tester le mini-classeur ci-joint et me dire s'il fait mieux, cela me permettrait de poster sur un site Microsoft pour protester ....
 

Pièces jointes

Dernière édition:
du coup je me suis f"ait ma" petite perso
0.06xxx sur 40000 lignes
VB:
Sub test2()
    Dim fichier, Tim#
    fichier = ThisWorkbook.FullName
    Tim = Timer
    TableToComboBoxList fichier, "Fournisseur", "Nom", True, True, True, True, True, ActiveSheet.ComboBox1
    MsgBox "Select terminé en " & Timer - Tim & " secondes"
End Sub

Sub test3()
    Dim fichier, Tim#, tbl
    fichier = ThisWorkbook.FullName
    Tim = Timer
    tbl = TableToComboBoxList(fichier, "Fournisseur", "Nom", True, True, True, True, True)
    If Not IsEmpty(tbl) Then
        [L1].Resize(UBound(tbl)) = tbl
        MsgBox "Select terminé en " & Timer - Tim & " secondes"
    End If
End Sub


Function TableToComboBoxList(fichier, _
                             feuille, _
                             NomColonne, _
                             Optional WithHeader As Boolean = False, _
                             Optional SkeepBlanks As Boolean = False, _
                             Optional Ordre As Boolean = False, _
                             Optional ShuntDouble As Boolean = False, _
                             Optional formalise As Boolean = False, _
                             Optional Combo As Object) As Variant
    
    TableToComboBoxList = Empty
    If Not Combo Is Nothing Then Combo.Clear
    Dim rs As Object, cnn As Object, version&, Sql As String, distinct As String
    With Application
        version = .Min(Val(.version), 16)
    End With
    If ShuntDouble Then distinct = "DISTINCT "
    Set cnn = CreateObject("ADODB.Connection")
    
    'Set rs = CreateObject("ADODB.RecordSet")'latebinding  full anonyme le recordset sera" le resultat de Adodb.Connection.execute
    
    cnn.Open "Provider=Microsoft.ACE.OLEDB." & version & ".0" & ";" & _
              "Data Source=" & fichier & ";" & _
              "Extended Properties='Excel 12.0" & ";" & _
              "HDR=" & Array("No", "Yes")(Abs(WithHeader)) & ";IMEX=" & Abs(formalise) & "'"
    'exemple
    'Set rs = cnn.Execute("SELECT [nom de colonne] FROM [Nom de la feuille] WHERE [nom de colonne] IS NOT NULL AND [Nom] <> '' ORDER BY [Nom]")
    
    'LA feuille
    Sql = "SELECT " & distinct & "[" & NomColonne & "] "
    
    'LE NOM DE LA COLONNE(HEADER)
    Sql = Sql & "FROM [" & feuille & "$]"
    
    'LE WHERE pour les paramètres(pas de vides)
    If SkeepBlanks Then Sql = Sql & " WHERE [" & NomColonne & "] IS NOT NULL AND [" & NomColonne & "] <> ''"
    
    'ORDER
    If Ordre Then Sql = Sql & " ORDER BY [" & NomColonne & "]"
    Debug.Print Sql
    
    'DECISION
    '===========================================================================
    'on sait ici tout de suite si on s'arrête soit pour une erreur soit pour l'EOF
    ' on en profite pour récupérer lea desciption d'erreur si il y en a une
    Dim yes As Boolean, ed As String
    yes = True
    On Error Resume Next
    Set rs = cnn.Execute(Sql)
    If Err Then
        yes = False
        ed = Err.Description
    End If
    On Error GoTo 0
    If rs.EOF Then yes = False
    'à partir de là ed est soit le descriptif de l'erreur soit vide
    'et yes en fonction des deux
    'même avec une erreur le code ne s'arrêtra pas
    ' il pa"ssera" tout simplement la condition if yes (si c'est false c'est les Else qui agiront)
    '===========================================================================
    
    
    ' si oui
    If yes Then
        arr = rs.getrows ' récup le tableau
        If Not Combo Is Nothing Then
            Combo.Column = arr
        Else
            TableToComboBoxList = Application.Transpose(arr)
        End If
    Else 'si non
        If Not Combo Is Nothing Then
            MsgBox "la requete n'a pas aboutie ! , la " & Combo.Name & " ne sera pas remplie" & vbCrLf & ed
        Else
            MsgBox "la requete n'a pas aboutie !" & vbCrLf & ed
        End If
    End If
    
    'destruction des object de connection
    rs.Close
    cnn.Close
    Set rs = Nothing
    Set cnn = Nothing
End Function
 
J.P , et pour moi qui suit en 32 Lol pas de solution ?
Hello,
j'ai récupére une version 32 bits de ACEEXCL.DLL de Mars. A essayer :
Les fichiers ACE*.dll se trouvent ici (pour une version 32 bits) : C:\Program Files(x86)\Microsoft Office\root\vfs\ProgramFilesCommonX86\Microsoft Shared\OFFICE16
1 - Renommer le fichier ACEEXCL.DLL en ACEEXCL.DLL.new
2 - Copier dans le dossier , le fichier qui se trouve dans la pièce jointe
3 - Si cela fonctionne tant mieux, si cela ne fonctionne pas, supprimer le fichier copié et remettre celui qui a été renommé.
4 - Garder dans un coin la pièce jointe des fois qu'il y ait une mise à jour qui écrase le fichier et qui reproduit le problème.
Attention le fichier de la pièce jointe n'est que pour les versions 32 bits.

En ce qui concerne la correction du Bug , j'espère que quelqu'un l'a signalé à Microsoft car moi je ne sais pas faire et je ne sais pas si on peut voir la liste des bugs existants ?

Ami calmant, J.P
 

Pièces jointes

En ce qui concerne la correction du Bug , j'espère que quelqu'un l'a signalé à Microsoft car moi je ne sais pas faire et je ne sais pas si on peut voir la liste des bugs existants ?
Hello,
j'ai posé la question dans le forum de MrExcel et on m'a répondu.
Voici comment faire par exemple pour Excel 2021.
Dans l'onglet Aide d'Excel cliquez sur Commentaires et cliquez sur Signaler un problème :
DéclarerBug.png


j'ai signalé le bug avec du code de test.
 
Bonjour jean-marie
le message pourrait être
en français
j'utilise adodb.connextion (collection dll ACExxx.dll) en vba
depuis la version 2503 de "Office" j'ai une lenteur d’exécution pour une requête sur une plage dans le fichier lui même
je ne comprends pas pourquoi
certains bidouilleurs ont trouvé une astuce
elle consiste a récupérer la dll (ACEEXCL.DLL)de la version 2052 quelque part
et la remplacer dans le dossier :C:\Program Files(x86)\Microsoft Office\root\vfs\ProgramFilesCommonX86\Microsoft Shared\OFFICE16
et là nous retrouvons une vitesse d’exécution raisonnable
est une astuce valable ou pas
en anglouwisch 🤪 🤪
Hello,
I'm using adodb.connextion (collection dll ACExxx.dll) in VBA.
Since version 2503 of Office, I've been experiencing slow execution times for a query on a range in the file itself.
I don't understand why.
Some tinkerers have found a trick.
It involves retrieving the dll (ACEEXCL.DLL) from version 2052 somewhere.
And replacing it in the folder: C:\Program Files(x86)\Microsoft Office\root\vfs\ProgramFilesCommonX86\Microsoft Shared\OFFICE16.
P.S.: The folder path can be different for multiple versions of Office, and then we find a reasonable execution speed.
Is this a valid trick or do you have a clean and lasting solution?
 
Hello Cousinhub,
malheureusement ce site c'est pour les demandes d'amélioration pas pour les bugs.
Hi,
Je viens de faire une remontée d'erreur avec Power Query par le biais que tu as donné.
Et cette remontée arrive au site que j'ai mentionné.
La seule différence, en signalant comme tu l'as dit, on est en mode "privé".
Par le biais du site, on est en mode "public"
Bonne apm
 
Bonjour,
Je suis sur 2007 depuis au-moins 2007 et l'hors de l'avant dernière mise à jour de Windows 11 je n'avais plus accès à ma base de données excel via adodb.

J'ai exécuté la réparation d'excel qui a par la même occasion réparé ses drivers.

Ceci dit le MDAC gère le 32 bits même sur un version 64

Windows respecte la hiérarchie des veux système qui parck ses librairie au même endroit contrairement à dot.net qui stock dans le répertoire de l'application. Quand une mise à jour de sécurité, notamment, affect adodb la librairie ce retrouve incompatible avec la version excel impliqué.

Je me retrouve avec des informations 365 alors que je n'ai pas 365!
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour