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

Contribuez Discussion :

[DAO] SQL sur une plage de cellules [FAQ]


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut [DAO] SQL sur une plage de cellules
    Une fois qu'on a touché à Access, qui n'a pas rêvé de faire des SQL sur des plages de cellules ?
    C'est maintenant à portée en utilisant DAO (pour ADO se référer au tutoriel de Silkyroad sur les classeurs fermés).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub DoCmdRunSQL(ByVal sql As String, ByVal rDest As Range)
     
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
     
        Set db = DAO.OpenDatabase(ActiveWorkbook.FullName, False, False, "Excel 8.0;HDR=YES;")
        Set rs = db.OpenRecordset(sql, DAO.dbOpenSnapshot)
        rDest.CopyFromRecordset rs
        Set rs = Nothing
        Set db = Nothing
     
    End Sub
    un exemple d'appel de la sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DoCmdRunSQL "SELECT * FROM [feuil1$A3:D600] WHERE age > 18", sheets("Résultat").range("A1")
    pour mettre le résultat de la requête en A1 de la feuille Feuil2

    la table s'écrit [nomonglet$plage]
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    bravo

    là je suis vert de jalousie

    j'aurais du y penser !
    Elle est pas belle la vie ?

  3. #3
    Invité
    Invité(e)
    Par défaut


    J'ai déjà testé le SQL sous Excel à la suite du tuto de Silkyroad, je trouve cela génial, quand on est habitué au SQL, c'est un outil formidable.

    Starec

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    J'en demande peut être un peu trop, mais dans ton premier post, en lien, tu pourrait mettre le lien du tuto de silkyroad ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Re-bonjour,

    j'ai un petit problème avec ta requête. J'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub DoCmdRunSQL(ByVal sql As String, ByVal rDest As Range)
     
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
        
        Set db = DAO.OpenDatabase(ActiveWorkbook.FullName, False, False, "Excel 8.0;HDR=YES;")
        Set rs = db.OpenRecordset(sql, DAO.dbOpenSnapshot)
        rDest.CopyFromRecordset rs
        Set rs = Nothing
        Set db = Nothing
    End Sub
    Sub testSQL()
    DoCmdRunSQL "SELECT * FROM ['Working Extract'$A1:AF3917] WHERE Sold-to-Party = 12236", Sheets("test").Range("A1")
    End Sub
    Et ça me claque une erreur sur la ligne en gras, en me disant :

    Erreur d'éxécution 3061:

    Too Few Parameters. Expected 3.
    Petite précision : avant qu'il me fasse cette erreur, il essaye de m'ouvrir Business Objects, et quand j'annule, c'est la qu'il me claque cette erreur

    Quand je vais dans l'aide, effectivement, il y a plein de champs du coup je suis un peu paumé

    QUestion subsidiaire idiote : si j'ai bien compris (dis moi si j'ai faux ), ta macro fonctionne bien dans un classeur déja ouvert hein ? par rapport au tuto de silkyroad qui travaille sur des classeurs fermés ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    C'est encore moi

    J'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub DoCmdRunSQL(ByVal sql As String, ByVal rDest As Range)
     
        Dim db As DAO.Database
        Dim rs As DAO.Recordset
     
        Set db = DAO.OpenDatabase(ActiveWorkbook.FullName, False, False, "Excel 8.0;HDR=YES;")
        Set rs = db.OpenRecordset(sql, dbOpenSnapshot)
        rDest.CopyFromRecordset rs
        Set rs = Nothing
        Set db = Nothing
     
    End Sub
     
    Sub testSQL()
    DoCmdRunSQL "SELECT * FROM [test$A1:AF3917] WHERE SoldtoParty = 12236", Sheets("test2").Range("A2")
    End Sub
    En fait, j'ai changé les titres de mes colonnes, j'ai enlevé tous les caractères qui n'étais pas des caractères de textes ("(","-",,"#", les espaces) pour avoir des noms de colonnes sans avoir de caractères "non"alphabétiques.
    J'ai lancé cette macro au dessus, et cette fois ça marche à peu près, dans le sens, ou quand je lance la macro, il me lance windows Installer pour installer "BusinessObjects_518". Quand j'annule, il me lance ma requete SQL et mes résultats sont bons (alléluïa !). SI j'efface ce que je viens d'obtenir, et que je relance la macro, cette fois tout se passe bien (il n'y a pas de fenêtre pour installer).
    Donc en fait, j'ai remarqué que ça le faisait quand j'ouvrai le fichier pour la première fois et que je lançais la macro.

    Donc 2 questions : est-ce que vous savez d'où ça vient ? et est-ce que vous savez comment on peut désactiver cette espèce d'alerte d'installation ?

    Merci à vous
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    je n'ai pas BO, donc il n'est pas en principe nécessaire de l'installer pour que ça fontionne.
    En revanche as-tu ajouté la référence DAO sur ton fichier ?
    Il y a en revanche un bug : lorsque le fichier n'est pas enregistré le code ne fonctionne pas. En effet, il initialise la connexion DAO sur un nom de fichier
    ActiveWorkbook.FullName
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 338
    Points : 4 295
    Points
    4 295
    Par défaut
    Je viens de tester en enregistrant mon fichier avant, j'ai le même problème, j'ai encore BO qui veux s'installer

    La référence DAO est bien ajoutée.

    De plus, ça marche a moitié, vu que quand j'annule l'installation, ça va jusqu'à la fin et ça me met les bonnes données dans ma feuille résultat

    Donc le problème ne vient pas de la la question est : d'où vient-il alors ?

    Est-ce que quelqu'un d'autre que moi a déjà utilisé ce qu'a fait Caféine et n'a pas eu de soucis ? ou il n'y a que moi qui ai ce problème ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonsoir
    On peut aussi remplacer [feuil1$A3:D600] par une plage nommée entre crochets [ ] et l'appel à notre sub deviendra
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmdRunSQL "SELECT * FROM [non de la plage] WHERE age > 18", sheets("Résultat").range("A1")
    sans l'utilisation de non de la feuille et $.
    Bonne soirée
    Abed_H

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/02/2012, 22h47
  2. [XL-2000] Supprimer ligne si cellule d'une colonne = 0, sur une plage de cellules
    Par audesara dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/05/2011, 16h16
  3. Dessiner un rectangle sur une plage de cellules donnée
    Par artisous43 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2010, 20h06
  4. [XL-2003] Calcul sur une plage de cellules
    Par kokoVBA dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2009, 10h35
  5. Comment creer un recordset ADO sur une plage de cellules
    Par JYL74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2007, 09h36

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