Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 :



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 :


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
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.
 

job75

XLDnaute Barbatruc
Bonjour,

Nous sommes sur un forum Excel, ce serait bien si l'on pouvait avoir la base de données sur une feuille Excel.

Avec quelques explications pour permettre éventuellement une programmation simple en VBA.

A+
 

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
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 !
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…