Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Contribuez
Contribuez Placez ici vos codes, sources, trucs et astuces que vous souhaitez partager avec les membres du club.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2007, 16h06   #1
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
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 :
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 :
 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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2007, 17h31   #2
Expert Confirmé
 
Inscription : mai 2005
Messages : 3 419
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 3 419
Points : 3 768
Points : 3 768
bravo

là je suis vert de jalousie

j'aurais du y penser !
__________________
Elle est pas belle la vie ?
random est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2007, 15h02   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 922
Points : 30 922
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS


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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 09h59   #4
Membre Expert
 
Avatar de illight
 
Inscription : septembre 2005
Messages : 1 016
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : septembre 2005
Messages : 1 016
Points : 1 044
Points : 1 044
J'en demande peut être un peu trop, mais dans ton premier post, en lien, tu pourrait mettre le lien du tuto de silkyroad ?
__________________
Avant de poster, et http://www.developpez.com/sources/

N'oubliez pas le

Vous une brute ? faites voir
illight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h29   #5
Membre Expert
 
Avatar de illight
 
Inscription : septembre 2005
Messages : 1 016
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : septembre 2005
Messages : 1 016
Points : 1 044
Points : 1 044
Re-bonjour,

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

Code :
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 :

Citation:
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 ?
__________________
Avant de poster, et http://www.developpez.com/sources/

N'oubliez pas le

Vous une brute ? faites voir
illight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 14h27   #6
Membre Expert
 
Avatar de illight
 
Inscription : septembre 2005
Messages : 1 016
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : septembre 2005
Messages : 1 016
Points : 1 044
Points : 1 044
C'est encore moi

J'ai écrit ça :

Code :
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
__________________
Avant de poster, et http://www.developpez.com/sources/

N'oubliez pas le

Vous une brute ? faites voir
illight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 13h07   #7
Expert Confirmé Sénior

 
Avatar de cafeine
 
Inscription : juin 2002
Messages : 3 882
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 3 882
Points : 4 500
Points : 4 500
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

Développez une application de gestion des comptes bancaires dans Access de A à Z
Déjà 12 tutoriels, le dernier en date : Comment faire un TextBox auto-extensible dans un formulaire ?


cafeine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2008, 15h14   #8
Membre Expert
 
Avatar de illight
 
Inscription : septembre 2005
Messages : 1 016
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Bas Rhin (Alsace)

Informations forums :
Inscription : septembre 2005
Messages : 1 016
Points : 1 044
Points : 1 044
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 ?
__________________
Avant de poster, et http://www.developpez.com/sources/

N'oubliez pas le

Vous une brute ? faites voir
illight est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 22h47   #9
Membre éclairé
 
Inscription : janvier 2008
Messages : 419
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 419
Points : 392
Points : 392
Bonsoir
On peut aussi remplacer [feuil1$A3:D600] par une plage nommée entre crochets [ ] et l'appel à notre sub deviendra
Code :
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
Abed_H est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h04.


 
 
 
 
Partenaires

Hébergement Web