Pour tous ceux qui sont encore affectés par cette situation.
J'ai eu l'erreur...
OLEDB error "The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine."
...comme décrit par l'OP, Shailesh Sahu.
J'ai Windows 7 64 bits.
Mon problème est dans PowerShell J'espère donc que mes conclusions pourront être appliquées à C#, PowerShell et tout autre langage utilisant le pilote "Microsoft.ACE.OLEDB".
J'ai suivi les instructions de ce fil de discussion du forum MS : http://goo.gl/h73RmI
J'ai d'abord essayé d'installer le 64 bits puis l'installation de la version 32 bits version de l'AccessDatabaseEngine.exe depuis cette page http://www.microsoft.com/en-us/download/details.aspx?id=13255
Mais toujours pas de joie.
J'ai ensuite exécuté le code ci-dessous dans PowerShell (extrait du site de SQL Panda http://goo.gl/A3Hu96 )
(New-Object system.data.oledb.oledbenumerator).GetElements() | select SOURCES_NAME, SOURCES_DESCRIPTION
...ce qui m'a donné ce résultat (j'ai supprimé les autres sources de données par souci de concision)...
SOURCES_NAME SOURCES_DESCRIPTION
------------ -------------------
Microsoft.ACE.OLEDB.15.0 Microsoft Office 15.0 Access Database Engine OLE DB Provider
Comme vous pouvez le voir, j'ai Microsoft.ACE.OLEDB. 15 .0 (quinze) pas Microsoft.ACE.OLEDB. 12 .0 (douze)
J'ai donc modifié ma chaîne de connexion en 15 et ça a marché.
Donc, un petit extrait PowerShell pour démontrer comment coder la version...
$AceVersion = ((New-Object System.Data.OleDb.OleDbEnumerator).GetElements() | Where-Object { $_.SOURCES_NAME -like "Microsoft.ACE.OLEDB*" } | Sort-Object SOURCES_NAME -Descending | Select-Object -First 1 SOURCES_NAME).SOURCES_NAME
$connString = "Provider=$AceVersion;Data Source=`"$filepath`";Extended Properties=`"Excel 12.0 Xml;HDR=NO`";"
modifié pour choisir la dernière version de ACE, si plusieurs
Avec un peu de chance, toute personne découvrant ce problème peut maintenant vérifier quelle version d'OLEDB est installée et utiliser le numéro de version approprié.