Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Avec une question de ce style, nous sommes tenté de te répondre : "oui c'est possible".
Ce qui tu le reconnait répond parfaitement à ta question
Mais à mon avis tu veux une réponse plus détaillé? Alors si ta question également pouvait être plus détaillé, ce serait plus facile
Réponse détaillée :
Macro à placer sur la feuille concernée :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And Target.Value = "Coucou" Then
Range("C5") = "on est champion"
End If
End Sub
La macro ci-dessus se déclenche à chaque changement sur l'onglet où se trouve la macro.
Il vérifie si la modification a eu lieu dans la cellule A1 ----> si la modification a eu lieu ailleur, la macro s'arrête là, ne fait rien et rend la main à l'utilisateur ----> si la modification a eu lieu en A1 (du fameux onglet évidement), il vérifie que la valeur saisie en A1 est le mot "Coucou" ---------> si oui : il écrit "on est champion" dans la cellule C5. Puis rend la main à l'utilisateur ---------> si non : la macro s'arrête là, ne fait rien, et rend la main à l'utilisateur
Evidement l'endroit où se trouve la ligne de code suivante :
et Si... A1 prend la valeur "Coucou" avec une formule (par exemple, en A1 : =Si(B1="";"";"Coucou")?
Voilà en quoi la question mérite approfondissement.
Dans la première éventualité, j'écrirais :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If [A1] = "Coucou" Then
Application.EnableEvents = False
Macro 'lancement de la procèdure appelée ainsi)
Application.EnableEvents = True
End If
End Sub
sachant que pour certaines versions (dont la mienne) les lignes "Application.EnableEvents..." sont obligatoires si la macro lancée place, à un moment donné, "Coucou" en A1.
Avant de donner plus de détails, je voulais savoir si ce que je souhaite faire est réalisable.
Merci pour vos réponses qui sont encourageantes.
Je vous joins un fichier ce qui sera plus explicite en effet.
J'ai mis le type de macro qui devrait s'appliquer.
Elle est très simple mais je ne sais pas écrire le code indiquant qu'elle ne doit s'appliquer que si la date de B4 est inférieure au 01/01/2012.
Par ailleurs, peut-être pourriez-vous aussi m'aider pour la mise en forme conditionnelle à appliquer sur la rubrique invité?
Merci par avance
Pièces jointes
Test macro déclenchée selon valeur d une cellule.xlsm
15.8 KB
· Affichages: 68
Test macro déclenchée selon valeur d une cellule.xlsm
15.8 KB
· Affichages: 78
Test macro déclenchée selon valeur d une cellule.xlsm
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Format(Cells(4, 2), "YYYY") < "2012" Then
Cells(6, 1) = ""
Cells(6, 2) = ""
Else
Cells(6, 1) = "invité"
Cells(6, 2) = "" 'ecriture de ce que tu désires
End If
Application.EnableEvents = True
End Sub
et dis-nous ??
A+
Pièces jointes
Copie de Test macro déclenchée selon valeur d une cellule.xlsm
17.6 KB
· Affichages: 62
Copie de Test macro déclenchée selon valeur d une cellule.xlsm
17.6 KB
· Affichages: 70
Copie de Test macro déclenchée selon valeur d une cellule.xlsm
merci de vous intéresser à mon problème :
je viens de tester la proposition de néné06, l'ennui c'est que les zones vêtements et chaussures en (11,3) et (11,4) n'apparaissent plus quand je mets "x" en (6,2) et que la date est >=2012. En fait la macro efface systématiquement le "x", que je sois avant ou après 2012.
Or ce que je souhaite c'est que le "x" soit effacé en (6,2)uniquement si l'année est < à 2012.
Le contenu de (6,2), (11,3) et (11,4) ne doivent s'effacer que si l'année est inférieure à 2012.
Par ailleurs si la date est >= à 2012 et que la cellule (6,2) est alimentée avec un "x", je dois avoir accès aux cellules (11,3) et (11,4).
Je ne sais pas si c'est bien clair.
En nous donnant un peu plus à manger, comme une pièce jointe plus détaillée, nous pourrons régler ce problème.
Dans l' exemple fourni, il n'est nullement question des cellules (11,3) et (11,4)???
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Format(Cells(4, 2), "YYYY") < "2012" Then
Cells(6, 1) = ""
Cells(6, 2) = ""
Cells(11, 3) = ""
Cells(11, 4) = ""
Else
Cells(6, 1) = "invité"
Cells(6, 2) = "x" 'ecriture de ce que tu désires
End If
Application.EnableEvents = True
End Sub
Voir Pj
A+
Pièces jointes
Copie de Copie de Test macro déclenchée selon valeur d une cellule.xlsm
Tout d'abord un grand merci pour vos 2 propositions.
Celle de néné06 fonctionne mais un bémol :elle ne prend pas en compte le cas où je suis en 2012 mais sans statut invité : je ne peux pas enlever le "x" en (6,2).
La proposition de Roger fonctionne à merveille : j'ai vu par ailleurs que tu as modifié mes mises en forme conditionnelle avec des formules que je ne savais pas écrire. Je vais essayer de les reproduire pour mieux les comprendre.
En tout cas vous êtes vraiment des as et je progresse toujours pas à pas avec vous.
J'ai à nouveau besoin de votre aide.
J'ai essayé de comprendre le code de Roger et ai voulu apporter une petite modification pour pouvoir l'intégrer dans mon fichier réel.
Malheureusement je ne connais pas l'écriture des macros et suis bloquée.
Je pense que cela va être enfantin pour vous.
Comment dans le code de Roger adapté ici, changer :
Set z = Range("D11:F11")
pour que la macro efface le contenu de D11 et le contenu de F11 et non toute les cellules D11,E11 et F11?
Dans mon fichier réel j'ai des choses qui ne doivent pas être effacées en E11.
Il est vrai que le fichier que je vous avais mis pour l'essai présentait notamment 2 cellules à effacer en C11 et D11. Je joins un nouveau fichier.
Merci par avance
Option Explicit
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim d As Date, x As Range, y As Range, z As Range
d = DateSerial(2004, 1, 1)
Set x = Range("c8")
Set y = Range("B10")
Set z = Range("D11:F11")
If Not Intersect(Cible, Union(x, y)) Is Nothing Then
If IsDate(x.Value) Or IsEmpty(x) Then
Application.EnableEvents = False
If x.Value < d Then Union(y, z) = Empty Else If Not Intersect(Cible, y) Is Nothing Then If y.Value <> "x" Then z = Empty
Application.EnableEvents = True
End If
End If
End Sub
Merci pour votre aide, je viens de tester la proposition de néné06, maintenant effectivement la cellule E11 n'est plus effacée quand la date est < 2012.
Si j'ai bien compris cela est la conséquence de ce code : If x.Value < d Then Cells(11, 4) = Empty: Cells(11, 6) = Empty Else If Not Intersect(Cible, y) Is Nothing Then If y.Value <> "x" Then z = Empty.
Cependant le problème c'est que le "x" devrait s'effacer aussi quand la date est < à 2012.
Merci
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.