VibiA
Messages postés10Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention26 novembre 2007
-
24 nov. 2007 à 12:46
VibiA
Messages postés10Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention26 novembre 2007
-
26 nov. 2007 à 21:04
Bonjour à tous,
J'ai découvert depuis peu de temps qu'il était possible de générer des requêtes SQL directement via Excel, via MS Query plus précisément.
Je sais que ce n'est pas aussi puissant qu'Acces ou que MySql qui sont de 'vraies' BDD mais je n'ai que cela sous la main.
Mon problème est certainement très simple, je cherche simplement à récupérer le résultat de ma requête dans une variable et non la renvoyer directement sur Excel.
Je n'utilise que le 'Count' donc ce résultat n'est qu'une valeur.
Ex de code que je dois modifier (code provenant du mode enregistrement d'Excel)
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DBQ=C:\Documents and Settings\jbw\Bureau\sql test\Classeur1.xls;DefaultDir=C:\Documents and Settings\jbw\Bureau\sql test;Driver" _
), Array( _
"={Driver do Microsoft Excel(*.xls)};DriverId=790;FIL=excel 8.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTr" _
), Array("ansactions=0;Threads=3;UID=admin;UserCommitSync=Yes;")), Destination _
:=Range("G8"))
.CommandText = Array( _
"SELECT Count(AAA1.ColA)" & Chr(13) & "" & Chr(10) & "FROM `C:\Documents and Settings\jbw\Bureau\sql test\Classeur1`.AAA1 AAA1, `C:\Documents and Settings\jbw\Bureau\sql test\Classeur1`.ZZZ1 ZZZ1" & Chr(13) & "" & Chr(10) & "WHERE AAA1.ColA = ZZZ1.ColB" _
)
.Name = "Lancer la requête à partir de aaaaaaaaaaaaaaaaaaaa"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 25 nov. 2007 à 18:26
Voici un exemple:
En A, il y a des noms
En B, il y a des prénoms
En C, il y a des pays
En D, il y a des valeurs à additionner ("zone de somme" ou zone à additionner)
Ça te donnera la somme de la colonne D pour tous les Bill Gates des USA
Remarque les zones qui vont de 2 à 100. Ces zones doivent toutes être équivalentes.
VibiA
Messages postés10Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention26 novembre 2007 24 nov. 2007 à 15:19
Je ne peux pas car en fait je cherche un équivalent du VLOOKUP, je souhaite comparer 2 fichiers, d'un jour sur l'autre savoir combien de lignes ont apparu et/ou disparu (sachant que je compare seulement 2 colonnes car j'ai une colonne avec des entrées uniques).
Donc avec un vlookup, je le fais sans problème mais c'est long (les 2 fichiers font plus de 50k lignes), donc j'ai pensé qu'une requête SQL 'count' ferait l'affaire beaucoup plus rapidement.
VibiA
Messages postés10Date d'inscriptionsamedi 24 novembre 2007StatutMembreDernière intervention26 novembre 2007 24 nov. 2007 à 17:06
Finalement, je me rends compte que c'est inutile, car je peux réécrire par dessus, donc ni vu ni connu
mais par contre, le countif avec plusieurs conditions, ca m'interesserait de savoir car je me suis mis au SQL juste parce que le countif (ou sumif) ne gère (selon moi) qu'une condition.