Affichage partiel non conforme

Bonjour à tous,

J'ai un bug dans mon fichier de gestion des absences et je ne vois pas comment le résoudre mais un expert aura peut-être une solution.

Voilà j'ai quelques soucis avec certaines cellules complotistes qui ne veulent pas s'afficher comme les autres.

image

Voilà le code correspondant, en onglet mois :

                    '1er jour CP
                If Day(ws1.Range("A" & n)) = Day(tab_bd(i - 1, 2)) And tab_bd(i - 1, 7) = "CP" Then _
                    ws1.Cells(n, dercol) = "CP"
                    '1er matin en AM
                If Day(ws1.Range("A" & n)) = Day(tab_bd(i - 1, 2)) And ws1.Range("B" & n) = "M" _
                And tab_bd(i - 1, 3) = "AM" Then ws1.Cells(n, dercol).ClearContents
                    'journées entiéres intermédiaires CP
                If Day(ws1.Range("A" & n)) > Day(tab_bd(i - 1, 2)) And _
                       Day(ws1.Range("A" & n)) <= Day(tab_bd(i - 1, 4)) And tab_bd(i - 1, 7) = "CP" Then
                    ws1.Cells(n, dercol) = "CP"
                End If
2exempleep.xlsm (171.85 Ko)

Merci de votre aide.

Bonjour,

Ces enregistrements sont absents dans ton onglet BD.

Bonjour,

Non non :

image image image

Autant pour moi.

J'ai essayé de simuler la génération d'un mois pour mettre des debug.print sur les lignes qui concernent les CP, mais le code plante sur changement de la cellule A2 de ta feuille mois. Logiquement, c'est ta cellule A3 qui devrait provoquer l'événement, mais même en changeant les coordonnées sur l'événement ça plante.

Regarde s'il n'y a pas des trous dans la raquette dans ton code CP (et sans doute les autres). Si tu prends Gaston, Pascal, Senot, les colonnes m/am sont toutes M

hors sauf erreur de ma part, je n'ai pas l'impression que ton code traite les cas "M" et "M".

Re,

c'est vrai que les manques ne concernent que des AM.

le code concerné est celui-là :

'journées entiéres intermédiaires CP
                If Day(ws1.Range("A" & n)) > Day(tab_bd(i - 1, 2)) And _
                       Day(ws1.Range("A" & n)) <= Day(tab_bd(i - 1, 4)) And tab_bd(i - 1, 7) = "CP" And _
                       (ws1.Range("B" & n) = "AM" Or ws1.Range("B" & n) = "M") Then ws1.Cells(n, dercol) = "CP"

Même en rajoutant

ws1.Range("B" & n) = "AM" Or ws1.Range("B" & n) = "M"

çà change rien.

Day(ws1.Range("A" & n)) <= Day(tab_bd(i - 1, 4)) And tab_bd(i - 1, 7) = "CP" And _
                      ( (ws1.Range("B" & n) = "AM" Or ws1.Range("B" & n) = "M") ) Then ws1.Cells(n, dercol) = "CP"

Bon, finalement, ce n'est pas dans le code des jours intermédiaires à la date de début et date de fin qu'est l'erreur.

Comme mes mois comportent des demi journées, c'est avec l'absence du dernier jour et l'après-midi que le probléme arrive: Cà efface bien la dernière demi journée, comme il faut, mais çà efface aussi un autre aprés-midi dans la période, et uniquement pour la 1ère moitié (jusqu'au 16/08 exactement) avec des jours doublés...

Autrement dit, je n'ai pas le probléme que j'ai aprés le 16 du mois.
Exemple pour les CP:

                    'dernier jour CP en M
                If Day(ws1.Range("A" & n)) = Day(tab_bd(i - 1, 4)) And ws1.Range("B" & n) = "AM" _
                And ws1.Cells(2, dercol) = tab_bd(i - 1, 1) And tab_bd(i - 1, 5) = "M" Then ws1.Cells(n, dercol).ClearContents

Voilà

Bonjour à tous,

Je mets ce code précis dans la boucle pour avoir les infos:

If n = 4 And dercol = 5 And tab_bd(i - 1, 7) = "RTT" Then MsgBox "n " & n & " jrsmois " & ws1.Range("A" & n) _
  & " " & ws1.Range("B" & n) & " nom BD" & ws1.Range("C" & n) & tab_bd(i - 1, 1) & " cell " & ws1.Cells(n, dercol)

Et je suis surpris qu'il passe 4 fois au même endroit au lieu d'1, je comprends pas pourquoi.

Re,

Bon j'ai remis à plat la triple macro pour une double macro, et çà fonctionne sur un exemple :

                    'journées entiéres intermédiaires RTT
                If Day(ws1.Range("A" & m)) >= Day(tab_bd(i - 1, 2)) And Day(ws1.Range("A" & m)) <= Day(tab_bd(i - 1, 4)) _
                And tab_bd(i - 1, 7) = "RTT" And ws1.Cells(2, dercol) = tab_bd(i - 1, 1) Then ws1.Cells(m, dercol) = "RTT"
                    '1er matin en AM
                If Day(ws1.Range("A" & m)) = Day(tab_bd(i - 1, 2)) And ws1.Range("B" & m) = "M" And tab_bd(i - 1, 3) = "AM" _
                Then ws1.Cells(m, dercol).ClearContents
                    'dernier jour RTT en M
                If Day(ws1.Range("A" & m)) = Day(tab_bd(i - 1, 4)) And ws1.Range("B" & m) = "AM" _
                And ws1.Cells(2, dercol) = tab_bd(i - 1, 1) And tab_bd(i - 1, 5) = "M" Then ws1.Cells(m, dercol).ClearContents
image

Donc çà devrait le faire.

Rechercher des sujets similaires à "affichage partiel conforme"