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

Résolu/Fermé
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016 - 6 oct. 2016 à 22:36
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016 - 7 oct. 2016 à 15:17
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.
A voir également:

4 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
7 oct. 2016 à 07:01
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
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016
7 oct. 2016 à 14:29
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
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016
7 oct. 2016 à 14:53
Code 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
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016
7 oct. 2016 à 15:17
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
Raymond PENTIER Messages postés 58559 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 1 août 2024 17 157
6 oct. 2016 à 23:47
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
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 228
Modifié par eriiic le 7/10/2016 à 00:30
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
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016
7 oct. 2016 à 14:33
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
Raymond PENTIER Messages postés 58559 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 1 août 2024 17 157
7 oct. 2016 à 01:25
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
Philippe_affaires_reg Messages postés 5 Date d'inscription jeudi 6 octobre 2016 Statut Membre Dernière intervention 7 octobre 2016
7 oct. 2016 à 14:32
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