Sub test2()
Dim SqlTOutSdoublon As String, SqlTOutTOut As String, Sql
SqlTOutSdoublon = "(SELECT year([Date]) as Annee,NoDossier,last([Cat#]) as Cat,last(Espece) as Espece,last(Caractère) as Caractère,max(DateDC) as DateDC FROM [BD$] group by NoDossier, year([Date]))"
With CreateObject("Adodb.connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
SqlTOut = "SELECT Annee, Espece, sum(CD) as CD,sum(FA) as FA,sum(AD) as AD,sum(ChFa) as ChFa,Sum(RtAd) as RtAd,Sum(adoptable) as adoptable,Sum(NAdoptable) as NAdoptable,sum([A Déterminer]) as [A Déterminer],Sum(DateDc) as DateDc FROM (" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 1 AS CD, 0 AS FA,0 as AD,0 as ChFa,0 as RtAd,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'CD'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 1 AS FA ,0 as AD,0 as ChFa,0 as RtAd,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'FA'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,1 as AD,0 as ChFa,0 as RtAd,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'AD'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,1 as ChFa,0 as RtAd,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'CHFA'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,0 as ChFa,1 as RtAd ,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'RTAD'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,0 as ChFa,0 as RtAd ,1 as adoptable,0 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'ADOPTABLE'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,0 as ChFa,0 as RtAd ,0 as adoptable,1 as NAdoptable,0 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Cat]) = 'NON ADOPTABLE'" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier,year(DateDc) as Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,0 as ChFa,0 as RtAd ,0 as adoptable,0 as NAdoptable,0 AS [A Déterminer],1 as DateDc FROM " & SqlTOutSdoublon & " WHERE[DateDc] is not null" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Annee, [Espece], 0 AS CD, 0 AS FA,0 as AD,0 as ChFa,0 as RtAd ,0 as adoptable,0 as NAdoptable,1 AS [A Déterminer],0 as DateDc FROM " & SqlTOutSdoublon & " WHERE UCASE([Caractère]) = ucase('A Déterminer')" & vbCrLf
SqlTOut = SqlTOut & "UNION ALL" & vbCrLf
SqlTOut = SqlTOut & "SELECT DISTINCT NoDossier, Year([BD$].[Date]) AS Annee, Especes.Espece,CD,FA,AD,ChFa,RtAd,adoptable,NAdoptable,[A Déterminer],DateDc FROM [BD$] , (SELECT DISTINCT Espece, 0 AS CD, 0 AS FA, 0 AS AD, 0 AS ChFa, 0 AS RtAd, 0 AS adoptable, 0 AS NAdoptable, 0 AS [A Déterminer], 0 AS DateDc FROM [BD$]) AS Especes" & vbCrLf
SqlTOut = SqlTOut & ") AS SubQuery GROUP BY Annee, Espece"
'2023
Sql = "SELECT Espece, sum(CD) as CD,sum(FA) as FA,sum(AD) as AD,sum(ChFa) as ChFa,Sum(RtAd) as RtAd,Sum(adoptable) as adoptable,Sum(NAdoptable) as NAdoptable,sum([A Déterminer]) as [A Déterminer],Sum(DateDc) as DateDc FROM (" & vbCrLf
Sql = Sql & SqlTOut
Sql = Sql & ") AS SubQuery WHERE Annee=" & Year(Date) - 1 & " GROUP BY Espece"
Sheets("Résultat").Range("B7").CopyFromRecordset .Execute(Sql)
'2024
Sql = "SELECT Espece, sum(CD) as CD,sum(FA) as FA,sum(AD) as AD,sum(ChFa) as ChFa,Sum(RtAd) as RtAd,Sum(adoptable) as adoptable,Sum(NAdoptable) as NAdoptable,sum([A Déterminer]) as [A Déterminer],Sum(DateDc) as DateDc FROM (" & vbCrLf
Sql = Sql & SqlTOut
Sql = Sql & ") AS SubQuery WHERE Annee=" & Year(Date) & " GROUP BY Espece"
Sheets("Résultat").Range("B13").CopyFromRecordset .Execute(Sql)
End With
End Sub