Lire et écrire dans les classeurs Excel fermés
Bonjour :
Je sais qu'il y a plusieurs façons de le faire.
Par exemple :
Sub TestConnection_V1()
Dim Cn As ADODB.Connection
Dim Fichier As String
'Définit le classeur fermé servant de base de données
Fichier = "C:\monClasseurBase_V01.xls"
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
End With
'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002.
'
'... la requête ...
'
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
End Sub
Mais quand je compile, il me dit toujours que "type défini d'utilisateur non défini" sur cette ligne :
Dim Cn As ADODB.Connection
Quelqu'un sait s'il faut télécharger une librairie ou ??? Merci d'avance.
Quelqu'un pourrait essayer le code puis voir si Excel dit la même erreur?
Bonjour
Dans le lien as tu vu cette partie
Vous devez préalablement activer la référence Microsoft ActiveX Data Objects x.x Library pour utiliser les exemples présentés dans ce tutoriel.
Dans l'éditeur de macros:
Menu Outils.
Références.
Cochez la ligne "Microsoft ActiveX Data Objects x.x Library".
Cliquez sur le bouton OK pour valider.
x.x dépend de la version installée sur votre poste.
Certains exemples proposés permettent de manipuler les tables et nécessitent d'activer la référence Microsoft ADO ext x.x for DLL and Security.
Merci de m'avoir répondu Banzai
C'est vrai j'ai oublié de cocher les librairies. Après quand j'essaie, il me dit "la table externe n'est pas dans le format attendu" sur la ligne .open :
With Cn
.Provider = "MSDASQL"
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & Fichier & "; ReadOnly=False;"
.Open ' -------------> la table externe n'est pas dans le format attendu
End With
Bonjour
Désolé je ne connais pas du tout cette méthode
Je passe la main
Attends un peu et si pas de réponse, clos ce post et ouvre en un autre avec ce problème
Bonjour,
Si tu utilises une version récente d'Office les fichiers sont en .xlsx ou .xlsm, il faut donc ajouter ces types de fichier dans la chaine de connexion :
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"
Pierre
Banzai64 a écrit :Bonjour
Désolé je ne connais pas du tout cette méthode
Je passe la main
Attends un peu et si pas de réponse, clos ce post et ouvre en un autre avec ce problème
Ok. Merci quand même.
pierrep56 a écrit :Bonjour,
Si tu utilises une version récente d'Office les fichiers sont en .xlsx ou .xlsm, il faut donc ajouter ces types de fichier dans la chaine de connexion :
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"
Pierre
Bonjour Pierre
J'ai réessayé mais le programme ne passe toujours pas à la ligne ".open"
Je ne sais pas si quelqu'un aurait un morceau de code qu'on peut ajouter dans la procédure pour lire et écrire dans les classeurs Excel fermés où il y a juste l'adresse du fichier à adapter.
Le classeur fermé que j'ai : .csv Excel 2007
FrancisZheng a écrit :Banzai64 a écrit :Bonjour
Désolé je ne connais pas du tout cette méthode
Je passe la main
Attends un peu et si pas de réponse, clos ce post et ouvre en un autre avec ce problème
Ok. Merci quand même.
pierrep56 a écrit :Bonjour,
Si tu utilises une version récente d'Office les fichiers sont en .xlsx ou .xlsm, il faut donc ajouter ces types de fichier dans la chaine de connexion :
.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"
Pierre
Bonjour Pierre
J'ai réessayé mais le programme ne passe toujours pas à la ligne ".open"
Je ne sais pas si quelqu'un aurait un morceau de code qu'on peut ajouter dans la procédure pour lire et écrire dans les classeurs Excel fermés où il y a juste l'adresse du fichier à adapter.
Le classeur fermé que j'ai : .csv Excel 2007
Bah, un .csv n'est pas un fichier excel, c'est un fichier texte!
Pour établir une connexion, il faut le bon driver!
.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)}; & _
"Dbq=" & Fichier & ";Extensions=asc,csv,tab,txt;Persist Security Info=False;"
Pierre
pierrep56 a écrit :Bah, un .csv n'est pas un fichier excel, c'est un fichier texte!
Pour établir une connexion, il faut le bon driver!
.ConnectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)}; & _ "Dbq=" & Fichier & ";Extensions=asc,csv,tab,txt;Persist Security Info=False;"
Pierre
Votre morceau de code je l'insère où dans le programme?
Dim Cn As ADODB.Connection
Dim Fichier As String
'Définit le classeur fermé servant de base de données
Fichier = "C:\monClasseurBase_V01.xls"
Set Cn = New ADODB.Connection
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Fichier & _
";Extended Properties=Excel 8.0;"
.Open
End With
'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002.
'
'... la requête ...
'
'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
pourriez-vous me montrer le programme complet avec votre code?
Houla ... mouais ... heum ...
Ben à ta place, je laisserai tomber ADO et j'utiliserai des méthodes plus simple à maitriser comme un classique 'Open', décrit ici par exemple => http://vbtour.free.fr/open.htm
Sinon des démo de code ADO, il y en plein sur mon blog pour liaison avec dbf, access, mysql, ... mais 'Open' c'est très bien aussi pour lire/écrire en csv ...
(ADO suppose aussi de connaitre un minimum de Sql ...)
Pierre
Bon, ci-joint une démo fonctionnelle simple (à dézipper dans son ordi avant utilisation).
Le zip contient :
* Un sous-répertoire CSV contenant un fichier "Clients.csv" et un fichier "Schema.ini" (ce fichier indique que les données sont séparées par des points-virgule)
* Un fichier excel Lire_csv.xlsm : un clic sur le bouton import copie les données du csv dans le fichier excel.
La connexion est en ADO, la requête Sql est simplissime. N'utilise pas de référence particulière.
Pierre
pierrep56 a écrit :Bon, ci-joint une démo fonctionnelle simple (à dézipper dans son ordi avant utilisation).
Le zip contient :
* Un sous-répertoire CSV contenant un fichier "Clients.csv" et un fichier "Schema.ini" (ce fichier indique que les données sont séparées par des points-virgule)
* Un fichier excel Lire_csv.xlsm : un clic sur le bouton import copie les données du csv dans le fichier excel.
La connexion est en ADO, la requête Sql est simplissime. N'utilise pas de référence particulière.
Pierre
Salut Pierre, c'est gentil de m'aider écrire les fichers. Je les ai téléchargé, puis je les mets sur bureau ou cela n'a pas importance?
et il suffit d'ouvrir Lire_csv pour fonctionner?
J'ai extrait les fichiers puis exécuté, voilà l'erreur qui apparaît.
A l'évidence tu n'as pas correctement dézippé l'archive.
Il ne faut pas ouvrir le xlsm depuis l'archive.
Il faut :
1/ créer un nouveau dossier "ordinaire" (non compressé) sur son ordi ,
2/ ouvrir l'archive,
3/ sélectionner les fichiers (Ctrl+A),
4/ copier les fichiers (Ctrl+C),
5/ cliquer dans le dossier créé au début,
5/ coller ces fichiers dans ce dossier créé au début (Ctrl+V),
6/ et enfin ouvrir le fichier xlsm placé dans ce nouveau dossier