Bonjour,

Voilà mon souci, je travaille sur la mise en place d'un outil pour suivre des formations que des personnes doivent réaliser.
Mon code me permets d'afficher les informations nécessaires; avec un menu déroulant, je sélectionne la formation ensuite en cliquant sur un bouton afficher dans un tableau (créer au préalable) j'obtiens les informations nécessaires sauf que ça ne marche pas à tous les coups.
1) Avec certaines formations tout s'affiche correctement sauf les informations de la colonne 8 (date de dernière réalisation) qui restent vide. code c'est à partir de la ligne
2) Avec certaines formations, il m'affiche deux à trois personnes et puis il m'affiche l'erreur suivante "Variable objet ou variable de bloc With non définie".( ligne 112 pour l'erreur)
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
Sub etat_formation()   'Etat d'une population par formation
 
Dim i, j, k, l, p, t, v As Double
 
Dim intitule As String
Dim manager As String
Dim numero_ligne As Double
Dim numero_ligne2 As Double
Dim valeur As String
Dim num_ligne As Double
Dim num_ligne1 As Double
Dim num_ligne2 As Double
Dim num_ligne3 As Double
Dim num_ligne4 As Double
Dim num_ligne5 As Double
Dim num_ligne6 As Double
Dim num_ligne7 As Double
Dim code_stage As String
Dim code_stage2 As String
Dim validite As String
Dim val As Double
Dim test_date As Double
Dim test_date2 As Double
Dim test_date3 As Double
Dim butee_depassee As Double
Dim butee_limite As Double
Dim butee_finannee As Double
Dim butee_finannee_suiv As Double 
 
 
butee_depassee = 0
butee_limite = 0
butee_finannee = 0
butee_finannee_suiv = 0
 
i = 2   ' première ligne du tableau effectifs colonne manager
j = 2   ' premier code stage possible dans l'onglet Codes SAP
k = 10  ' première ligne vide du tableau etat par formation
l = 20  ' nombre de lignes disponibles pour lister les agents dans l'onglet état par formation
v = 10  ' première ligne vide du tableau etat par formation
 
ActiveWorkbook.Save' Lancement macro affichage
 
intitule = Sheets("Etat par formation").Cells(6, 2)
Set formation = Sheets("Formations").Columns("B").Find(what:=intitule)
num_ligne = formation.Row
validite = Sheets("Formations").Cells(num_ligne, 4)
If validite = "P" Then
aff_formation = "Permanente"
Else
aff_formation = validite
End If
 
Set formation2 = Sheets("Codes SAP").Columns("A").Find(what:=intitule)
num_ligne1 = formation2.Row
 
If Sheets("Etat par formation").Cells(6, 11) = "" Then    'liste des agents redevables au global
 
    Do While Sheets("Effectifs").Cells(i, 2) <> ""
 
        Select Case Sheets("Effectifs").Cells(i, 6).Value
        Case "CME"
        t = 5
        Case "EIR"
        t = 6
        Case "MAN"
        t = 7
        Case "CAB"
        t = 8
        End Select
        If Sheets("Formations").Cells(num_ligne, t) = "x" Then
        Sheets("Etat par formation").Cells(k, 1) = Sheets("Effectifs").Cells(i, 4)
        Sheets("Etat par formation").Cells(k, 3) = Sheets("Effectifs").Cells(i, 5)
        Sheets("Etat par formation").Cells(k, 5) = Sheets("Effectifs").Cells(i, 3)
        Sheets("Etat par formation").Cells(k, 6) = Sheets("Effectifs").Cells(i, 7)
        Sheets("Etat par formation").Cells(k, 7) = Sheets("Effectifs").Cells(i, 6)
        Sheets("Etat par formation").Cells(k, 10) = aff_formation
        matricule = Sheets("Effectifs").Cells(i, 3)
        k = k + 1
 
            If k > 38 Then   'insertion de lignes si nb agents > nb lignes dispos
            p = k + 1
            Range(Cells(p, 1), Cells(p, 12)).Select
            Selection.EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
            Range(Cells(p, 1), Cells(p, 2)).Select
            With Selection
                .HorizontalAlignment = xlLeft
                .MergeCells = True
            End With
            Range(Cells(p, 3), Cells(p, 4)).Select
            With Selection
                .HorizontalAlignment = xlLeft
                .MergeCells = True
            End With
            Range(Cells(p, 8), Cells(p, 9)).Select
            With Selection
                .HorizontalAlignment = xlCenter
                .MergeCells = True
            End With
            Range(Cells(p, 11), Cells(p, 12)).Select
            With Selection
                .HorizontalAlignment = xlCenter
                .MergeCells = True
            End With
            End If
 
       ' (cette partie qui ne m'affiche pas la date de formation)
            Do While Sheets("Codes SAP").Cells(num_ligne1, j) <> ""
 
            code_stage = Sheets("Codes SAP").Cells(num_ligne1, j)
            Set Stage = Sheets("Histo").Columns("C").Find(what:=matricule)
            num_ligne2 = Stage.Row
            If Sheets("Histo").Cells(num_ligne2, 4) = code_stage Then
            date_session = Sheets("Histo").Cells(num_ligne2, 8)
            End If
                Do While num_ligne3 <> num_ligne2
                Set Stage = Sheets("Histo").Columns("C").FindNext(Stage)
                num_ligne3 = Stage.Row
                If Sheets("Histo").Cells(num_ligne3, 4) = code_stage Then
                date_session2 = Sheets("Histo").Cells(num_ligne3, 8)
                End If
                If date_session2 > date_session Then
                        If date_session2 > date_session_finale Then
                        date_session_finale = date_session2
                        End If
                Else
                        If date_session > date_session_finale Then
                        date_session_finale = date_session
                        End If
                End If
                Loop
                If date_session_finale <> "" Then
                    If Sheets("Etat par formation").Cells(k - 1, 8) < date_session_finale Then
                    Sheets("Etat par formation").Cells(k - 1, 8) = date_session_finale
                    End If
                End If
            date_session_finale = 0
            date_session = 0
            date_session2 = 0
            num_ligne2 = 0
            num_ligne3 = 0
            j = j + 1
            Loop
        j = 2
        End If
 
    i = i + 1
    Loop
J’espère que je trouverais quelqu'un qui pourrait m'aider.
Par avance merci.