[Catégorie modifiée .Net --> VBA] [VBA|EXCEL] worksheet_change sur plusieurs cel
cs_shinji7800
Messages postés4Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention 9 juillet 2012
-
30 sept. 2010 à 18:45
cs_shinji7800
Messages postés4Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention 9 juillet 2012
-
1 oct. 2010 à 08:48
Bonjour,
j'aurai besoin d'aide pour pouvoir utiliser la fonction "worksheet_change"
mon but est de contrôler la valeur certaines cellules (fusionnées).
par exemple :
- I9:I10
- I21:I22
- I37:38
les cellules à contrôler ne sont pas encore déterminées ( car mon fichier Excel évolue encore)
si une valeur que j'attends est entrée, j'appelle une fonction afin d'afficher un message de saisi.
cependant ce message de saisi ne sera pas le même en fonction de la ligne.
je m'explique :
si I9="NOK" un message de saisi apparait (avec un message pour cette ligne)
si I21="NOK" un autre message de saisi apparait (diffèrent de I9)
Si I9<>"NOK" je veux faire disparaitre mon message de saisi (idem pour les autre cellule)
voici ce que j'ai codé, mais je pense que je ne sais pas utiliser cette fonction.
Private Sub Worksheet_Change(ByVal target As Range)
If Range("I9").Value <> "NOK" Then
Call MaS10(target)
end if
If Range("I21").Value <> "NOK" Then
Call MaS10(target)
end if
If Range("I9").Value = "NOK" Then
Call MaS1
end if
If Range("I21").Value = "NOK" Then
Call MaS4
End If
End Sub
Public Function MaS1()
Range("J9:J10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "essai N°1"
.ErrorTitle = ""
.InputMessage = "Commencez par : " & Chr(10) & "" & Chr(10) & "- tenter de faure un pingu sur l'equipement depuis SRV1" & Chr(10) & "" & Chr(10) & "- si cela ne fontionne pas tentez de blabla"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Function
Public Function MaS10()
cells.Offset(0, 1).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.InputMessage = ""
.ShowInput = True
.ShowError = True
End With
End Function
Public Function MaS4()
Range("J21:J22").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "essai N°4"
.ErrorTitle = ""
.InputMessage = "test 4"
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
d'avance merci !
A voir également:
[Catégorie modifiée .Net --> VBA] [VBA|EXCEL] worksheet_change sur plusieurs cel
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 sept. 2010 à 19:43
Salut
"Call MaS10(target)"
-1- Tu fournis à ta fonction MaS10 le paramètre (Range) "Target", mais la déclaration de ta fonction ne prévoit pas de paramètre !
-2- Quand Worksheet_Change se déclenche, elle te fournit dans "Target" le Range concerné par la modif.
Dans les tests que tu fais, tu désignes toi-même un Range qui n'a rien à voir avec le Range "Target" --> Pourquoi vouloir le fournir à une autre fonction puisque ce Target n'a aucun lien avec la cellule que tu testes ?
Une Function est différente d'une Sub.
Les fonctions que tu as déclarées ne renvoyant aucune information (ni en déclaration, ni dans les lignes de code), elles devraient être des Sub.
Ce n'est pas grave si tu laisses comme ça, cela ne provoquera pas d'erreur / dysfonctionnement pour autant.
MAIS si tu dois fournir un Range à ta fonction, déclare-le (voir l'aide).
"cells.Offset(0, 1).Select"
Ça, ça doit donner des choses bizarres !
Cells représente la totalité des cellules de ta feuille.
Alors, désigner la cellule de la colonne suivante n'a aucun sens.
Préfère le vbLf ou vbNewLine plutôt que Chr(10) (pouah)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cs_shinji7800
Messages postés4Date d'inscriptionmercredi 30 janvier 2008StatutMembreDernière intervention 9 juillet 2012 1 oct. 2010 à 08:48
merci Jack pour ces précisions ! =)
au début j'ai mis des fonctions car je voulais tout simplement appeler mes fonctions depuis une fonction SI.
SI(I9"NOK";mamacro();"")
je n'arrivais pas à l'appeler donc je suis partis sur autre chose.
en ce qui concerne le "cells.Offset(0, 1).Select"
je voulais tout simplement créer qu'une seule fonction pour réinitialiser le message de saisi mais pour se faire il fallait que je détecte la dernière case modifiée et que je le passe en argument pour pouvoir supprimer le bon message dans la bonne fonction.
j'espère avoir été suffisamment clair (j'ai du mal à émergé ce matin), sinon pardonnez moi d'avance.