Re,
Ceci
est d'autant plus normal que l'évènement "Change" teste le changement du contenu de la cellule sélectionnée et non pas le contenu de toutes les cellules de la feuille !
Une cellule dont le contenu se modifie par une formule n'entre plus dans le cadre de cet évènement sauf si on ajoute des lignes de test.
Mais lesquelles ici ?
Tu as bien écrit :
alors j'ai testé la colonne H.
Tes cellules "C" sont dépendantes de plusieurs autres donc ce sont celles-ci qu'il faut tester dans l'évènement.
Dis nous clairement quelles sont les cellules modifiables qui agissent sur tes cellules "C".
Tant que tu y es, précise si tu veux le mot, à partir d'un des mois ou de tous ceux-ci !
@pierrejean : je viens de lire ton dernier message et partage ton opinion.
Re
Compte tenu du fait que la feuille bdd_stocks peut reagir a une modification de bdd_mouvements j'ai fait un appel a la macro test a partir de Change de bdd_mouvements
PS: Il est penible de travailler avec un fichier qui change de disposition a chaque post et dont les exemples ne sont pas coherents (j'ai bataillé un moment avant de m'apercevoir que sans fournisseur en colonne F la macro ne peut donner de resultat
Veux-tu tester cette version avec des modifications correspondantes au fonctionnement normal ?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range('B2:B3')) Is Nothing Then ta macro
Non, je suis désolé :
Ta première formule répond bien à la demande. Le seul hic, et comme je l'indique dans les précédents posts, c'est que lors d'une modification de valeur (via une formule) dans les colonnes par mois, rien ne se passe. La seule façon d'obtenir le résultat escompté, c'est de taper la modif en texte dans la colonne.
James 007
Je viens de retester le fichier que tu avais envoyé https://www.excel-downloads.com/threads/fonction-si-par-macro-vb.113973/
Celui ci fonctionne bien sur la première ligne du tableau mais pas sur les lignes suivantes...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Li As Integer, Col As Byte, C As Byte
If Target.Count > 1 Then Exit Sub
Li = Target.Row
If Not Intersect(Target, Range("H" & Li & ":CF" & Li)) Is Nothing Then
For Col = 14 To 80 Step 6
If Cells(Li, Col) < Cells(Li, "H") Then C = C + 1
Next
Cells(Li, "G") = IIf(C = 0, "EN STOCK", "RUPTURE")
End If
End Sub
Salut,
sans autres précisions formulées, une dernière macro ("Rupture" pour au moins 1 mois)
Code:Private Sub Worksheet_Change(ByVal Target As Range) Dim Li As Integer, Col As Byte, C As Byte If Target.Count > 1 Then Exit Sub Li = Target.Row If Not Intersect(Target, Range("H" & Li & ":CF" & Li)) Is Nothing Then For Col = 14 To 80 Step 6 If Cells(Li, Col) < Cells(Li, "H") Then C = C + 1 Next Cells(Li, "G") = IIf(C = 0, "EN STOCK", "RUPTURE") End If End Sub
QUAND CHANGEMENT VALEUR "B2", SI "B2"<="A2" THEN "C2"="RUPTURE" SINON "EN STOCK"
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address="$B$2" Then [C2] = IIF([B2]<=[A2], "RUPTURE, "EN STOCK")
J'ai trouvé un post parlant de la même problèmatique, par contre je ne comprends pas tout sur la réponse apportée, je suis "junior" en VBA
https://www.excel-downloads.com/threads/activer-une-macro-sur-changement-de-valeur.68202/
Public valcel
Public Sub mymacro()
Msgbox "test"
End sub
'Dans le code de la feuille active
Private Sub Worksheet_Calculate()
If Range("A1").Value = valcel Then Else mymacro
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
mymacro
Else
valcel = Range("A1").Value
End If
End Sub