Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Cousinhub

XLDnaute Barbatruc
Inactif
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...
 

Cousinhub

XLDnaute Barbatruc
Inactif
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
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.
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…