XL 2010 Macro temporelle avec conditions

alexandra13

XLDnaute Nouveau
Bonjour le forum,

Je ne maitrise pas bien le VBA, et dans un cadre professionnel, je fais donc appel à l'expertise du forum.
Je joins un fichier exemple (fichier bidon) pour décrire mon besoin.

Imaginons un opérateur en usine.
* Un opérateur complète le fichier Excel en saisissant une valeur et indique la date de saisie de la valeur.
* Si cet opérateur n'a pas rentré de valeur depuis moins de six mois, alors, à sa prochaine saisie, une case rouge "voir responsable" s'affiche dans la colonne "Formation" à la ligne de la nouvelle saisie.
* Si cet opérateur a rentré une valeur depuis moins de six mois, alors une case verte "RAS" s'affiche.

Mon fichier de base comporte déjà une macro.

J'imagine qu'il faut partir sur une recherche dans les dates, puis mettre une condition sur le nom de l'opérateur... mais il me manque le langage :)

Merci d'avance !
 

Fichiers joints

Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Bonjour alexandra, le Forum :)

Si cet opérateur n'a pas rentré de valeur depuis moins de six mois
Tu peux m'expliquer pourquoi l'opérateur n'a pas saisi de valeur pendant ces 6 mois?? o_O
Comment tu peux faire tourner une entreprise dans ce cas là?? o_O
 

alexandra13

XLDnaute Nouveau
Mon fichier est bidon donc pas forcément collé à la réalité, mais imaginons des longues maladies, des conges maternités + conges parentaux, des affectations de poste.
 

job75

XLDnaute Barbatruc
Bonjour alexandra13, Lone-wolf,

Voyez le fichier joint et cette fonction VBA :
Code:
Function RAS(valeur, operateur, dat As Long) As String
If valeur = "" Or operateur = "" Or dat = 0 Then Exit Function
Dim tablo, i As Long, der As Long
tablo = Application.Caller.Parent.UsedRange.Resize(, 3) 'tableau VBA, plus rapide
operateur = UCase(operateur) 'majuscules, au cas où...
For i = 1 To UBound(tablo)
    If UCase(tablo(i, 2)) = operateur And tablo(i, 3) < dat Then If tablo(i, 3) > der Then der = tablo(i, 3)
Next
RAS = IIf(Sgn(der) * (dat - der) < 180, "RAS", "Voir responsable")
End Function
La fonction est utilisée en colonne D.

Mise en forme conditionnelle (MFC) en colonne D.

A+
 

Fichiers joints

alexandra13

XLDnaute Nouveau
Bonjour job 75,

Merci pour ton temps et ton aide précieuse.

Je rencontre quelques difficultés lorsque je teste ton code :
Mon fichier comporte déjà une macro (Public Sub ..... End Sub).
Et apparament le programme n'aime pas à avoir à lancer à la fois ma macro et la function RAS.

J'ai essayé en integrant tes lignes de codes juste avant le "End Sub" mais du coup la macro ne tourne plus ; si j'insère tes lignes après le "End Sub" et bien ma macro tourney bien, mais la tienne ne s'éxécute pas.

Est-il possible d'écrire un code sans mettre en forme conditionnelle le tableau (car mon exemple est bidon de toute façon)
et de sorte à ce que la fonction s'insère dans la macro ?

J'espère que c'est clair pour toi.

Merci,
Alexandra
 

job75

XLDnaute Barbatruc
Bonsoir alexandra13,
Mon fichier comporte déjà une macro (Public Sub ..... End Sub).
Et apparament le programme n'aime pas à avoir à lancer à la fois ma macro et la function RAS.
Il n'y a pas de macro dans votre fichier !!!

Et une fonction VBA n'a pas à être lancée, elle se calcule toute seule en fonction des arguments qu'on lui donne.

Enfin j'ai mis une MFC en colonne D uniquement pour colorer les cellules.

Le fichier que j'ai joint est hyper simple et pourtant vous semblez larguée :oops:

A+
 

Discussions similaires


Haut Bas