[Excel] Macro apparition fenêtre + choix

Résolu/Fermé
micaub - 6 mars 2009 à 15:14
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 9 mars 2009 à 10:39
Bonjour à tous et excusez-moi de venir vous déranger une fois de plus.

Je suis en train de mettre en place une feuille de suivi de projet au sein de laquelle je dois écrire l'ensemble des éléments du projet et l'état d'avancement de chacune des pièces.

Or, je voudrai faire apparaitre, à chaque fois que je remplis ou modifie une cellule de la colonne "Etat d'avancement", une petite fenêtre qui demande si "l'étape est dans les temps par rapport au planning" et 2 réponses possibles "Oui" ou "Non". Si la réponse était "Non", la macro viendrait en plus mettre en surbrillance rouge la cellule "Etat d'avancement". Si la réponse est oui, en revanche, on ne fait rien (ou au mieux, on mettra la cellule en surbrillance verte).

Je n'ai hélas jamais été formé pour VBA et j'ai bien peur qu'il soit primordial de le maitriser pour faire ce genre de choses. J'ai déjà cherché plusieurs fois sur internet mais rien trouvé de semblable et je ne pourrais me rendre à la FNAC que ce soir pour essayer de trouver un livre de formation en VBA ; mais si je pouvais avancer un peu en attendant... :-)

Bref, si quelqu'un avait une petite idée ou des pistes à m'indiquer, cela serait bienvenue.

D'avance merci pour votre aide et encore bravo à tous les bénévoles qui prennent souvent sur leur temps libre pour nous aider.

Cordialement.

MA
A voir également:

4 réponses

Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
6 mars 2009 à 16:12
Salut,

Colles ce code dans le code feuille, (Clic droit sur l'onglet de ta feuille/visualiser le code) Adaptes ce code qui concerne les cellules A2 à A20, ainsi que le texte de la msgbox.
Si ta cellule se déplace aprés validation, soit on revoit le code ou tu supprimes le déplacemenr après validation

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:A20")) Is Nothing Then
msg = "Souhaitez vous continuer."
StyleBoîteDialogue = vbYesNo + vbCritical + vbDefaultButton2
Title = "Les données seront effacées"
réponse = MsgBox(msg, StyleBoîteDialogue, Title)
If réponse = vbYes Then
ActiveCell.Interior.ColorIndex = 3

'exécute ta macro...

End If
End If
End Sub

A+
2
Merci beaucoup Mike : c'est la 2ème fois que tu m'es d'une grande aide.

J'ai adapté le code à ma sauce en transformant le vbCritical en vb Question : c'est moins agressif et en adaptant les phrases ;) Ceci dit, ça ne va pas m'empêcher de courir à la bibli tout à l'heure histoire de me perfectionner un peu en VBA.

Tout fonctionne à merveille lorsque le projet est en retard (le fond se met bien en rouge). En revanche, lorsque l'on rattrape le retard, si je change l'étape du projet et que cette fois-ci, je lui dis que le fichier est dans les temps, le fond reste malgré tout rouge.

J'ai tenté d'écrire ceci mais ça n'a pas l'air de marcher...

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E7:E40")) Is Nothing Then
msg = "L'avancement du projet est-il en accord avec le planning initial ?"
StyleBoîteDialogue = vbYesNo + vbQuestion + vbDefaultButton2
Title = "Etat d'avancement"
réponse = MsgBox(msg, StyleBoîteDialogue, Title)
If réponse = vbNo Then
ActiveCell.Interior.ColorIndex = 3
Else ActiveCell.Interior.ColorIndex = 0

'exécute ta macro...

End If
End If
End Sub

Il s'agit sûrement de ma formulation qui n'est pas bonne. Je vais continuer à tatonner.

Encore merci Mike et bon week-end !

MA
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
6 mars 2009 à 20:50
Re,

Ecrit plutôt ton code comme ça, si tu clic sur Non la cellule passe en rouge et sur Oui il n'y a plis de couleur dans la cellule active.
Par contre comme je te le disais plus haut, si ta cellule se déplace après validation il faudra ajouter une ligne de code pour corriger ou supprimer cette fonction dans Outils/Options/Modification

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("E7:E40")) Is Nothing Then
msg = "L'avancement du projet est-il en accord avec le planning initial ?"
StyleBoîteDialogue = vbYesNo + vbQuestion + vbDefaultButton2
Title = "Etat d'avancement"
réponse = MsgBox(msg, StyleBoîteDialogue, Title)
If réponse = vbNo Then
ActiveCell.Interior.ColorIndex = 3

Else: ActiveCell.Interior.ColorIndex = xlNone

'exécute ta macro...

End If
End If
End Sub
0
Ca marche de manière impeccable !!! Je ne connaissais pas la formulation xlNone mais tout se passe comme prévu.

Encore merci Mike, j'te dois une fière chandelle. Au plaisir.

MA
0
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
9 mars 2009 à 10:39
Salut micaub,

XInone en fait correspond à aucun remplissage

Bonne journée

Mike-31
0