Microsoft 365 VBA: remplacer la date manquante

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

J'écris une requêté VBA SQL et je souhaite remplacer une date (timestamp) manquante par une date future:

VB:
Dim dt As Date
   dt = #12/31/2999 11:00:00 AM#

Mais mon code ne marche pas :
Code:
RECSET2.Open "select distinct sup.CD_RGA, sup.LB_COURT, sum(MT_EA) as EA_total" & _
    " from SEA_SUPPORT sr left join (select is_support,is_rga,d_fin_bis as COALESCE(d_fin,dt) from SUPPORT_RGA2 group by is_support,is_rga,d_fin having  max(d_fin_bis) = (d_fin_bis)) drsupp" & _
    " on sr.is_support=drsupp.is_support left join RGA sup on drsupp.IS_RGA=sup.IS_RGA" & _

Voici l'erreur :

1662140520303.png


Le code
VB:
case d_fin when NULL then #12/31/2999 11:00:00 AM# else d_fin end
ne marche pas aussi.

Merci pour votre aide !

Merci pour vos conseils.
 
Dernière édition:

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Ne modifie pas le code la requête pointes sur une table fictive dual!
C'est juste pour test la fonction COALESCEje l'ai tester sur sql serveur mais To_date n'existe pas sur sql serveur et comme j'ai pas oracle ?
Merci beaucoup, le code avec COALESCE marche, les dates manquantes sont remplacées.
J'aurais une autre question, pourquoi je ne peux pas utilisée la date "retravaillée" dans la fonction "having"
IS_RGA, COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga, d_fin having max(d_fin_bis)=d_fin_bis

J'ai une erreur :
1662309061584.png


Alors que le code avec plusieurs COALESCE marche:
IS_RGA, COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga, d_fin having max(COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')))=COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) drsupp
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Merci beaucoup, le code avec COALESCE marche, les dates manquantes sont remplacées.
J'aurais une autre question, pourquoi je ne peux pas utilisée la date "retravaillée" dans la fonction "having"
IS_RGA, COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga, d_fin having max(d_fin_bis)=d_fin_bis

J'ai une erreur :
Regarde la pièce jointe 1148759

Alors que le code avec plusieurs COALESCE marche:
IS_RGA, COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga, d_fin having max(COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM')))=COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) drsupp
J'ai un autre problème que je n'arrive pas à contourner : en faisant le group by is_support,is_rga, d_fin je retiens toutes les valeurs de d_fin_bis. En fait, dans SAS je faisais le group by juste is_support et je retenais la valeur max sur les mêmes supports. Je ne sais pas comment sortir les champs is_rga et d_fin de mon group by car VBA réclame tous les champs choisis.
Merci beaucoup pour votre aide. :)
 

dysorthographie

XLDnaute Accro
Bonjour,
Je ne comprends pas la démarche !
Tu fais un truc du genre
Code:
 Select A From MyTable group by A
Having A=Max(A)
C'est compliqué non?

Pourquoi pas
Code:
Select is_support,is_rga,Max(COALESCE(d_fin,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga
La plus besoin de having!
 

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,
Je ne comprends pas la démarche !
Tu fais un truc du genre
Code:
 Select A From MyTable group by A
Having A=Max(A)
C'est compliqué non?

Pourquoi pas
Code:
Select is_support,is_rga,Max(COALESCE(d_fin,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) as d_fin_bis from SUPPORT_RGA group by is_support,is_rga
La plus besoin de having!
Oui, merci, le code marche, j'ai trouvé une astuce :
VB:
"left join (select distinct is_support, max(COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) as d_fin_bis from SUPPORT_RGA group by is_support) drsupp" & _
"on srvea.is_support=drsupp.is_support left join (select distinct is_support, is_rga, max(COALESCE(d_fin,NULL,TO_DATE('" & dt & "','DD/mm/YYYY HH:MI:SS AM'))) as d_fin_ter from SUPPORT_RGA group by is_support, is_rga) drsupp2 on drsupp2.is_support=drsupp.is_support and drsupp.d_fin_bis=drsupp2.d_fin_ter left join RGA sup on drsupp2.IS_RGA=sup.IS_RGA" & _
J'ai créé d_fin_bis et d_fin_ter pour éviter les doublons.

Merci pour vos conseils !
Bonne journée !
 

Statistiques des forums

Discussions
315 093
Messages
2 116 130
Membres
112 667
dernier inscrit
foyoman