Bonjour à tous,
J'ai écris ce code qui doit me permettre d'afficher du texte dans une cellule Excel selon le choix d'une cellule.
Si la cellule active de la plage D8:J13 de la feuille Calend correspond à une date de la plage G4:G16 de la feuille Données alors "JOUR FERIE" s'inscrit dans la cellule H19 de la feuille Calend, sinon c'est "JOUR NORMAL".
Cependant je rencontre un soucis, il ne s'affiche que "JOUR NORMAL"
Les cellules de la plage D8:J13 sont au format personnalisé "jj" et celles de la plage G4:G16 "jj/mm/aaaa".
Merci par avance pour votre aide
VB:
Dim Cel as Range
For Each Cel In Worksheets("Calend").Range("D8:J13")
If Not IsError(Application.Match(Cel.Value, Worksheets("Données").Range("G4:G16"), 0)) Then
[H19].Value = "JOUR FERIE"
Else
[H19].Value = "JOUR NORMAL"
End If
Next Cel
Oui, il s'applique à chaque changement de cellule...
Mais il ne faut pas faire de boucle, juste tester si Target est bien dans la plage, et si c'est le cas, si Target est férié...
Et quand tu dis "incompatibilité de type", ce sont bien des dates dans la plage D8:J13?
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D8:J13")) Is Nothing Then
If Not IsError(Application.Match(CLng(Target), Worksheets("Données").Range("G4:G16"), 0)) Then
[H19].Value = "JOUR FERIE"
Else
[H19].Value = "JOUR NORMAL"
End If
End If
End Sub
PS, dernière réponse de ma part si tu ne joins pas un fichier exemple (très allégé....)
Re-,
Je confirme que mon code fonctionne
Cependant, votre boucle donnera toujours la valeur de la dernière cellule...
Et si cette date ne correspond pas à un jour férié, ce sera un jour normal...
Re-,
Je confirme que mon code fonctionne
Cependant, votre boucle donnera toujours la valeur de la dernière cellule...
Et si cette date ne correspond pas à un jour férié, ce sera un jour normal...
Je ne comprends pas. Désolé.
J'ai mis le code dans WorkSheet.SelectionChange() donc normalement, le code devrait s'appliquer à chaque changement de cellule, non ?
Oui, il s'applique à chaque changement de cellule...
Mais il ne faut pas faire de boucle, juste tester si Target est bien dans la plage, et si c'est le cas, si Target est férié...
Et quand tu dis "incompatibilité de type", ce sont bien des dates dans la plage D8:J13?
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D8:J13")) Is Nothing Then
If Not IsError(Application.Match(CLng(Target), Worksheets("Données").Range("G4:G16"), 0)) Then
[H19].Value = "JOUR FERIE"
Else
[H19].Value = "JOUR NORMAL"
End If
End If
End Sub
PS, dernière réponse de ma part si tu ne joins pas un fichier exemple (très allégé....)
Oui, il s'applique à chaque changement de cellule...
Mais il ne faut pas faire de boucle, juste tester si Target est bien dans la plage, et si c'est le cas, si Target est férié...
Et quand tu dis "incompatibilité de type", ce sont bien des dates dans la plage D8:J13?
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D8:J13")) Is Nothing Then
If Not IsError(Application.Match(CLng(Target), Worksheets("Données").Range("G4:G16"), 0)) Then
[H19].Value = "JOUR FERIE"
Else
[H19].Value = "JOUR NORMAL"
End If
End If
End Sub
PS, dernière réponse de ma part si tu ne joins pas un fichier exemple (très allégé....)