Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1312 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  importante aide sur vba (macro)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

importante aide sur vba (macro)

n°1923593
chrysler99
Posté le 12-09-2009 à 14:42:57  profilanswer
 

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

mood
Publicité
Posté le 12-09-2009 à 14:42:57  profilanswer
 

n°1923852
produvba
Posté le 14-09-2009 à 11:20:36  profilanswer
 

Je te conseille de ne pas faire de macro et d'écrire directement une formule. Si la formule est trop compliquée, tu peux avoir des résultats partiels dans des colonnes cachées.  
L'avantage est que tu vois tout de suite le résultat et que cela calcule aussi beaucoup plus vite qu'une macro

n°1924271
SuppotDeSa​Tante
Aka dje69r
Posté le 15-09-2009 à 16:04:51  profilanswer
 

produvba a écrit :

Je te conseille de ne pas faire de macro et d'écrire directement une formule. Si la formule est trop compliquée, tu peux avoir des résultats partiels dans des colonnes cachées.  
L'avantage est que tu vois tout de suite le résultat et que cela calcule aussi beaucoup plus vite qu'une macro


Oui et non. Tout depend de sa version d'Excel. Car au dessus de 7 SI() imbriqué, faut avoir recours a une cellule connexe si<2007
 
 
 
Pourquoi elle ne marche pas ? Message d'erreur ? Probleme de renvoie du resultat ?
Soit plus precis quant au souci rencontré
 
Comme ca, a la louche, le souci majeur pour moi sont des If imbriqué à la rache dans des IF, mais sinon je ne tique pas sur qqchose de particulier.
Regarde du coté de ElseIf peut etre, ca sera plus lisible.
 
Utilise aussi les balises [cpp][/cpp] pour ton code


Message édité par SuppotDeSaTante le 15-09-2009 à 16:06:53

---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  importante aide sur vba (macro)

 

Sujets relatifs
Aide pour Optimisation application FacebookAide pour Optimisation application Facebook
creation de macro par codeaide requête SQL : jointure tables 0-n
[Résolu] Macro excel pour tri tableau par semaine[VBA] Besoin d'aide pour macro
VBA - Macro d'enregistrement de Fichier ac date du jour / automatiquePHP ajout page automatique video AIDE SVP :) !!!
Constructeur Tableau - Merci pour votre aide ! :-) 
Plus de sujets relatifs à : importante aide sur vba (macro)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR