Bonjour

j'ai un problème pour lancer plusieurs macros d'affiler, j'ai une feuille " Attribution" où il y a les attributions des différentes licences et une feuille "Listes" qui sert de référentiel qui est caché aux utilisateurs ( caché ou non j'ai le même problème )


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
Private Sub ConfigureApplicationSettings(enable As Boolean)
    If enable Then
        ' Activer le rafraîchissement automatique du calcul
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
    Else
        ' Désactiver le rafraîchissement automatique du calcul
        Application.Calculation = xlCalculationManual
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    End If
End Sub
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' Désactiver les fonctionnalités pendant l'exécution de la macro
    ConfigureApplicationSettings False
 
    ' Vérifier si le double-clic a été effectué dans les colonnes C, D ou E
    If Target.Column = 4 And Target.row >= 2 Then
        ' Définir une référence à la feuille "Listes"
        Dim feuilleListes As Worksheet
        Set feuilleListes = Sheets("Listes")
 
        ' Trouver la dernière ligne avec des données dans les colonnes A à D de la feuille "Listes"
        Dim lastListesRow As Long
        lastListesRow = feuilleListes.Cells(feuilleListes.Rows.Count, "A").End(xlUp).row
 
        ' Colonne D (Attribution) va chercher dans la colonne A3:A de la feuille "Listes"
        If Target.Column = 4 Then
            With Me.Cells(Target.row, Target.Column).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="='Listes'!A2:A" & lastListesRow
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
                .ErrorTitle = "Erreur de saisie"
                .ErrorMessage = "Merci d'utiliser uniquement les listes déroulantes pour saisir vos données depuis la feuille 'Listes'."
            End With
 
        End If
    End If
 
    ' Réactiver les fonctionnalités après l'exécution de la macro
    ConfigureApplicationSettings True
End Sub
 
Private Sub Worksheet_Change(ByVal Target As Range)
 
   ' Désactiver les fonctionnalités pendant l'exécution de la macro
    ConfigureApplicationSettings False
 
    Dim affRow As Integer ' Colonne D (Attribution)
    Dim resetCols As String ' Colonnes à réinitialiser
    Dim ActionTypes As Variant
    ActionTypes = Array("DonnéesCellulesFA", "AfficherBoiteDialogues")
 
    On Error Resume Next
 
    For Each ActionType In ActionTypes
        Select Case ActionType
 
            Case "DonnéesCellulesFA"
                Application.EnableEvents = False
                Macro40Code Target
                Application.EnableEvents = True
 
            Case "AfficherBoiteDialogues"
                Application.EnableEvents = False
                Macro41Code Target
                Application.EnableEvents = True
 
        End Select
    Next ActionType
 On Error GoTo 0
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Dim changedCell As Range
    Dim modifiedRow As Integer
 
    ' Vérifie si la modification concerne la colonne D
    If Not Intersect(Target, columns("D")) Is Nothing Then
        Application.EnableEvents = False ' Pour éviter un déclenchement infini
 
        ' Obtient le numéro de la ligne modifiée
        modifiedRow = Target.row
 
        ' Supprime les données dans les colonnes C, E et F de la même ligne
        Cells(modifiedRow, "C").ClearContents
        Cells(modifiedRow, "E").ClearContents
        Cells(modifiedRow, "F").ClearContents
 
        ' Supprime la validation du format de cellule dans les colonnes C, E et F de la même ligne
        Cells(modifiedRow, "C").Validation.Delete
        Cells(modifiedRow, "E").Validation.Delete
        Cells(modifiedRow, "F").Validation.Delete
 
        Application.EnableEvents = True
    End If
 
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  ' Appel Version Foxit
      ' Définir une référence à la feuille "Attribution"
    Dim feuilleAttribution As Worksheet
    On Error Resume Next
    Set feuilleAttribution = Sheets("Attribution")
    On Error GoTo 0
 
    ' Trouver la dernière ligne avec des données dans la colonne D de la feuille "Attribution"
    Dim derniereLigne As Long
    derniereLigne = feuilleAttribution.Cells(feuilleAttribution.Rows.Count, "D").End(xlUp).row
 
    ' Vérifier si la dernière ligne contient "FOXIT PhantomPDF"
    If feuilleAttribution.Range("D" & derniereLigne).value = "FOXIT PhantomPDF" Then
 
        ' Appeler la macro "VersionFOXIT" avec la référence à la cellule
        Call VersionFOXIT
    End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'Appel Licence Foxit
 
    ' Définir une référence à la feuille "Listes"
    Dim feuilleListes As Worksheet
    On Error Resume Next
    Set feuilleListes = Sheets("Listes")
    On Error GoTo 0
 
    ' Dernière ligne avec des données dans la colonne Ac de la feuille "Listes"
    Dim derniereLigneListes As Long
    derniereLigneListes = feuilleListes.Cells(feuilleListes.Rows.Count, "Ac").End(xlUp).row
 
    ' Vérifier si une valeur est présente dans la colonne Ac à partir de la 3e ligne de la feuille "Listes"
 
    If WorksheetFunction.CountA(feuilleListes.Range("Ac3:Ac" & derniereLigneListes)) > 0 Then
        ' Appeler la macro "LicencesFOXIT"
        LicencesFOXIT
    End If
Mon code fonctionne mais si je rajoute par esemple

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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
     ' Appel Bon de Commande Adobe Acrobat Pro 2017
 
    ' Trouver la dernière ligne avec des données dans la colonne D de la feuille "Attribution"
    derniereLigne = feuilleAttribution.Cells(feuilleAttribution.Rows.Count, "D").End(xlUp).row
 
    ' Vérifier si la dernière ligne contient "Adobe Acrobat Pro 2017"
    If feuilleAttribution.Range("D" & derniereLigne).value = "Adobe Acrobat Pro 2017" Then
 
        ' Appeler la macro "VersionFOXIT" avec la référence à la cellule
        Call BonComAdobeAcrobatPro2017
    End If
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
 
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
     ' Appel Bon de Commande Adobe Acrobat Pro 2017
 
    ' Trouver la dernière ligne avec des données dans la colonne D de la feuille "Attribution"
    derniereLigne = feuilleAttribution.Cells(feuilleAttribution.Rows.Count, "D").End(xlUp).row
 
    ' Vérifier si la dernière ligne contient "Adobe Acrobat Pro 2017"
    If feuilleAttribution.Range("D" & derniereLigne).value = "Adobe Acrobat Pro 2017" Then
 
        ' Appeler la macro "VersionFOXIT" avec la référence à la cellule
        Call BonComAdobeAcrobatPro2017
    End If
 
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
 
    ' Réactiver les fonctionnalités après l'exécution de la macro
    ConfigureApplicationSettings True
 
 End Sub
 
Sub VersionFOXIT()
 ' Set a reference to the "Attribution" sheet
    Dim feuille1 As Worksheet
    On Error Resume Next
    Set feuille1 = Sheets("Attribution")
    On Error GoTo 0
 
    If feuille1 Is Nothing Then
        MsgBox "Sheet 'Attribution' not found!", vbExclamation
        Exit Sub
    End If
 
    ' Find the last row with data in column D of the "Attribution" sheet
    Dim lastRow As Long
    lastRow = feuille1.Cells(feuille1.Rows.Count, "D").End(xlUp).row
 
    ' Check each cell in column D for the presence of "FOXIT PhantomPDF"
    Dim cell As Range
    For Each cell In feuille1.Range("D1:D" & lastRow)
        If InStr(1, cell.value, "FOXIT PhantomPDF", vbTextCompare) > 0 Then
            ' Set a reference to the "Listes" sheet
            Dim feuilleListes As Worksheet
            On Error Resume Next
            Set feuilleListes = Sheets("Listes")
            On Error GoTo 0
 
            ' Find the last row with data in column AB of the "Listes" sheet
            Dim lastListesRow As Long
            lastListesRow = feuilleListes.Cells(feuilleListes.Rows.Count, "AC").End(xlUp).row
 
            ' Clear existing validation in the corresponding cell in column E on the "Attribution" sheet
            feuille1.Range("E" & cell.row).Validation.Delete
 
            ' Create a data validation list in the corresponding cell in column E on the "Attribution" sheet
            With feuille1.Range("E" & cell.row).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="='Listes'!AC3:AC" & lastListesRow
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
                .ErrorTitle = "Erreur de saisie"
                .ErrorMessage = "Merci d'utiliser uniquement les listes déroulantes pour saisir vos données depuis la feuille 'Listes'."
            End With
        Else
            ' If "FOXIT PhantomPDF" is not found, delete the data validation in the corresponding cell in column E on the "Attribution" sheet
            feuille1.Range("E" & cell.row).Validation.Delete
        End If
    Next cell
 
End Sub
 
