Worksheet_change

Salut à tous,

Voilà, j'ai un problème avec la fonction worksheet_change.

Déjà, je ne sais pas si on peut cumuler un worksheet_BeforDoubleClick et un Worksheet_Change sur la même page (ce qui expliquerait pourquoi ma fonction ne marche pas).

(J'ai un worksheet_BeforDoubleClick sur les colonnes 14 et 15 (colonnes N et O) :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Column = 14 Or Target.Column = 15 Then

Ma macro...

....)

Mais ma macro WorkSheet_Change doit se faire sur les plages F6:H9999 et J6:L9999

J'aimerai lancer une macro avec une variable que j'ai appelée i qui lancerait ma macro dès lors qu'une cellule de l'une des deux plages sélectionnée a été modifiée.

Private Sub Worksheet_Change(ByVal Target As Range)

{Selection des plages annoncées ci-dessus)

' Ci-dessous une partie de ma macro pour illustrer

Dim ws As Worksheet, ws2 As Worksheet

Dim i As Long

Application.ScreenUpdating = False

Set ws = Worksheets("TRAME1")

Set ws2 = Worksheets("RECAPACHATS")

i = Target.Row

If Cells(i, "F").Value <> "" Then

If Not Cells(i, "E").Value Like "*CATEGORIEL*" Then

With ws

.Range("D1") = ws2.Cells(i, 6)

.Range("E1") = ws2.Cells(i, 7)

.Range("F1") = ws2.Cells(i, 8)

.Range("G1") = ws2.Cells(i, 9)

End With

With ws2

.Cells(i, "M") = ws.Cells(4, 8)

Mon problème est comment définir ce "i" et comment arrêter cette macro (car j'ai essayé de lancer, et ma macro a duré 5 minutes car elle bloquait sur cette formule, en temps normal elle met moins de 10 secondes)

J'espère avoir expliquer correctement mon problème.

Je remercie d'avance toute personne qui pourra m'aider.

Cordialement

Bonjour

Un fichier test ayant la même structure (nom des feuilles, cellules ....) que ton fichier réel serait utile

Fournis aussi les macros

Bonjour Banzai64,

Merci de ta réponse.

En fait, je ne pense pas que créer une copie vierge de mon fichier sera nécessaire.

Ce que je cherche juste à comprendre c'est comment faire pour effectuer une worksheet_change et que si la cellule modifiée se trouve dans ma plage alors appeler ma macro recapmarge.

Et dans ma macro recapmarge, j'ai une variable i avec Dim i as Long et j'aimerais dire que i = la ligne dont la valeur a été modifiée.

Car ce i effectuera des calculs de marge grâce a une modification de prix d'achat, de prix de vente...

Donc dès lors qu'une valeur sera modifiée, lancer la macro uniquement pour cette ligne.

Merci encore pour toute aide.

Cordialement

Bonjour,

Tu peux t'inspirer de ce code pour mettre en application l'évènement Worksheet.Change :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Range("F6:H9999")) Is Nothing Or _
        Not Application.Intersect(Target, Range("J6:L9999")) Is Nothing Then
        MsgBox "Adresse de la cellule modifiée :" & Target.Address
    Else
        MsgBox "La cellule modifiée n'appartient pas à la plage définie."
    End If
End Sub

Comme te l'a indiqué Banzai64, il est préférable de joindre un fichier. Cela facilite la compréhension du problème et permet aux intervenants d'effectuer des tests.

Dommage de te priver de cette aide supplémentaire.

A+

Rechercher des sujets similaires à "worksheet change"