bonjour okparanoid
la methode ADO est plus rapide , mais l'interet est minime si tu dois faire ta requete dans un seul classeur fermé, contenant peu d'enrgistements.Dans ce cas c'est plus simple d'ouvrir le classeur .
De plus il est préférable que la feuille Excel soit structurée comme une vraie base de données pour ne pas avoir à créer une macro qui soit une usine à gaz .
ci joint d'autres infos sur les limtes d'Excel utilisé comme une base de données gérée par ADO :
-------------------------------------------------------------------------------------------------------------------
il n'est pas possible de supprimer les lignes complétes dans un classeur fermé (enregistrements )
vous obtiendrez un message d'erreur 'La suppression des données dans un table attachée n'est pas géré par le pilote ISAM''
Vous pourrez uniquement vider les cellules
Vous ne pourrez pas supprimer les lignes vides qui contenaient les données supprimées et les requetes continueront d'afficher l'es enregistrements vides correspondant à ces lignes vides.
Il n'est pas possible de supprimer une cellule contenant une formule
Vous aurez un message d'erreur 'L'opération demandée n'est pas autorisée dans ce contexte'
Excel ne peut pas gérer les connections multiples et simultanées à un meme classeur
Les requetes répétées peuvent entrainer des problemes de mémoire disponible dans Excel
http://support.microsoft.com/kb/319998
Il n'est pas possible d'utiliser un classeur protégé par un mot de passe
Il n'est pas possible d'utiliser le classeur si la feuille contenant les données est protégée
La gestion des tables :
Les onglets ( les tables ) contiennent le symbole $ en fin de nom , ce qui n'est pas le cas des plages de cellules nommées ( pourtant aussi considérées comme des tables lors des requetes )
Par contre si vous avez ajouté une table dynamiquement dans un classeur ( en utilisant par exemple 'Create Table' ou 'SELECT INTO' ) , 2 noms différents sont renvoyés pour cette nouvelle table : avec et sans $
en fait si vous ouvrez le classeur manuellement vous constaterez que l'onglet est bien ajouté mais aussi une plage de cellules nommées correspondant à la plage de données insérées dynamiquement ( voir Insertion/nom/definir )
😛ar exemple =maNouvelleFeuille!$A$1:$C$1265
nota
Lors des requètes pour lister le nom des onglets d'un classeur fermé , par ADOX ou ADO(méthode OpenSchema) , les noms sont renvoyés par ordre alphabétique
Par défaut , le pilote ODBC analyse uniquement les 8 premieres lignes du classeur fermé pour déterminer le type de données dans chaque colonne.
Cela peut entrainer 2 types de problemes :
1. Dans certains cas particuliers , les données exportées vers un classeur fermé peuvent etre tronquées . Si , par exemple , les 8 premiers enregistrements d'un champ contiennent des données texte inférieur ou égal à 255 caractères , le champ sera considéré de type Texte . Si ensuite vous ajoutez des enregistrements de longueur plus importante ils seront tronqués .
http://support.microsoft.com/kb/189897/
2. Si vous voulez importer les informations d'une colonne qui contient à la fois des données numériques et texte , c'est le type majoritaire dans les 8 premiere lignes qui définira le type de données à récupérer : les autres données de la colonnes seront considérées comme NULL (vide)
Si la colonne contient 4 valeurs numériques et 4 valeurs texte , la requete renvoie 4 nombres et 4 valeurs NULL.
La seule solution consiste à activer l'option d'importation 'IMEX=1' ( exemple : 'extended properties=''Excel 8.0;IMEX=1''' ) . Les données numériques seront importées comme du texte
Je n'ai pas vérifié le point suivant , mais l'aide MSDN indique :
Avertissement concernant la modification de données Excel à l'aide d'ADO : Lorsque vous insérez des données texte , la valeur de texte est précédée d'une apostrophe. Ceci peut provoquer des problèmes par la suite lors du travail avec les nouvelles données.
bon apres midi
MichelXld
Message édité par: michelxld, à: 18/06/2006 17:04