[Excel] Macro apparition fenêtre + choix
Résolu/Fermé
micaub
-
6 mars 2009 à 15:14
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 - 9 mars 2009 à 10:39
Mike-31 Messages postés 18354 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 janvier 2025 - 9 mars 2009 à 10:39
A voir également:
- [Excel] Macro apparition fenêtre + choix
- Liste déroulante de choix excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
4 réponses
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
6 mars 2009 à 16:12
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+
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+
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
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
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
6 mars 2009 à 20:50
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
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
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
Encore merci Mike, j'te dois une fière chandelle. Au plaisir.
MA
Mike-31
Messages postés
18354
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 janvier 2025
5 110
9 mars 2009 à 10:39
9 mars 2009 à 10:39
Salut micaub,
XInone en fait correspond à aucun remplissage
Bonne journée
Mike-31
XInone en fait correspond à aucun remplissage
Bonne journée
Mike-31