IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Utilisation d'un classeur comme base de données


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut Utilisation d'un classeur comme base de données
    Messages extraits de cette discussion.

    M Fauconnier,
    J'essaie votre code et je me pose quelques questions.

    Faut il ajouter des références au classeur pour utiliser ce code.
    Si oui la(les)quelle(s).

    J'ai un message d'erreur qui me dit
    "Pilote ISAM introuvable"
    Savez vous ce que cela signifie ?

    Ce code est il adapté pour Excel 12 ?
    D'avance merci

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Avec Excel 2003, on peut utiliser la référence "Excel 8.0"
    Avec Excel 12 (2007, je suppose), il faut peut-être mettre "Excel 9.0"...

    Attention à bien mettre les doubles guillemets, ils font partie de la chaîne...

    Il faut aussi faire attention au petit signe qui encadre le nom de la table (accent grave sans lettre)

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Rebonsoir
    A priori avec Excel 2007 il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    con.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
          "Data Source=C:\Users\Fred\Documents\xxx\Clients.xlsm;" & _
          "Extended Properties=""Excel 12.0;HDR=NO;"""
    HDR=NO en pius
    Maintenant une erreur de type
    "Impossible de trouver l'objet dans la collection correspondant au nom ou à la référence demandé" - ERREUR 3265

    Faut il ajouter une référence?

    Merci

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Dans mon code, j'utilise CreateObject pour éviter de devoir cocher des références.

    Je n'ai pas encore testé en 2007 et je n'ai pas accès à cette machine pour l'instant. Je ne sais donc pas tester le code proposé.

    Le nom du provider m'intrigue et ne me semble pas correct.

    Je viens de faire de faire une recherche et j'ai trouvé
    http://www.developpez.net/forums/sho...34&postcount=1 qui pourrait te convenir...

    Ok?
    [EDIT] A mon avis, dans l'exemple de Silkyroad, la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .provider=microsoft.jet.oledb.4.0
    est de trop. La propriété HDR est YES au lieu de NO (par défaut)...

    Cela t'aide-t-il?
    [/EDIT]
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Après relecture de votre post
    Autrement dit, la feuille dans laquelle tu vas rechercher des données:
    - commence-t'elle en A1?
    - contient-elle en colonne A l'identificateur unique de l'enregistrement?
    - contient-elle en ligne 1 les intitulés des colonnes, sans discontinuité entre la colonne A et la dernière colonne de la table?
    - Chaque ligne contient-elle bien une valeur en colonne A?
    Je répondais Vrai, Faux, Vrai, Vrai

    J'ai donc corrigé
    Et ai toujours la même erreur.

    à la ligne
    Debug.Print rs!prenom
    J'ai bien un "champ" prenom (en E1) avec la même casse et la même orthographe.

    une piste?
    D'avance merci

  6. #6
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    HRD=YES est la solution.
    ça fonctionne.

    un grand merci pour votre aide et votre lien.

    Entre temps j'ai aussi trouvé http://silkyroad.developpez.com/VBA/ClasseursFermes/

    Maintenant je vais essayer de trouver comment extraire une seule ligne.

    Bonne nuit

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Pour trouver une seule ligne, tu peux utilise la méthode FIND de l'objet Recordset. Si tu as dans une colonne (A de préférence) une donnée unique (clé primaire), la recherche est rapide.

    En fait, si tu connais un peu ADO, tu utilises le recordset sur le fichier excel comme tu l'utiliserais sur une base Access, MSSQL ou autre. C'est l'avantage d'utiliser ADO.

    Si tu ne connais pas trop, il y a d'excellents tutoriels sur www.developpez.com.

    Bon travail
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre éprouvé
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Points : 1 207
    Points
    1 207
    Par défaut
    Merci,
    Je découvre (avec quelques années de retard) ADO.
    Merci pour la piste Find, Je cherche, et si je ne m'en sors pas j'ouvrirai un autre post.

    Cordialement FC

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 903
    Points
    55 903
    Billets dans le blog
    131
    Par défaut
    Salut.

    Note que tu peux aussi créer un recordset qui ne renvoie qu'une seule ligne avec la clause WHERE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim cn as new adodb.connection
    dim rs as new adodb.recordset
     
    cn.open "provider=..."
    rs.open "select * from MaTable where id = 4",cn, ...
    La puissance des requêtes SQL te permet de ne récupérer dans le recordset que les enregistrements dont tu as besoin.

    L'intérêt de la connexion via ADO est que l'échange est dans les deux sens, et donc que tu peux lire un fichier fermé, mais également modifier ou ajouter des enregistrements dans le classeur fermé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2015, 09h31
  2. Utiliser une feuille comme base de données?
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/11/2009, 12h39
  3. [E-07]Utiliser feuille excel comme base de donnée dans Visual studio
    Par dec3003 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/03/2009, 22h28
  4. Installer Webspeed et utiliser comme base de données Progress V8
    Par cherrydan008 dans le forum Autres langages pour le Web
    Réponses: 0
    Dernier message: 05/11/2007, 15h44
  5. [PHP] utiliser XML comme base de donnée pour un forum ?
    Par wystan dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 27/01/2007, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo