1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| Private Sub btn_MatriceCompet_Click()
Dim Db As DAO.Database
Dim rst1 As DAO.Recordset
Dim strSQL As String
Dim strSQLWHERE As String
Dim nbr As Integer
Dim i As Integer
Dim SQL As String
Dim SQL2 As String
DoCmd.SetWarnings False ' message off
DoCmd.DeleteObject acTable, "Tbl_MatriceCompetence" ' supprime la table temporaire
DoCmd.DeleteObject acQuery, "Tbl_FormationRequiseParPersonne_CrossTab" ' supprime la requête AnalyseAnnée
'On crèe le SQL qui va nous servir a faire une nouvelle table Tbl_MatriceCompetence
SQL = "SELECT Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, [Tbl_Type opleiding].NomFormation, Tbl_Personen.Nom, Last(Str([Obligatoire])) AS Executant, Tbl_Personen.EnActivité INTO Tbl_MatriceCompetence "
SQL = SQL & "FROM Tbl_Personen INNER JOIN ([Tbl_Type opleiding] INNER JOIN Tbl_FormationRequiseParPersonne ON [Tbl_Type opleiding].OpleidingenID = Tbl_FormationRequiseParPersonne.IDTypeOpleidingen) ON Tbl_Personen.PersonenID = Tbl_FormationRequiseParPersonne.IDPersonen "
SQL = SQL & "GROUP BY Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, [Tbl_Type opleiding].NomFormation, Tbl_Personen.Nom, Tbl_Personen.EnActivité "
SQL = SQL & "HAVING (((Tbl_Personen.EnActivité)=Yes)) "
SQL = SQL & "ORDER BY Tbl_FormationRequiseParPersonne.IDTypeOpleidingen, Tbl_Personen.Nom;"
CurrentDb.CreateQueryDef "Tbl_FormationRequiseParPersonne_CrossTab", SQL ' crée la nouvelle requête
DoCmd.OpenQuery "Tbl_FormationRequiseParPersonne_CrossTab" ' ouvre la requête
' on remplace ici les caractères 0 et -1 par ce que l'on a besoin
DoCmd.RunSQL "UPDATE Tbl_MatriceCompetence SET Tbl_MatriceCompetence.Executant = REPLACE([Executant], " & Chr(34) & "-1" & Chr(34) & ", " & Chr(34) & "U" & Chr(34) & ");"
DoCmd.RunSQL "UPDATE Tbl_MatriceCompetence SET Tbl_MatriceCompetence.Executant = REPLACE([Executant], " & Chr(34) & "0" & Chr(34) & ", " & Chr(34) & "F" & Chr(34) & ");"
''''' On va à partir d'ici créer un filtre pour le SQL2; filtre qui va sélectionner les 7xième colonnes (ou moins) de la Tbl_MatriceCompetence
' Filtrage des noms présent dans la matrice de competence
Set Db = CurrentDb()
'on récupère tous les noms de la table Tbl_MatriceCompetence
strSQL = "SELECT Tbl_MatriceCompetence.Nom "
strSQL = strSQL & "FROM Tbl_MatriceCompetence "
strSQL = strSQL & "GROUP BY Tbl_MatriceCompetence.Nom "
strSQL = strSQL & "ORDER BY Tbl_MatriceCompetence.Nom;"
Set rst1 = Db.OpenRecordset(strSQL)
If Not rst1.BOF Then
rst1.MoveLast
rst1.MoveFirst
nbr = rst1.RecordCount
End If
'construire la boucle qui va faire le filtre (pour récupérer les 7 premiers noms), le réactualiser après impression PDF pour traiter les x noms suivants
i = 0
Do While i < nbr
For i = i To i + 6
If Not rst1.EOF Then
strSQLWHERE = "((Tbl_MatriceCompetence.Nom)= " & Chr(34) & rst1.Fields(0) & Chr(34) & ") OR " & strSQLWHERE
rst1.MoveNext
End If
Next
strSQLWHERE = "WHERE (" & Left(strSQLWHERE, Len(strSQLWHERE) - 4) & ")"
SQL2 = "TRANSFORM Last(Tbl_MatriceCompetence.[Executant]) AS DernierDeExecutant "
SQL2 = SQL2 & "SELECT Tbl_MatriceCompetence.IDTypeOpleidingen, Tbl_MatriceCompetence.NomFormation "
SQL2 = SQL2 & "FROM Tbl_MatriceCompetence "
SQL2 = SQL2 & strSQLWHERE
SQL2 = SQL2 & "GROUP BY Tbl_MatriceCompetence.IDTypeOpleidingen, Tbl_MatriceCompetence.NomFormation "
SQL2 = SQL2 & "ORDER BY Tbl_MatriceCompetence.IDTypeOpleidingen "
SQL2 = SQL2 & "PIVOT Tbl_MatriceCompetence.Nom;"
DoCmd.DeleteObject acQuery, "Tbl_MatriceCompetence_Crosstab" ' supprime la requête
CurrentDb.CreateQueryDef "Tbl_MatriceCompetence_Crosstab", SQL2 ' crée la nouvelle requête
DoCmd.OpenReport "rep_CompetenceMatrice", acViewPreview ' ouvre la requête
'Boucle qui peremt d'attendre que le rapport à l'écran soit fermé pour ensuite continuer le code(ici continuer la première boucle sur les noms des personnes)
Do While CurrentProject.AllReports("rep_CompetenceMatrice").IsLoaded
DoEvents
Loop
strSQLWHERE = ""
Loop
DoCmd.SetWarnings True ' message on
rst1.Close
Set rst1 = Nothing
On_Sort:
Db.Close
Set Db = Nothing
End Sub |
Partager