Microsoft 365 VBA ADODB doublons

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 !

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

J'ai un comportement étrange de ADODB pendant l'affichage de valeur : il y a des ligne en double, alors que la même extraction n'affiche pas de doublons quand je l'exécute sur sas. Par exemple, sur la première ligne j'ai la donnée commençant par A, ensuite, à partir de la ligne 100, j'ai la même donnée commençant par A, alors que "distinct" et "order by" sont bien appliqués.

Peut-être l'anomalie est dans la partie Do While Not RECSET2.EOF.
Merci pour votre aide.
Voici mon code.

VB:
Public Sub GET_INFO_CONTRAT(ByRef strQ As String)

Call GET_INFO_0

    Dim xlRow As Integer
    Dim RECSET2 As New ADODB.Recordset
    
      
      Worksheets("1 - Résultat").Activate
      ActiveWindow.DisplayGridlines = Not (ActiveWindow.DisplayGridlines)
      ActiveWindow.DisplayGridlines = False
 
    
    Call CONNEXION_P("xxx", "xxx", "xxx")
  


        RECSET2.Open "select distinct doss.no_police as contrat, decode(pers.s_raisonsoc,null,pers.LP_CIVILITE||' '||pers.s_nom,pers.s_raisonsoc) as nom, decode (pers.s_raisonsoc,null,pers.s_prenom,pers.s_raisonsoc) as prenom," & _
        " prod.cd_produit as code_produit, prod.lb_long as libelle_prod, proto.cd_protocole as code_proto from db_dossier doss" & _
        " left join db_tiers tiers on doss.is_tiers = tiers.is_tiers" & _
        " left join db_protocole proto on doss.is_protocole = proto.is_protocole" & _
        " left join db_produit prod on doss.is_produit = prod.is_produit" & _
        " left join db_contractant cntrct on doss.is_contractant = cntrct.is_contractant" & _
        " left join db_personne pers on cntrct.is_personne = pers.is_personne" & _
        " where doss.cd_dossier = 'SOUSC' and tiers.cd_tiers='" & strQ & "' order by contrat", cnn_Pegase, adOpenDynamic, adLockBatchOptimistic


     xlRow = Range("Chapeau").Row + 1 + xlRow
    
     Do While Not RECSET2.EOF

      Sheets("1 - Résultat").Cells(xlRow, Range("Police_1").Column).Value = RECSET2("contrat").Value
      Sheets("1 - Résultat").Cells(xlRow, Range("Nom_1").Column).Value = RECSET2("nom").Value
      Sheets("1 - Résultat").Cells(xlRow, Range("Prenom_1").Column).Value = RECSET2("prenom").Value
      Sheets("1 - Résultat").Cells(xlRow, Range("Code_produit_1").Column).Value = RECSET2("code_produit").Value
      Sheets("1 - Résultat").Cells(xlRow, Range("Nom_produit_1").Column).Value = RECSET2("libelle_prod").Value
      Sheets("1 - Résultat").Cells(xlRow, Range("Protocole_1").Column).Value = RECSET2("code_proto").Value
    
      RECSET2.MoveNext
    
      
       xlRow = xlRow + 1

     Loop
  
      RECSET2.Close
      Call DECONNEXION_P

    End Sub
 
Bonsoir,
C'est curieux car l'instruction select Distinct interdit de facto les doublons.

Le left join génaire frecament des doublons, ce qui justifie le Distinct. Dans ton ça je subodore que le left join débouche sur des valeurs presque identique mais de toutes évidence différente.

Je t'invites a vérifier si tes multiples left join ne débouche pas sur des combinaisons de valeures Jonte différentes.

Je t'invites a lier par des sous requête les tables pouvant être liées par des inner join afin de réduire les left join

Code:
 select Distinct * from  A
Left join (Select B.ID , B.champA , C.champB from B inner join C on C.id=B.id) as rq on rq.id= A.id
 
Dernière édition:
- 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

Réponses
3
Affichages
770
Retour