Problème avec code

Bonjour.

J'ai un erreur dans ce code.

Bloc if sans end if.

Je ne comprends pas pourquoi

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, Range("C13")) Is Nothing Then 'Message pour le formta de l'heure
MsgBox "Il faut mettre : entre les chiffres pour l'heure ex: 8:30"

If Not Intersect(Target, Range("C21")) Is Nothing Then
MsgBox "Dans le cas où la mesure a été prise et était nulle, il faut l'indiquer clairement en inscrivant 0"

If Not Intersect(Target, Range("C30")) Is Nothing Then _
MsgBox "Lorsque la quantité d'eau disponible est limitée et que les prélèvements sont réalisés sur plusieurs journées, inscrire les deux heures d'échantillonnage dans le même ordre que le nombre de contenants (ex. 9:30 et 11:45). Indiquer les dates dans la case Remarques."

If Not Intersect(Target, Range("C44")) Is Nothing Then _
MsgBox "Dans le cas où la mesure a été prise et était nulle, il faut l'indiquer clairement en inscrivant 0"

If Not Intersect(Target, Range("C17")) Is Nothing Then _

MsgBox "Dans le cas où la mesure n'a pu être prise, mettre un 'X' comme valeur"

If Not Intersect(Target, Range("C19")) Is Nothing Then _
MsgBox "Dans le cas où la mesure n'a pu être prise, mettre un 'X' comme valeur"

End If

Dim t As Byte

For t = 3 To 8 ' no de colonnes

If (Cells(14, t)) <> "" Then
If (Cells(13, t)) > (Cells(14, t)) Then
MsgBox "L'heure de départ doit être après l'arrivée"

End If
End If

Next t

End Sub

Bonjour,

Ce code ne devrait en principe plus bloquer :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim t As Byte

If Not Intersect(Target, Range("C13")) Is Nothing Then 'Message pour le formta de l'heure
    MsgBox "Il faut mettre : entre les chiffres pour l'heure ex: 8:30"
End if

If Not Intersect(Target, Range("C21, C44")) Is Nothing Then
    MsgBox "Dans le cas où la mesure a été prise et était nulle, il faut l'indiquer clairement en inscrivant 0"
End if

If Not Intersect(Target, Range("C30")) Is Nothing Then
    MsgBox "Lorsque la quantité d'eau disponible est limitée et que les prélèvements sont réalisés sur plusieurs journées, inscrire les deux heures d'échantillonnage dans le même ordre que le nombre de contenants (ex. 9:30 et 11:45). Indiquer les dates dans la case Remarques."
End if

If Not Intersect(Target, Range("C17, C19")) Is Nothing Then
    MsgBox "Dans le cas où la mesure n'a pu être prise, mettre un 'X' comme valeur"
End if

For t = 3 To 8 ' no de colonnes
    If Cells(14, t).value <> "" Then
        If Cells(13, t).value > Cells(14, t).value Then
            MsgBox "L'heure de départ doit être après l'arrivée"
        End If
    End If
Next t

End Sub

Cependant, je ne suis pas sûr que vous parveniez au résultat escompté. Il vous faudrait plutôt une procédure

Private Sub Worksheet_Change(ByVal Target As Range)

vu qu'il s'agit apparemment de validation de saisie.

Il vous faut définir des fonctions validation. Exemple pour l'heure :

Function ValidHeure(cell as range) as Boolean
    if cell.value Like "[0-2]{0,}[0-9]:[0-5][0-9]" then
        ValidHeure = true
    end if
end function

Puis dans votre macro :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim t As Byte

If Not Intersect(Target, Range("C13")) Is Nothing Then 'Message pour le formta de l'heure
    if not ValidHeure(Target) then
        MsgBox "Il faut mettre : entre les chiffres pour l'heure ex: 8:30"
    end if
End if

.......

End sub

Je ne suis pas sûr du résultat pour la validation car je ne peux la tester mais le principe y est...

Cordialement,

Bonjour,

Chaque bloc If, doit se terminer par un "End If".

En indentant le code, on s'aperçoit qu'il en manque quelques uns... A moins que tu ne veuilles faire un bloc : If ElseIf ElseIf ElseIf End If...

Regarde ce code indenté correctement...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C13")) Is Nothing Then 'Message pour le formta de l'heure
        MsgBox "Il faut mettre : entre les chiffres pour l'heure ex: 8:30"
        If Not Intersect(Target, Range("C21")) Is Nothing Then
            MsgBox "Dans le cas où la mesure a été prise et était nulle, il faut l'indiquer clairement en inscrivant 0"
            If Not Intersect(Target, Range("C30")) Is Nothing Then _
                MsgBox "Lorsque la quantité d'eau disponible est limitée et que les prélèvements sont réalisés sur plusieurs journées, inscrire les deux heures d'échantillonnage dans le même ordre que le nombre de contenants (ex. 9:30 et 11:45). Indiquer les dates dans la case Remarques."
                If Not Intersect(Target, Range("C44")) Is Nothing Then _
                    MsgBox "Dans le cas où la mesure a été prise et était nulle, il faut l'indiquer clairement en inscrivant 0"
                    If Not Intersect(Target, Range("C17")) Is Nothing Then _
                        MsgBox "Dans le cas où la mesure n'a pu être prise, mettre un 'X' comme valeur"
                        If Not Intersect(Target, Range("C19")) Is Nothing Then _
                            MsgBox "Dans le cas où la mesure n'a pu être prise, mettre un 'X' comme valeur"
                        End If
                    '? End If manquant
                '? End If manquant
            '? End If manquant
        '? End If manquant
    '? End If manquant
Dim t As Byte
    For t = 3 To 8 ' no de colonnes
        If (Cells(14, t)) <> "" Then
            If (Cells(13, t)) > (Cells(14, t)) Then
                MsgBox "L'heure de départ doit être après l'arrivée"
            End If
        End If
    Next t
End Sub
Rechercher des sujets similaires à "probleme code"