Problèmes de conditions et affichage msgbox

thespeedy20

XLDnaute Occasionnel
Bonjour le Forum,

J'ai une carte pour les congés, avec un solde d'heure, j'aimerais quand le solde de congé est à zéro, un msgbox me dise plus de congés disponibles et quand on excède le quotta d'heure , que celui-ci est dépassé....

j'ai essayé mais cela ne fonctionne pas correctement, et peut-être aussi voir si on peur améliorer ma macro, je suis débutant

merci d'avance

Oli
 

Pièces jointes

  • Carte Vac.xlsm
    31 KB · Affichages: 9

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je mettrais dans Module1 :
VB:
Option Explicit
Sub Ellipse7_Cliquer()
   Dim Wsh As Worksheet
   Set Wsh = ActiveSheet
   Wsh.[C11:C30,J11:J30].ClearContents
   Wsh.[D11].FormulaR1C1 = "=R9C12-RC3"
   Wsh.[D12:D30].FormulaR1C1 = "=R[-1]C-RC3"
   Wsh.[K11].FormulaR1C1 = "=R30C4-RC10"
   Wsh.[K12:K30].FormulaR1C1 = "=R[-1]C-RC10"
   With Wsh.Range("D12:D30,K11:K30")
      .FormatConditions.Delete
      .Cells(1, 1).Activate
      .FormatConditions.Add(Type:=xlExpression, Formula1:="=ESTVIDE(C12)").NumberFormat = ";;;"
      End With
   End Sub
Et dans Feuil1 (Feuil1) :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim Rng As Range, Zon As Range, T(), L&, Trop#, TotDisp#
   If Target.Rows.Count > 1 Or Target.Columns.Count > 1 Then Exit Sub
   If Intersect([C11:C30,K11:K30], Target) Is Nothing Then Exit Sub
   Set Rng = Me.[C11:C30,J11:J30]
   TotDisp = Me.[L9].Value
   Trop = -Me.[K30].Value
   If Trop <= 0 Then Exit Sub
   If MsgBox(Trop & " heure(s) spécifiée(s) en trop vont être annulées.", vbOKCancel, Me.Name) = vbCancel Then Exit Sub
   For Each Zon In Rng.Areas
      T = Zon.Value
      For L = 1 To UBound(T, 1)
         If T(L, 1) > TotDisp Then T(L, 1) = TotDisp
         TotDisp = TotDisp - T(L, 1): Next L
      Application.EnableEvents = False
      Zon.Value = T
      Application.EnableEvents = True: Next Zon
   End Sub
 
Dernière édition:

thespeedy20

XLDnaute Occasionnel
Bonjour,

@Dranreb, merci pour ta proposition..... juste deux petites choses, quand je remets à zero la feuille, la couleur verte ne s'efface pas... et si possible quand le solde d'heure arrive à zero, colorier la cellule en rouge

Merci d'avance pour ton aide si précieuse...

Oli
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    27.2 KB · Affichages: 2

Dranreb

XLDnaute Barbatruc
Peut être en ajoutant une mise en forme conditionnelle supplémentaire à la remise à zéro.
VB:
Option Explicit
Sub Ellipse7_Cliquer()
   Dim Wsh As Worksheet
   Set Wsh = ActiveSheet
   Wsh.[C11:C30,J11:J30].ClearContents
   Range("C11:D30,J11:K30").ClearContents
   Wsh.[D11].FormulaR1C1 = "=R9C12-RC3"
   Wsh.[D12:D30].FormulaR1C1 = "=R[-1]C-RC3"
   Wsh.[K11].FormulaR1C1 = "=R30C4-RC10"
   Wsh.[K12:K30].FormulaR1C1 = "=R[-1]C-RC10"
   With Wsh.Range("D11:D30,K11:K30")
      .FormatConditions.Delete
      .Cells(1, 1).Activate
      .FormatConditions.Add(Type:=xlExpression, Formula1:="=ESTVIDE(C11)").NumberFormat = ";;;"
      .FormatConditions.Add(Type:=xlExpression, Formula1:="=D11<=0").Interior.Color = &HBABAFF
      End With
   End Sub
Mais j'ai du effacer le premier solde, c'est à dire le traiter comme les autres: il n'est affiché que s'il y a des heures devant.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin