XL 2021 Calcul dans une requête SQL - Microsoft QUERY

  • Initiateur de la discussion Initiateur de la discussion roybaf
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roybaf

XLDnaute Occasionnel
Bonjour a tous,

Je cherche a effectuer un calcul me permettant de me remonter un pourcentage d'avancement sur des dossiers.

Dans le champs "compte_0.CPT_CODE" j'ai un nombre d'enregistrements x, dans l'exemple ici 676

Le champs "BAL_REV" contient deux types de variables : O pour "oui" et N pour NON

Le champs COL_CODE_SUP contient quant à lui des initiales qui peuvent être variables, c'est soit le champs est vide ou non vide.

1 - J'aimerais récupérer dans le résultat de la requête le pourcentage de comptes révisés (Total de O pour le champs "BAL_REV" / par Total des enregistrements "compte_0.CPT_CODE" : dans l'exemple ici cela donne 567/676 = 83.87%

2 - j'aimerais également pouvoir récupérer le résultat suivant dans la même requête : (Total de non vide pour le champs "COL_CODE_SUP" / par otal des enregistrements "compte_0.CPT_CODE" : dans l'exemple ici cela donne : 657/676 = 97.18%

J'arrive à me connecter à la base, a lire la donnée (Il y a des milliers de tables et j'ai enfin réussi à trouver les champs qui m'interessent, j'y suis depuis 15 jours! mais je n'arrive pas a afficher le résultat voulu qui devrait me renvoyer sous excel un tableau du type :

83.87%97.18%

Quelqu'un aurait-il la solution?
Capture d’écran 2025-02-01 140721.png
Capture d’écran 2025-02-01 140721.png
 
Je n'ai jamais utilisé power query malheureusement et lorsque je me connecte à la base, les tables chargent indefiniment sans afficher de résultat, alors j'ai tenté de travailler avec les méthodes "a l'ancienne" surement mais qui m'affichent néanmoins des résultats
Bonjour, ça ne répond pas à ton problème, mais ce qui concerne PWQ il y a dans ce site beaucoup de publications sur le sujet dont les miennes avec fichiers d'exemples.... cela pourrait être une bonne entrée en matière pour tes futurs besoins devant passer par PWQ. Une fois que l'on y gouter et que l'on a compris son fonctionnement difficile de s'en passer 🙂
 
Un second problème survient.

J'ai crée mon code VBA qui crée une boucle pour récupérer le résultat de cette requête et le coller sur une nouvelle feuille. Cepandant, les données ne s'importent pas visiblement problème de syntaxe. Ce que je ne m'explique pas c'est que lorsque je sélectionne les connexions existantes dans le ruban excel, mon code est bien repris et les données s'importent, ais-je fais fais une erreur dans ma requête?

VB:
Sub requete_BD()
Dim J       As Long
Dim Ws      As Worksheet
Dim NomFeuille As Variant, Sel As Variant
Dim Dossier_Base As String

    
  
Dim qt As QueryTable


    Set Ws = Sheets("Sorties Bilan")
    For J = 7 To Ws.Range("AO" & Ws.Rows.Count).End(xlUp).Row
    NomFeuille = Ws.Range("AO" & J)
    If Not IsError(NomFeuille) Then
            If Not ExisteFeuille(NomFeuille) Then Sheets.Add(after:=Sheets(Sheets.Count)).Name = NomFeuille
            Range("A1") = NomFeuille
        
        Sheets("Données").Select
            Dossier_Base = "\\srv11\c$\AWAzur3307\MyDATA\" & NomFeuille
 sqlstring = "SELECT Count (*) AS `compte_0.CPT_CODE`, balance_0.BAL_REV,balance_0.COL_CODE_SUP " & vbLf & _
                "FROM `" & NomFeuille & "`.balance balance_0, `" & NomFeuille & "`.compte compte_0 " & vbLf & _
                "WHERE balance_0.CPT_CODE = compte_0.CPT_CODE" & vbLf & _
                "GROUP BY balance_0.BAL_REV, balance_0.COL_CODE_SUP"


connstring = _
"ODBC;" & _
                        "DRIVER={MySQL ODBC 9.0 Unicode Driver};" & _
                        "SERVER=SRV11;" & _
                        "PORT=3307;" & _
                        "Database=" & NomFeuille & ";" & _
                        "USER=root;" & _
                        "PASSWORD=acdpass;"


                        

On Error Resume Next
With ActiveSheet.QueryTables.Add(Connection:=connstring, _
 Destination:=Range("A2"), Sql:=sqlstring)
 .Refresh BackgroundQuery:=False
End With
    End If
        
Next J
    
Ws.Select

End Sub

Function ExisteFeuille(Nom) As Boolean:  ExisteFeuille = False
  On Error Resume Next
    ExisteFeuille = Sheets(Nom).Name <> ""
    ExisteFeuille = Err = 0
  On Error GoTo 0
End Function
 

Pièces jointes

  • Capture d’écran 2025-02-01 172608.png
    Capture d’écran 2025-02-01 172608.png
    10.9 KB · Affichages: 4
Bonjour le fil,
pour ce qui concerne le post 1,
avec 3 requêtes (non testées) :
Requête 1 : Select Count(*) From Balance_0, Compte_0 Where CPT_CODE.Balance_0 = CPT_CODE.Compte_0
Requête 2 : Select Count(*) From Balance_0, Compte_0 Where BAL_REV='O' And CPT_CODE.Balance_0 = CPT_CODE.Compte_0,
Requête 3 : Select Count(*) From Balance_0, Compte_0 Where COL_CODE_SUP <> '' And CPT_CODE.Balance_0 = CPT_CODE.Compte_0,
En A2 = Résultat de la Requête 1
En B2 = Résultat de la Requête 2 / A2 (avec Format %)
En C2 = Résultat de la Requête 3 / A2 (avec Format %)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour