fonction SQL dans macro excel

fonction SQL dans macro excel - VB/VBA/VBS - Programmation

Marsh Posté le 21-06-2007 à 19:00:06    

bonsoir,

 

pte question qui risque de sembler simple pour bcp mais mes connaissances en VB sont proches du Zero.

 

objectif :
dans un fichier excel, je dois lancer X requetes SQL afin de mettre à jour des cellules sachant que je vais avoir X requetes par onglet et j ai autant d'onglet que de machines

 

La macro semble tourner correctement (conencte bien à la base, change bien d'onglet) mais elle ne m'insere rien dans mes cellules excel.
en lancant juste la requete d'insertion cela fonctionne mais vu la volumétrie cela n'est pas jouable

 

si une ame charitable pouvait me dire comment faire SVP  :)  

 


Code :
  1. Sub Run()
  2. Dim name
  3. '--------------------------------
  4. 'GS11SLWI001
  5. '--------------------------------
  6. Sheets("GS11SLWI001" ).Select
  7. name = "GS11SLWI001"
  8. Call requete
  9. '--------------------------------
  10. 'GS11SLWI025
  11. '--------------------------------
  12. Sheets("GS11SLWI025" ).Select
  13. name = "GS11SLWI025"
  14. Call requete
  15. End Sub
  16. Sub requete()
  17. Conn = "ODBC;"
  18. Conn = Conn & "DSN=glpi;"
  19. Conn = Conn & "SERVER=10.10.10.10;"
  20. Conn = Conn & "UID=admin;"
  21. 'type OS
  22. With ActiveSheet.QueryTables.Add(Connection:=Conn, Destination:=Range("B4" ))
  23.         .CommandText = Array("SELECT glpi_dropdown_os.name FROM glpi_dropdown_os RIGHT OUTER JOIN glpi_computers ON glpi_computers.os = glpi_dropdown_os.id WHERE glpi_computers.name = '" & name & "' " )
  24.         .name = "Lancer la requête à partir de glpi"
  25.         .FieldNames = False
  26.         .RowNumbers = False
  27.         .FillAdjacentFormulas = False
  28.         .PreserveFormatting = True
  29.         .RefreshOnFileOpen = False
  30.         .BackgroundQuery = True
  31.         .RefreshStyle = xlInsertDeleteCells
  32.         .SavePassword = False
  33.         .SaveData = True
  34.         .AdjustColumnWidth = False
  35.         .RefreshPeriod = 0
  36.         .PreserveColumnInfo = True
  37.         .Refresh BackgroundQuery:=False
  38. End With
  39. 'OS Version
  40. With ActiveSheet.QueryTables.Add(Connection:=Conn, Destination:=Range("B5" ))
  41.         .CommandText = Array("SELECT glpi_dropdown_os_version.name FROM glpi_dropdown_os_version RIGHT OUTER JOIN glpi_computers ON glpi_computers.os_version = glpi_dropdown_os_version.id WHERE glpi_computers.name = '" & name & "' " )
  42.         .name = "Lancer la requête à partir de glpi"
  43.         .FieldNames = False
  44.         .RowNumbers = False
  45.         .FillAdjacentFormulas = False
  46.         .PreserveFormatting = True
  47.         .RefreshOnFileOpen = False
  48.         .BackgroundQuery = True
  49.         .RefreshStyle = xlInsertDeleteCells
  50.         .SavePassword = False
  51.         .SaveData = True
  52.         .AdjustColumnWidth = False
  53.         .RefreshPeriod = 0
  54.         .PreserveColumnInfo = True
  55.         .Refresh BackgroundQuery:=False
  56. End With
  57. End Sub
    



Message édité par p'titmath le 21-06-2007 à 19:05:04
Reply

Marsh Posté le 21-06-2007 à 19:00:06   

Reply

Marsh Posté le 22-06-2007 à 10:07:27    

help no one?

Reply

Marsh Posté le 22-06-2007 à 10:13:44    

n'utilisant pas ce type de bdd, je tente qd même une réponse.
tu veux le résultat de ta requête, mais est-ce qu'il est possible d'avoir, via ta destination, plusieurs solutions ?
j'entends par là, si le recordset de ta requete contient plusieurs résultats, iront-ils en b5, puis b6 b7 etc. ?
et test tout bete a faire, est-ce que la requete que tu fais hors d'excel te donne un résultat ou pas ? :)

Reply

Marsh Posté le 22-06-2007 à 10:17:56    

en fait qd je n'appelle pas de fonction mais que je tape les requetes à la mano les unes à la suites des autres , cela fonctionne bien sans souci. (mes cellules sont biens remplis).
 
ce qui est bizarre, c'est qu'excel lance bien la connection ODBC, se connecte à la base mais je n'ai aucun retrour dans les cellules.
 
il doit me manquer un truc tout bete mais quoi ;<
 
 

Reply

Marsh Posté le 22-06-2007 à 10:28:53    

des news !
 
en fait en passant la commande
 
name = "gs11slwi025" directement dans la fonction requete il me sort bien des valeurs.
 
donc en fait il faut arriver à faire passer la variable name dans la fonction requete.
 
est ce que qqn sait?

Reply

Marsh Posté le 22-06-2007 à 10:41:24    

ben ...
sans le call tu fais direct
 

Code :
  1. requete(name)


 
et dans la définition de la fonction tu mets
 

Code :
  1. sub requete (name as string)

Reply

Marsh Posté le 22-06-2007 à 10:46:57    

On devrait interdire les débutants :)

 

Tu dois déclarer un paramètre à ta fonction requete() comme ça :
Sub requete(name As String)

 

et appeler cette procédure avec la syntaxe suivante
Call requete(name)

 

Vérifie bien quand même que tu n'as pas, en plus, un problème de majuscules/minuscules (gs11slwi025 ou GS11SLWI025)

 

edit: grillé, voilà ce que c'est de faire plusieurs trucs en même temps :)


Message édité par tegu le 22-06-2007 à 10:47:35
Reply

Marsh Posté le 22-06-2007 à 10:56:42    

lol
oui je sais, j'avoue que le dev et moi ca fait 40, mais j apprend =)
comme on dit c'est en forgeant qu'on devient forgeron
 
merci en tt cas ca marche

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed