Worksheet_SelectionChange l'emporte sur Worksheet_Change
Bonjour
j'ai deux macro dans un meme onglet: Worksheet_SelectionChange et Worksheet_Change
le Worksheet_Change ne fonctionne pas une fois Worksheet_SelectionChange finit de s'executer
Bonjour Abdel39,
Mis à part le fait que votre façon de faire est très "étrange"
Vous faisiez un
Application.EnableEvents = FalseSans ensuite faire
Application.EnableEvents = TrueCe qui arrêtait les évènements
Ensuite imbrique des If... End If n'est absolument pas utile et complique la lecture du code
Voici votre fichier avec le code modifié
A+
Bonjour
Merci pour votre implication. Cependant ca ne marche pas: metter des valeurs non numeriques dans e4, f4 ou g4 et vous allez voir le probleme. En effet si je rentre une valeur non numerique dans e4 le programme doit signaler l'erreur et doit retourner tant que la valeur dans e4 n'est pas numerique et ne doit pas poser la question voulez vous entrer un autre lot.
j'ai une solution provisoire lorsque 'il s'agit de trois cellule, mais lorsqu'il s'agit de plusieurs comme dans mon fichier d'origine, ca ne marche pas
ci-joint la version provisoire dans l'Exemple simple qui a un defaut une fois je rentre une valeur non numerique du numero du lot du lot 3 aucune le programme ne me demande pas de reveni corriger la valeur non numerique
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim AnswerYes As Integer
Application.ScreenUpdating = False
If Worksheets("Timer").Cells(4, 16).Value > 1 _
And Worksheets("Timer").Cells(14, 16).Value > 1 _
And Worksheets("Timer").Cells(24, 16).Value > 1 _
And Worksheets("Extra samples").Cells(4, 5).Value > 0 _
And Worksheets("Extra samples").Cells(4, 6).Value > 0 _
And Worksheets("Extra samples").Cells(4, 7).Value > 0 Then
' On sort
Exit Sub
' Donc le IF peut s'arrêter là
End If
'========================Lot 1===============================
If Worksheets("Timer").Cells(4, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 1")
Range("e3").Select
GoTo Fin
End If
If Worksheets("Extra samples").Cells(4, 5).Value = 0 Or Not IsNumeric(Range("e4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 1")
Range("e4").Select
GoTo Fin
End If
'========================Lot 2===============================
AnswerYes = MsgBox("Voulez-vous continuer pour selectionner un autre Lot?", vbQuestion + vbYesNo, "User Repsonse")
If AnswerYes = vbNo Then Exit Sub
If Worksheets("Timer").Cells(14, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 2")
Range("f3").Select
GoTo Fin
End If
'============================================================
If Worksheets("Extra samples").Cells(4, 6).Value = 0 Or Not IsNumeric(Range("f4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 2")
Range("f4").Select
GoTo Fin
End If
'========================Lot 3===============================
If Worksheets("Timer").Cells(24, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 3")
Range("g3").Select
GoTo Fin
End If
'============================================================
If Worksheets("Extra samples").Cells(4, 7).Value = 0 Or Not IsNumeric(Range("g4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 3")
Range("g4").Select
End If
Fin:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Re,
Si j'ai tout bien compris, essayez ce fichier simplifié
A+
Dans ton nouveau fichier: les trois menus sont disparus, aucune obligation de remplir les cellules e4,f4 et g4 et aucune obligation de remplir e3,f3 et g3
il faut obliger l'utilisateur de selectionner le lot et de choisir son numero
essaye ceci qui reste presque parfait sauf pour le dernier lot (3) qui ne revient pas à la cellule g4 lorsqu'elle est non numerique (voir fichier joint)
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim AnswerYes As Integer
Application.ScreenUpdating = False
If Worksheets("Timer").Cells(4, 16).Value > 1 _
And Worksheets("Timer").Cells(14, 16).Value > 1 _
And Worksheets("Timer").Cells(24, 16).Value > 1 _
And Worksheets("Extra samples").Cells(4, 5).Value > 0 _
And Worksheets("Extra samples").Cells(4, 6).Value > 0 _
And Worksheets("Extra samples").Cells(4, 7).Value > 0 Then
' On sort
Exit Sub
' Donc le IF peut s'arrêter là
End If
'========================Lot 1===============================
If Worksheets("Timer").Cells(4, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 1")
Range("e3").Select
GoTo Fin
End If
If Worksheets("Extra samples").Cells(4, 5).Value = 0 Or Not IsNumeric(Range("e4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 1")
Range("e4").Select
GoTo Fin
End If
'========================Lot 2===============================
AnswerYes = MsgBox("Voulez-vous continuer pour selectionner un autre Lot?", vbQuestion + vbYesNo, "User Repsonse")
If AnswerYes = vbNo Then Exit Sub
If Worksheets("Timer").Cells(14, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 2")
Range("f3").Select
GoTo Fin
End If
'============================================================
If Worksheets("Extra samples").Cells(4, 6).Value = 0 Or Not IsNumeric(Range("f4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 2")
Range("f4").Select
GoTo Fin
End If
'========================Lot 3===============================
If Worksheets("Timer").Cells(24, 16).Value = 1 Then
Application.EnableEvents = False
MsgBox ("Selectionner le Lot 3")
Range("g3").Select
GoTo Fin
End If
'============================================================
If Worksheets("Extra samples").Cells(4, 7).Value = 0 Or Not IsNumeric(Range("g4").Value) Then
Application.EnableEvents = False
MsgBox ("Enter la veleur numérique du numero du Lot 3")
Range("g4").Select
End If
Fin:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub