Effacement de cellule conditionel

VE2LY

XLDnaute Nouveau
Bonjour le forum.

Je tente un effacement de cellule conditionnel. Dans le cas qui me préoccupe je doit effacer la valeur de la cellule X si elle dépasse l'heure donnée en fin. Bref sortir un numéro de radio (cell X) de l'inventaire actif quand l'heure de la pièce de travail est dépassée + 3 minutes.

J'ai essayé effacement conditionel comme mot clé mais sans grand succès.
Merci a l'avance.

Yves
 

Pièces jointes

  • Effacement conditionnel.xls
    24 KB · Affichages: 59

Kotov

XLDnaute Impliqué
Re : Effacement de cellule conditionel

Bonjour VE2LY,

En A7 tu as la date du jour et en D7 l'horaire maxi (borne à ne pas dépasser)
Je te propose donc une formule sur la base suivante :

=SI(MAINTENANT()>A7+D7;"Tard";"Tôt")

Si la date et l'heure du système dépassent la date et l'heure fixées en A7 et D7, alors on dépasse la limite, dans le cas contraire, on est dedans.

Dans l'exemple ci-dessus, il ne te reste qu'à remplacer "Tard" par "" si tu souhaites une cellule vide et "Tôt" par la valeur à afficher
Exemple en F7 : =SI(MAINTENANT()>A7+D7;"";C7)

Note : s'agissant d'une formule calculée, il est nécessaire que la feuille soit "calculée" pour que la mise à jour s'effectue.
Je m'explique : imaginons que l'heure-butoir soit dans 5 minutes. Quand tu saisis la valeur 500 en C7, la formule est activée et tu as bien 500 en F7.
Imaginons maintenant que tu ne touches plus à ton classeur pendant 6 minutes. La valeur en F7 reste 500 même si l'heure butoir est dépassé. c'est normal puisque qu'aucun nouveau calcul n'est intervenu. En revanche, il suffit qu'un seul calcul soit effectué dans ce classeur (une saisie quelconque) pour que toutes tes formules soient mises à jour.
Pour une mise à jour automatique, tu peux envisager une petite macro en VBA avec un calcul du classeur selon un timer pré défini.


Bonne soirée, encore qu'au Canada, ce n'est probablement que l'heure de la sieste ;)
Kotov
 
Dernière édition:

VE2LY

XLDnaute Nouveau
Re : Effacement de cellule conditionel

Merci pour ton aide Kotov. Je pourrai adapter sans trop de mal. Je teste demain am,
Pour la mise a jour j'ai déja une macro type "timer" aux minute.
Et effectivement on est GMT-4 en ce moment. Il est 01:56 am lundi matin et j'arrive du boulot. Merci encore et bon déjeunner ;-)

Yves
 

nolich

XLDnaute Occasionnel
Re : Effacement de cellule conditionel

Bonjour Yves et Kotov, bonjour à toutes et à tous :)

Je tente un effacement de cellule conditionnel. Dans le cas qui me préoccupe je doit effacer la valeur de la cellule X si elle dépasse l'heure donnée en fin. Bref sortir un numéro de radio (cell X) de l'inventaire actif quand l'heure de la pièce de travail est dépassée + 3 minutes.

J'ai essayé effacement conditionel comme mot clé mais sans grand succès.

Dans le fichier joint, un exemple en VBA avec la procédure Application.OnTime.

A tester ; chez moi, ça fonctionne :)

@+

EDIT : remplacement du fichier précédent pour les commentaires.

puis code pour celles et ceux que cela intéresse et qui ne peuvent télécharger les pièces jointes :

Code:
Option Explicit

'------------------------------------
' Déclaration des variables du module
'------------------------------------
Dim Cell As Range
Dim HeureFin
Dim NomFeuille As String
'------------------------------------
'


