VBA et méthode ADO sous Excel for Mac

HAL-9000

Membre expert
Club iGen
21 Septembre 2009
2 665
224
Espace-Temps
Bonjour,

bon et bien je me pose la question de savoir si les méthodes ADO sous excel en VBA s'éxecutent bien sous Excel Mac 2004 (je suis actuellement sous Excel Mac 2008 et ai besoin de VBA). De plus j'aimerai savoir si le VBA sous Excel Windows est le même que sous Excel Mac :confused:

Merci pour vos retours :zen:
 
Ne sachant pas ce que sont les "méthodes ADO", je ne peux répondre sur ce point (du moins pour le moment).

Le VBA des versions Mac (depuis Excel 98) est resté le même, c'est à dire la version 5 qui équipait la version 97 d'Excel côté Windows. Il n'y a pas eu de changements révolutionnaires entre-temps côté Windows, mais il y a tout de même eu quelques modifications, des fonctions nouvelles.

Pour une bonne partie, on peut utiliser les mêmes boucles VBA, sous réserve d'éviter les pièges : certaines fonctions n'ont pas toutes les propriétés dans la version Mac, et certaines sont absentes. Pas des contrôles "ActiveX" ni d'accès aux API Windows (évidemment). Et puis bien sûr quelques bugs de ci, de là... On peut le plus souvent contourner les fonctions qui manquent avec des boucles AppleScript intégrées aux bons endroits, développer des macros qui passent sur les deux plateformes grâce à de la compilation conditionnelle, bref, comme souvent, ça dépend de ce qu'on veut faire et de ce qu'on sait faire.


[MàJ] : Pour ce que je peux en voir les ADO (ActiveX Data Objects) concernent, justement, les ActiveX et je doute que ça puisse fonctionner sur un Mac. Déjà qu'on a beaucoup de mal avec les pilotes ODBC pour récupérer des données...
 
  • J’aime
Réactions: Pascal 77
Merci pour ta réponse.

Pour les méthodes ADO voici un exemple de macro qui utilise cette méthode afin de récuperer des données dans des classeurs Excel fermés.

Bloc de code:
Function ExtractionValeurCellulesClasseurFerme(Fichier As String, Feuille As String, Cellules As String)

Dim Source As ADODB.Connection 
Dim Rst As ADODB.Recordset 
Dim ADOCommand As ADODB.Command 
Set Source = New ADODB.Connection 
Source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source = " & Fichier & ";
Extended Properties = "" Excel 8.0; HDR = No;"";" Set ADOCommand = New ADODB.Command
With ADOCommand .ActiveConnection = Source .CommandText = "SELECT * FROM [" & Feuille & "$" & Cellules & "]"
End With Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic

Set Rst = Source.Execute("[" & Feuille & "$" & Cellules & "]") Feuil3.Range("M1").CopyFromRecordset Rst Rst.Close Source.Close
Set Source = Nothing 
Set Rst = Nothing Set ADOCommand = Nothing
End Function

ActiveX oui apparemment… zut…
 
ActiveX, moteur JET,... tu te doutes bien que ça n'a aucune chance de fonctionner.

Pour ce genre d'utilisation, il vaut mieux te tourner vers Excel/Windows via Boot Camp ou une virtualisation (Parallels Desktop est très bien). Ou attendre la version 2011 d'Excel, en fin d'année, qui verra le retour du VBA sur Mac (mais de là à pouvoir utiliser les ActiveX et le moteur JET, c'est pas gagné).
 
  • J’aime
Réactions: HAL-9000
Pour les méthodes ADO voici un exemple de macro qui utilise cette méthode afin de récuperer des données dans des classeurs Excel fermés.

Cela dit, il y a d'autres méthodes pour récupérer des données dans des classeurs Excel fermés, la seule contrainte est qu'ils soient ouverts au moins une fois pour la première exécution de la macro !