Il n'y a pas de moyen unique et rapide, car cela dépend d'un certain nombre de facteurs. Assurez-vous que les index dans SQL sont configurés et optimisés. De nombreux index tueront les performances d'insertion/mise à jour puisque chaque insertion devra mettre à jour l'index. Assurez-vous de n'établir qu'une seule connexion à la base de données et de ne pas l'ouvrir/la fermer pendant l'opération. Exécutez la mise à jour lorsque le serveur est sous une charge minimale. La seule autre méthode que vous n'avez pas essayée consiste à utiliser un objet ADO Command et à émettre une instruction INSERT directe. Lorsque vous utilisez la méthode 'AddNew' de l'objet recordset, veillez à n'émettre qu'une seule commande 'UpdateBatch' à la fin des insertions. En dehors de cela, le VBA ne peut fonctionner qu'aussi vite que le serveur SQL accepte les entrées.
EDIT :On dirait que vous avez tout essayé. Il existe également ce que l'on appelle le mode de récupération "Bulk-Logged" dans SQL Server, qui réduit la surcharge d'écriture dans le journal des transactions. Peut-être quelque chose qui vaut la peine d'être examiné. Cela peut être gênant car cela nécessite de jouer un peu avec le modèle de récupération de base de données, mais cela pourrait vous être utile.