Sub LicencesFOXIT()
    ' Licence Foxit
    ' Désactiver les fonctionnalités pendant l'exécution de la macro
    ConfigureApplicationSettings False
 
    ' Définir une référence à la feuille "Attribution"
    Dim feuille1 As Worksheet
    On Error Resume Next
    Set feuille1 = Sheets("Attribution")
    On Error GoTo 0
 
    If feuille1 Is Nothing Then
        MsgBox "La feuille 'Attribution' n'a pas été trouvée !", vbExclamation
        Exit Sub
    End If
 
    ' Trouver la dernière ligne avec des données dans la colonne D de la feuille "Attribution"
    Dim derniereLigne As Long
    derniereLigne = feuille1.Cells(feuille1.Rows.Count, "D").End(xlUp).row
 
    ' Parcourir chaque cellule de la colonne D de "Attribution"
    For i = 1 To derniereLigne
        ' Vérifier si le nom du logiciel dans la colonne D est "FOXIT PhantomPDF"
        If InStr(1, feuille1.Range("D" & i).value, "FOXIT PhantomPDF", vbTextCompare) > 0 Then
            ' Vérifier la version dans la colonne E
            Select Case feuille1.Range("E" & i).value
                Case "FoxitPDFEditor 9.7"
                    ' Attribuer la licence spécifique pour la version "9.7" à la cellule correspondante de la colonne F sur la feuille "Attribution"
                    feuille1.Range("F" & i).value = "toto1"
                Case "FoxitPDFEditor 9.4"
                    ' Attribuer la licence spécifique pour la version "9.4" à la cellule correspondante de la colonne F sur la feuille "Attribution"
                    feuille1.Range("F" & i).value = "toto2"
                Case "FoxitPhantomPDF 10.0.0 Pour PC"
                    ' Attribuer la licence spécifique pour la version "10.0.0" à la cellule correspondante de la colonne F sur la feuille "Attribution"
                    feuille1.Range("F" & i).value = "toto3"
                Case "FoxitPhantomPDF 4.0.0_1 Pour MAC"
                    ' Attribuer la licence spécifique pour la version "4.0.0_1" à la cellule correspondante de la colonne F sur la feuille "Attribution"
                    feuille1.Range("F" & i).value = "toto4"
                Case Else
                    ' Laisser vide pour les versions non reconnues
            End Select
        End If
    Next i
 
    ' Réactiver les fonctionnalités après l'exécution de la macro
    ConfigureApplicationSettings True
 
End Sub
 
Sub BonComAdobeAcrobatPro2017()
 
    'Bon de Commande Adobe Acrobat Pro 2017
 
    ' Désactiver les fonctionnalités pendant l'exécution de la macro
    ConfigureApplicationSettings False
 
    ' Définir une référence à la feuille "Attribution"
    Dim feuille1 As Worksheet
    Set feuille1 = Sheets("Attribution")
 
    ' Trouver la dernière ligne avec des données dans la colonne D de la feuille "Attribution"
    Dim lastRow As Long
    lastRow = feuille1.Cells(feuille1.Rows.Count, "D").End(xlUp).row
 
    ' Vérifier chaque cellule de la colonne D pour la présence de "Adobe Acrobat Pro 2017"
    Dim cell As Range
    For Each cell In feuille1.Range("D1:D" & lastRow)
        If InStr(1, cell.value, "Adobe Acrobat Pro 2017", vbTextCompare) > 0 Then
            ' Définir une référence à la feuille "Listes"
            Dim feuilleListes As Worksheet
            Set feuilleListes = Sheets("Listes")
 
            ' Trouver la dernière ligne avec des données dans la colonne B de la feuille "Listes"
            Dim lastListesRow As Long
            lastListesRow = feuilleListes.Cells(feuilleListes.Rows.Count, "B").End(xlUp).row
 
            ' Créer une liste de validation des données dans la cellule correspondante de la colonne C sur la feuille "Attribution"
            With feuille1.Range("C" & cell.row).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                xlBetween, Formula1:="='Listes'!B3:B" & lastListesRow
                .IgnoreBlank = True
                .InCellDropdown = True
                .ShowInput = True
                .ShowError = True
                .ErrorTitle = "Erreur de saisie"
                .ErrorMessage = "Merci d'utiliser uniquement les listes déroulantes pour saisir vos données depuis la feuille 'Listes'."
            End With
        Else
            ' Si "Adobe Acrobat Pro 2017" n'est pas trouvé, supprimer la validation des données dans la cellule correspondante de la colonne C sur la feuille "Attribution"
            feuille1.Range("C" & cell.row).Validation.Delete
        End If
    Next cell
 
      ' Réactiver les fonctionnalités après l'exécution de la macro
        ConfigureApplicationSettings True
 
End Sub
Mais si je veux ajouter par exemple:

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
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
     ' Appel Version Pour Adobe Acrobat Pr o2017
 
      ' Dernière ligne avec des données dans la colonne Ac de la feuille "Listes"
    Dim derniereLigneListes As Long
    derniereLigneListes = feuilleListes.Cells(feuilleListes.Rows.Count, "B").End(xlUp).row
 
    ' Vérifier si une valeur est présente dans la colonne Ac à partir de la 3e ligne de la feuille "Listes"
 
    If WorksheetFunction.CountA(feuilleListes.Range("B3:B" & derniereLigneListes)) > 0 Then
 
        ' Appeler la macro "VersionFOXIT" avec la référence à la cellule
        Call BonComAdobeAcrobatPro2017
    End If
 
'''''''''''''''''''
la macro VersionFOXIT n'est plus appelé mais fonctionne toujours si je la lance manuellement

J'ai testé plusieurs maniéres de les executer automatiquement mais j'ai toujours le même probléme.
en les lançants directement, en les compartementant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
For Each ActionType In ActionTypes
        Select Case ActionType
 
            Case "DonnéesCellulesFA"
                Application.EnableEvents = False
                Macro40Code Target
                Application.EnableEvents = True
 
            Case "AfficherBoiteDialogues"
                Application.EnableEvents = False
                Macro41Code Target
                Application.EnableEvents = True
mais avec d'autres numeros
Idem