Forcer l'entré d'une valeur avec une conditionnel

Résolu
-  
Bonjour,
Je construis un registre de différents enregistrement de produit. Mon registre comporte les colonnes suivantes:

(H) Nom de produit
(I) Statut : Statut de l'enregistrement: Liste de choix à entrer manuellement (ACTIF, EN COURS, EN RENOUVELLEMENT, EN ATTENTE, À FAIRE, À RENOUVELER)
(L) Date d'expiration

Normalement, j'entre les valeurs des la colonne (I) manuellement. Toutefois j'aimerais créer aussi une formule qui forcerait le changement de valeur de la colonne Statut (I) 90 jours avant la date de péremption de la colonne (L) afin que la valeur "À RENOUVELER" remplace la précédente.

P.S: Les cellules de la colonnes Statut on une validation de données qui autorise une liste possédant les différents choix. Le choix "À RENOUVELER". fait partie des choix.

Quelqu'un à une idée de comment réaliser ceci?

En vous remerciant.

4 réponses

  1. Bonjour à tous,

    Avec VBA, les dates sont examinées à l'ouverture du fichier par la procédure Workbook_Open() et le statut est basculé à l'état "À RENOUVELER" 90 jours avant la date de péremption.

    Pour visualiser la procédure :
    Appuyer sur alt + F11 pour ouvrir l'éditeur,
    Appuyer sur ctrl + R pour ouvrir l'explorateur de projets,
    Double-clic sur le module ThisWorkBook

    Private Sub Workbook_Open()
    Dim Cel As Range
    With Worksheets("Feuil1")
    For Each Cel In .Range("J2", .Range("J" & Rows.Count).End(xlUp))
    If (Cel.Value - Date) <= 90 Then Cel.Offset(, -1) = "À RENOUVELER"
    Next Cel
    End With
    End Sub

    https://www.cjoint.com/c/FJhfatiMoDM

    A+
    1
    1. La solution VBA fonctionne très bien à une exception prêt. J'ai oublié de mentionner un détail qui complexifie un peu la problématique. Pour certains produit la date d'expiration est "N/D" et pour d'autre c'est "JAMAIS".

      La formule VBA provoque donc l'erreur 13 car il n'y a pas de date partout.

      Est-ce qu'il y a une solution à ce problème?

      En te remerciant.
      0
    2. @Philippe_affaires_regCode modifié :
      Private Sub Workbook_Open()
      Dim Cel As Range
      With Worksheets("Feuil1")
      For Each Cel In .Range("J2", .Range("J" & Rows.Count).End(xlUp))
      If IsDate(Cel) Then
      If (Cel.Value - Date) <= 90 Then Cel.Offset(, -1) = "À RENOUVELER"
      End If
      Next Cel
      End With
      End Sub

      A+
      0
    3. EXCELLENT. Tout fonctionne à merveille. Un gros merci!!!

      Bon c'est un peu long à processer... considérant que j'ai plus de 600 lignes mais ça fonctionne.

      Merci pour mon initiation à VBA.

      Bonne fin de journée.
      0
  2. Contributeur
    Bonjour.

    En résumé, dans la colonne I:I on devrait pourvoir entrer un choix soit par une formule (avec L:L-90), soit par liste déroulante de cellule ?
    0
    1. Contributeur
      Bonjour,

      sans vba ça parait être mission impossible.
      Une MFC rouge ne te suffit pas ? En plus ça attire plus l'oeil qu'un libellé qui change.
      eric

      En essayant continuellement, on finit par réussir. 
      Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
      En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
      0
      1. Malheureusement j'ai besoin du statut car celui-ci est ensuite repris dans des tableaux croisés dynamique afin de sortir des statistiques trimestrielles sur les différents enregistrements.

        Je crois que la solution VBA sera un incontournable.

        Merci.
        0
    2. Contributeur
      Si j'ai bien compris ton explication, il existe une solution, mais qui ne donne pas entièrement satisfaction :
      Saisir en I:I la formule =SI(J:J-AUJOURDHUI()<90;"A RENOUVELER";"")
      cette même colonne ayant déjà ta liste déroulante de cellule, qui assure une validation des données.
      Tant que rien n'est saisi en I:I la formule fonctionne parfaitement ; dès qu'un statut est ajouté, il écrase la formule ; même si on supprime ce statut, la formule a disparu ; il faudrait la recopier ...

      Aussi je te conseille d'utiliser 2 colonnes distinctes, une avec tes statuts, l'autre avec la formule.
      https://www.cjoint.com/c/FJgxy4YKLWM
      0
      1. Merci bien Raymond. J'avais déjà pensé à cette idée mais comme le statut est ensuite utilisé dans plusieurs différents tableaux croisés dynamique, le fait d'ajouter une colonne commençait à alourdir un peu mes tableaux.

        Merci et profite bien de ta retraite ;-)
        0