'--------------------------------------------------------------------------'
'                        Procédure ClearData                               '
'--------------------------------------------------------------------------'
' Programmée par Application.OnTime pour se déclencher à une heure donnée, '
' stockée dans la variable HeureFin, initialisée par la cellule en colonne '
' B dont l'adresse est donnée par la variable de type objet Range "Cell"   '
'--------------------------------------------------------------------------'
Sub ClearData()
'
  
  ' On efface la précédente programmation de la procédure OnTime au cas où
  On Error Resume Next
  Application.OnTime earliesttime:=[COLOR="Red"][B][I]HeureFin[/I][/B][/COLOR], Procedure:="ClearData", schedule:=False
  [COLOR="Green"][B]' En rouge gras italique = à modifier dans le fichier joint[/B][/COLOR]
  On Error GoTo 0
  
  ' Cell étant en colonne B, on efface la donnée
  ' se trouvant en colonne C, sur la même ligne
  Cell.Offset(, 1).ClearContents
  
  ' Puis on descend d'une ligne et on réaffecte
  ' la variable objet Cell
  Set Cell = Cell.Offset(1)
  
  ' Avec la variable objet de type Range "Cell",
  With Cell
  
    ' On vérifie qu'elle contient une donnée, sinon
    ' on sort...
    If .Value <> "" Then
      
      ' Si la colonne A ne contient rien, c'est que la date
      ' est celle du jour, autrement, ClearData n'aurait pas
      ' été programmée par InitCompteurs, si elle contient
      ' une donnée, on vérifie qu'il s'agit bien de la date
      ' système, sinon... on sort ^^
      If (.Offset(, -1) = "") Or (.Offset(, -1) = Date) Then
      
        ' Si l'heure de début est bien inférieure
        ' à l'heure de fin (colonne D), on continue,
        '  sinon...  devinez :)
        If (.Value < .Offset(, 2))  Then
          
          ' on place la nouvelle heure de déclenchement
          ' de ClearData dans la variable HeureFin
          
          HeureFin = Cell.Offset(, 2) + Sheets(NomFeuille).Range("D1")
          
          ' Puis on reprogramme l'appel à ClearData avec la
          ' nouvelle heure calculée
          Application.OnTime HeureFin, "ClearData"
          
        End If
        
      End If
      
    End If
    
  End With
  
  
End Sub

Sub InitCompteurs()
'

  ' On sauvegarde le nom de la feuille dans
  ' laquelle se trouvent les données dans la
  ' variable NomFeuille
  NomFeuille = ActiveSheet.Name
  
  ' La première cellule contenant
  ' une heure de début est en B7,
  ' alors on vérifie qu'elle n'est
  ' pas vide, sinon on sort
  If Range("B7") <> "" Then
    
    ' la procédure Application.OnTime
    ' ne se programme qu'avec des
    ' heures. On vérifie donc que la
    ' date en A7 correspond bien à
    ' la date du jour, sinon on sort ^^
    If Range("A7") = Date Then
      
      ' Il faut également que l'heure de
      ' fin soit supérieure à l'heure à
      ' l'heure de début, et que l'heure
      ' de fin soit supérieure à l'heure
      ' actuelle (heure système)
      If (Range("B7") < Range("D7")) And (Range("D7") > Time) Then
      
        ' On stocke l'adresse de la cellule
        ' traitée (celle contenant l'heure
        ' de début)
        Set Cell = Range("B7")
        
        ' puis on calcule l'heure à laquelle
        ' la donnée en colonne C doit être
        ' effacée (D7+D1 : T + DeltaT) et on
        ' la stocke dans la variable HeureFin
        HeureFin = Cell.Offset(, 2) + Range("D1")
        
        ' Enfin, on programme l'appel de la
        ' procédure ClearData
        Application.OnTime HeureFin, "ClearData"
        
      End If
      
    End If
    
  End If
  
End Sub

Remarque : La date est donnée en A7 (7 = première ligne de données), l'heure de début en B7, "Radio" en C7, l'heure de fin en D7 et enfin, le Delta_T qui, ajouté à l'heure en D7, donnera le top de l'effacement est situé en D1 (fixe).

La première date doit être indiquée en ligne 7. Sans date en A7, pas de démarrage de la procédure. Par la suite, tant que la ligne suivante en colonne B n'est pas vide, on considère que la date a été validée par la procédure InitCompteurs(). Et on continue jusqu'à une date supérieure à celle du jour ou jusqu'à une absence de données en colonne B. La procédure ClearData() permet de descendre d'une ligne à chaque appel.
 

Pièces jointes

  • VE2LY_EffacementConditionnel.xls
    35 KB · Affichages: 44
Dernière édition:

VE2LY

XLDnaute Nouveau
Re : Effacement de cellule conditionel

Merci Lio. Je vais tester au travail pour adapter. Merci également d'avoir commenter ton code, je commence a comprendre le VBA mais avec des commentaires c'est nettement mieux pour la progression ;-)

Yves
 

Statistiques des forums

Discussions
312 502
Messages
2 089 049
Membres
104 012
dernier inscrit
baffyt2