Sélection jours fériés sur jours de présence

Bonjour Cfab6, le fil, le forum,

Il y a une grosse coquille : un "AND" au lieu d'un "OR" :

If Cellule_en_Cours.Offset(0, -1).Value = "AM" Or _

Cellule_en_Cours.Offset(0, -1).Value = "M" Then

Cellule_en_Cours.FormulaR1C1 = Val_Indispo

End If

Bizz

Bonsoir le fil,le forum,Bizz

J'ai modifié mais ça ne change pas le résultat ...étrange

Private Sub Inscription_Indisponibilites(Val_Indispo As String)
    Dim curArea As Range

    ' Désactivation des mises à jour écran, des calculs et des événements
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
        .EnableEvents = False
    End With

    On Error GoTo Gere_Erreurs ' Si erreur, réactive tout

    ' Boucle à travers les zones sélectionnées
    For Each curArea In Selection.Areas
    For Compteur = 12 To 770 Step 3
    ' Vérifie si le compteur est dans la plage sélectionnée
    If Compteur >= curArea.Resize(, 1).Column And Compteur <= curArea.Resize(, 1).Column + curArea.Columns.Count - 1 Then
    ' Récupère l'intersection entre la plage spécifiée et la sélection
    Set Test_Plage = Intersect(Range("A4").Offset(0, Compteur - 1).Resize(31, 1), curArea)
    If Not Test_Plage Is Nothing Then
    ' Mise à jour des cellules pour indisponibilités standards
    For Each Cellule_en_Cours In Test_Plage
    If Not Cellule_en_Cours.Offset(0, -2).Value = "" And _
    (Cellule_en_Cours.Offset(0, -1).Value = "AM" Or Cellule_en_Cours.Offset(0, -1).Value = "M") Then
    Cellule_en_Cours.FormulaR1C1 = Val_Indispo
        End If
        Next Cellule_en_Cours
    ' Mise à jour des cellules pour les jours fériés
 For Each Cellule_en_Cours In Test_Plage
   On Error Resume Next
     If WorksheetFunction.CountIf(Range("Fériés3"), CDbl(Cellule_en_Cours.Offset(0, -2).Value2)) > 0 Then
        If Not OptionButton1.Value Then
        Cellule_en_Cours.ClearContents
        Else
        ' condition ajoutée
        If Cellule_en_Cours.Offset(0, -1).Value = "AM" Or _
        Cellule_en_Cours.Offset(0, -1).Value = "M" Then
        Cellule_en_Cours.FormulaR1C1 = Val_Indispo
        End If
        End If
     End If
     On Error GoTo 0
        Next Cellule_en_Cours
        End If
        End If
        Next Compteur
    Next curArea

Gere_Erreurs:
    ' Réactivation des mises à jour écran, des calculs et des événements
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With
    OptionButton1.Value = True
End Sub

Bonjour Cfab6, le fil, le forum,

Effectivement, j'ai constaté la même chose, il ne semble pas y avoir de différence.

Mais une cellule ne peut pas avoir à la fois deux contenus différents.

Je ne saurais donc pas l'expliquer.

Quoi qu'il en soit, le "OR" est l'expression à utiliser.

Bonne gestion ...

Bizz

Merci encore pour ton travail et merci au forum .

Bonjour Cfab6, le fil, le forum,

J'ai tenté un test. J'ai remplacé "AM" par "AK" dans la feuille et dans le code.

Le résultat est sans équivoque.

Dans la condition : if : "AM" And  "M", il n'y a pas d'erreur, car la condition est "VRAI" dans les deux cas ---> "M" est contenu dans "M" et aussi dans "AM".

C.Q.F.D.

Bizz

N.B. Je suis bien heureux d'avoir pu aider un tantinet.

re,

assez compliqué, je crois ? Je n'ai pas bien suivi ce poste, donc peu-être j'oublie quelqu chose ...

Private Sub Inscription_Indisponibilites(Val_Indispo As String)
     Dim curArea As Range, iSect As Range, c, bDrapeau

     ' Désactivation des mises à jour écran, des calculs et des événements
     With Application
          .ScreenUpdating = False
          .Calculation = xlCalculationManual
          .EnableEvents = False
     End With

     On Error GoTo Gere_Erreurs              ' Si erreur, réactive tout

     Set iSect = Intersect(Selection, Me.Range("J4:AS34"))     'limiter à la plage "calendrier"
     If Not iSect Is Nothing Then
          ' Boucle à travers les zones sélectionnées
          For Each curArea In iSect.Areas
               With curArea
                    For Compteur = 1 + IIf(.Column Mod 3 = 0, 0, 3 - (.Column Mod 3)) To .Columns.Count Step 3
Debug.Print iSect.Columns(Compteur).Address
                         ' Mise à jour des cellules pour indisponibilités standards
                         For Each c In .Columns(Compteur).Cells
                              If c.Offset(0, -2).Value <> "" Then
                                   bDrapeau = IsNumeric(Application.Match(c.Offset(0, -1).Value, Array("AM", "M"), 0))     '2eme colonne est "AM" ou "M"
                                   If bDrapeau Then
                                        c.Value = Val_Indispo
                                   End If
                                   ' Mise à jour des cellules pour les jours fériés
                                   If WorksheetFunction.CountIf(Range("Fériés3"), CDbl(c.Offset(0, -2).Value2)) > 0 Then
                                        If Not OptionButton1.Value Then
                                             c.ClearContents
                                        Else
                                             ' condition ajoutée
                                             If bDrapeau Then
                                                  c.Value = Val_Indispo
                                             End If
                                        End If
                                   End If
                              End If
                         Next
                    Next Compteur
               End With
          Next curArea
     End If

Gere_Erreurs:

     If Err.Number > 0 Then MsgBox "il y avait une erreur !!!!", vbCritical
     ' Réactivation des mises à jour écran, des calculs et des événements
     With Application
          .ScreenUpdating = True
          .Calculation = xlCalculationAutomatic
          .EnableEvents = True
     End With
     OptionButton1.Value = True
End Sub

Bonjour ,le forum ,le fil ,Bart

J'ai essayé avec ton code ça fonctionne également ,pour moi c'est une méthode en plus pour mon utilisation ,Bizz a aussi proposé des choses que j'ai retenu mais je vois que le forum ne manque pas de ressource ,merci à tous .

re,

au début, on parlait d'un "traitement vite". Bon, cela se fait avec cet "intersect" pour limiter la plage à votre calendrier et puis on ne regarde que les colonnes qui sont un multiple de 3 dans chaque area de ce plage. A première vue, c'est peut-être compliqué, mais cela vaut la peine.

Et puis, je n'aime pas ces "on error goto ...", il faut traiter les erreurs et ne pas les éviter.

Rechercher des sujets similaires à "selection jours feries presence"