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

99lire-csv.zip (19.69 Ko)
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.

erreur

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

Rechercher des sujets similaires à "lire ecrire classeurs fermes"