Bonjour à tous,
Je me permets de solliciter votre aide.
Voilà je suis un vrai novice en VBA et je dois faire une macro en VBA sous excel mais je n'y arrive pas et ça fait deux jours que je galère dessus.
Je vous explique mon problème:
J'ai un tableau avec quatre colonnes : Date, Progress, Lead time before meeting, Level of risk.
J'ai une date de meeting pour chaque étape.
Le but de ma manœuvre est la suivante: en fonction du temps restant avant le meeting ( date - date de meeting ) (ça correspond au Lead time before meeting) et de mon niveau de progression(progress) , je voudrais évaluer le niveau de risk (Level of risk).
Progress: valeur rentrée à la main
Date: valeur rentrée à la main
Lead time before meeting = date - date de meeting
Si la valeur dans Lead Time before meeting est inférieure -14 (inclus) et la valeur Progress comprise entre 0 (exclu) et 100 (exclu)
Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead Time before meeting est inférieure à -14 (inclus) et la valeur Progress égale à 100
Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress comprise entre 0 (exclu) et 50 (inclus)
Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress comprise entre 50 (exclu) et 100 (exclu)
Alors écrire "bas" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -14 (exclu) et -7 (exclu) et la valeur Progress égale à 100.
Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 0 (exclu) et 50 (inclus)
Alors écrire "très élevé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 50 (exclu) et 75 (inclus)
Alors écrire "élevé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress comprise entre 75 (exclu) et 100 (exclu)
Alors écrire "maitrisé" dans la colonne level.
Si la valeur dans Lead time before meeting est comprise entre -7 (inclu) et 0 (exclu) et la valeur Progress est égale à 100
Alors écrire "nul" dans la colonne level (sinon rien écrire dans level).
Si la valeur dans Lead time before meeting est égale à 0 et la valeur Progress comprise entre 0 (exclu) et 100 (exclu)
Alors écrire "overdue" dans la colonne level.
Si la valeur dans Lead time before meeting est égale à 0 et la valeur Progress est égale à 100
Alors écrire "maitrisé" dans la colonne level (sinon rien écrire dans level).
Si la valeur dans Lead time before meeting est supérieure à 0 (exclu) et la valeur Progress est différente de " " (valeur vide)
Alors écrire "overdue" dans la colonne level (sinon rien écrire dans level).
Je sais pas si cela, vous paraît clair. Je vous envoie le tableau que j'ai réalisé: http://cjoint.com/?jmnSktCYp8.
Sur le tableau, j'ai fait ce que je viens d'écrire mais avec la fonction "si" d'excel, uniquement. Mais comme je ne peux mettre plus de 7 fonctions "si" à la suite dans excel, j'ai dissocié les conditions pour Lead time before meeting variant de :
- l'infini à -14(inclus)
de -14 (exlu) à -7(inclus)
de -7(exclu) à 0(exclus)
pour = à 0
pour supérieur à 0 .
Mon but est de faire une seule macro qui pourrait réaliser ces différents tests et mettre le résultat de ces tests (nul, bas, maitrisé, élevé et très élevé) dans la colonne Level of risk.
La macro que j'ai développé est celle-ci mais elle ne marche pas.
Vous pouvez me la corriger pour la faire fonctionner, s'il vous plaît. Merci.
Je vous colle la macro ici:
Sub macro()
'Pour Lead time before meeting inférieur ou égale à -14(inclus)
If ActiveSheet.Range("G23" ).Value <= -14 Then
If ActiveSheet.Range("F23" )>0 And ActiveSheet.Range("F23" ) < 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
Else
If ActiveSheet.Range("F23" ) = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range("H23" ).Value = " "
End If
'Pour Lead time before meeting compris entre -14 (exclu) et -7 (exclu)
If ActiveSheet.Range("G23" ).Value > -14 And ActiveSheet.Range("G23" ).Value < -7 Then
If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value <= 50 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
Else
If ActiveSheet.Range("F23" ).Value > 50 And ActiveSheet.Range("F23" ).Value < 100 Then ActiveSheet.Range(H23" ).Value = "bas"
If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range(H23" ).Value = " "
End If
'Pour Lead time before meeting compris entre -7 (inclus) et 0(exclu)
If ActiveSheet.Range("G23" ).Value > -7 And ActiveSheet.Range("G23" ).Value < 0 Then
If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value <= 50 Then ActiveSheet.Range("H23" ).Value = "très élevé"
Else
If ActiveSheet.Range("F23" ).Value > 50 And ActiveSheet.Range("F23" ).Value <= 75 Then ActiveSheet.Range("H23" ).Value = "élevé"
If ActiveSheet.Range("F23" ).Value > 75 And ActiveSheet.Range("F23" ).Value < 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé"
If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "nul" Else ActiveSheet.Range("H23" ).Value = " "
End If
'Pour Lead time before meeting égale à 0
If ActiveSheet.Range("G23" ).Value = 0 Then
If ActiveSheet.Range("F23" ).Value > 0 And ActiveSheet.Range("F23" ).Value < 100 Then ActiveSheet.Range("H23" ).Value = "overdue"
Else
If ActiveSheet.Range("F23" ).Value = 100 Then ActiveSheet.Range("H23" ).Value = "maitrisé" Else ActiveSheet.Range("H23" ).Value = " "
End If
'Pour Lead time before meeting supérieur à 0 (exclu)
If ActiveSheet.Range("G23" ).Value > 0 Then
If ActiveSheet.Range("F23" ).Value <> " " Then ActiveSheet.Range("H23" ).Value = "overdue" Else ActiveSheet.Range("H23" ).Value = " "
End If
End Sub
http://cjoint.com/?jmnSktCYp8
Merci pour votre aide