HTA (VBS) syntaxe SQL

Résolu
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
- 15 déc. 2012 à 14:32
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
- 15 déc. 2012 à 22:31
 Bonjour le Forum,


Dans un HTA, je parcours un fichier Excel pour créer une ListBox dynamique avec DISTINCT sur le nom des clients.

    ' Ouverture ADODB Connection
    objConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" & strPlanProdFile &_
                  ";Extended Properties=""Excel 8.0;HDR=YES;""") 

    ' Initialisation objet ADODB Recordset
    Set objRs = CreateObject("ADODB.Recordset")

    ' Exécution Query [1=adOpenKeyset, 3=adLockOptimistic]
    objRs.Open "Select DISTINCT [Client] from [Jobs$]" , objConn, 1, 3   

    ' Création ListBox dynamique
    Do Until objRs.EOF
       Set objOption = Document.CreateElement("OPTION")
       objOption.Text = Trim(objRs.Fields(0))
       objOption.Value = Trim(objRs.Fields(0))            
       lstSAVE.Add(objOption)       
       objRs.MoveNext
    Loop
    objRs.Close




La ListBox m'affiche correctement le nom des clients.

Question:
Est-il possible dans objOption.Text d'afficher le nom des clients et le nombre de lignes du client ???
Exemple:
TITI (20)
TATA (150)
....




jean-marc

7 réponses

cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
15 déc. 2012 à 15:01
Salut

Non, si tu utilises Dictinct dans une syntaxe, tu demandes au moteur SQL de ne renvoyer que les données uniques, donc une seule ligne renvoyée par "Client".
Essaye ça :
Select [Client], Count([Client]) Qté
  From [Jobs$]
 Group By [Client]
Cette requète te renverra 2 colonnes : L'une avec le nom et la seconde, appelée ici "Qté" pour le nombre

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
15 déc. 2012 à 19:37
Oui, mais ne passe pas par SQL pour cela : Comme tu passes en revue toutes les données fournies par ton RecordSet, profites-en pour faire toi même le total et, en fin de boucle, tu ajoutes ton Item "(tous les clients)" accompagné de la somme calculée.
3
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
15 déc. 2012 à 15:24
 Bonjour Jack,

Je te remercie pour ton intention.

Syntaxe ok

objRs.Open "Select [Client], Count([Client]) from [Jobs$] GROUP BY [Client]" , objConn, 1, 3

    Do Until objRs.EOF

msgbox objRs.Fields(0) &vbcrlf& objRs.Fields(1)


Bon week.

jean-marc
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
15 déc. 2012 à 15:31
Jack,

Puis-je profiter de ton savoir !!!!

Dans la ListBox, j'affiche comme choix

* (Tous les clients)
client x (nombre de ligne pour ce client)
client y (nombre de ligne pour ce client)
....

Donc, ta proposition pour client et nombre est ok.
Est-ce possible d'ajouter * (Tous les clients) (nbre total de lignes) ????





jean-marc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
15 déc. 2012 à 21:05
Effectivement Jack,

J'ai opté pour

    ' Initialisation objet ADODB Recordset
    Set objRs = CreateObject("ADODB.Recordset")

    ' Exécution Query [1=adOpenKeyset, 3=adLockOptimistic]
    objRs.Open "Select [Client], Count([Client]) from [Jobs$] GROUP BY [Client]", objConn, 1, 3

    ' Création ListBox dynamique
    Do Until objRs.EOF
       Set objOption = Document.CreateElement("OPTION")
       objOption.Text = objRs.Fields(0) & " [" & objRs.Fields(1) & "]"
       objOption.Value = Trim(objRs.Fields(0))            
       lstSAVE.Add(objOption)  
       strSumClient = strSumClient + objRs.Fields(1)     
       objRs.MoveNext
    Loop
    objRs.Close

    ' Ajout dans la ListBox de la sélection "*"
    Set objOption = Document.CreateElement("OPTION")
    objOption.Text = "* (Tous les Clients)" & " [" & strSumClient & "]"
    objOption.Value = "*"
    lstSAVE.Add(objOption)


Par contre, le choix de sélectionner "* (Tous les clients)" se retrouve en dernière position dans ma ListBox, mais ce n'est pas grave.

Encore, merci Jack.

jean-marc
0
cs_Jack
Messages postés
14007
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
79
15 déc. 2012 à 21:10
Dans les objets ListBox et leur méthode Add, il y a des options pour choisir l'emplacement de l'item que l'on insère.
0
cs_JMO
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
15 déc. 2012 à 22:31
 Bonsoir,

N'ayant pas réussi à positionner mon item, j'ai utilisé la méthode suivante:

    'Initialisation header de la ListBox dynamique:
    Set objOption = Document.CreateElement("OPTION")
    objOption.Text = "Choix de la sauvegarde mutualisée" & Space(21)
    lstSAVE.Add(objOption)

    ' Ajout dans la ListBox de la sélection "*"
    Set objOption = Document.CreateElement("OPTION")
    objOption.Text = "* (Tous les Clients)" 
    objOption.Value = "*"
    lstSAVE.Add(objOption) 

    ' Initialisation à vide de la ListBox Client
    Set objOption = Document.CreateElement("OPTION")
    objOption.Text = vbNullString
    objOption.Value = vbNullString
    lstClient.Add(objOption)

    ' Initialisation objet ADODB Connection
    Set objConn = CreateObject("ADODB.Connection")

    ' Ouverture connection ADODB
    objConn.Open ("Provider=Microsoft.Jet.OLEDB.4.0; " & "Data Source=" &_
                  strPlanProdFile &_
                  ";Extended Properties=""Excel 8.0;HDR=YES;""") 

    ' Initialisation objet ADODB Recordset
    Set objRs = CreateObject("ADODB.Recordset")

    ' Exécution Query [1=adOpenKeyset, 3=adLockOptimistic]
    objRs.Open "Select [Client], Count([Client]) from [Jobs$] GROUP BY [Client]", objConn, 1, 3

    ' Création ListBox dynamique
    Do Until objRs.EOF
       Set objOption = Document.CreateElement("OPTION")
       objOption.Text = objRs.Fields(0) & " [" & objRs.Fields(1) & "]"
       objOption.Value = Trim(objRs.Fields(0))            
       lstSAVE.Add(objOption)  
       strSumClient = strSumClient + objRs.Fields(1)     
       objRs.MoveNext
    Loop
    objRs.Close

    ' Modification ListBox
    lstSAVE(1).Text = lstSAVE(1).Text & " [" & strSumClient & "]" 





jean-marc
0