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 SubBonjour 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 SubBonjour ,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.