HTA (VBS) syntaxe SQL [Résolu]

cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 15 déc. 2012 à 14:32 - Dernière réponse : cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 déc. 2012 à 15:01
3
Merci
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)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_Jack
Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 déc. 2012 à 19:37
3
Merci
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.

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 15 déc. 2012 à 15:24
0
Merci
 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
Commenter la réponse de cs_JMO
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 15 déc. 2012 à 15:31
0
Merci
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
Commenter la réponse de cs_JMO
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 15 déc. 2012 à 21:05
0
Merci
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
Commenter la réponse de cs_JMO
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 15 déc. 2012 à 21:10
0
Merci
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.
Commenter la réponse de cs_Jack
cs_JMO 1855 Messages postés jeudi 23 mai 2002Date d'inscription 24 juin 2018 Dernière intervention - 15 déc. 2012 à 22:31
0
Merci
 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
Commenter la réponse de cs_JMO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.