XL 2016 Aide pour finaliser un code Vba

ReneDav14000

XLDnaute Occasionnel
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
 
Solution
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é....)

ReneDav14000

XLDnaute Occasionnel
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 ?
 

Cousinhub

XLDnaute Barbatruc
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é....)
 

ReneDav14000

XLDnaute Occasionnel
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é....)
Ah oui c'est vrai, on me l'avait déjà dit.
Ton code code fonctionne très bien.
Merci beaucoup et bonnes fêtes de fin d'année

Merci également à TooFatBoy a qui je souhaite également de bonnes fêtes.
 

Discussions similaires

Statistiques des forums

Discussions
311 722
Messages
2 081 930
Membres
101 843
dernier inscrit
Thaly