Evénnement VBA WorkSheet_Change

Bert

XLDnaute Nouveau
Bonjour à tous,

J'ai créé un code plutôt simple qui marche parfaitement sur une Sub classique.
Je voudrais exécuter ce code dans la cellule qui est sélectionnée est modifiée.
D'abord je vérifie si la cellule en question est bien dans une plage déterminé.
Puis j'applique le code en prenant en compte sa ligne:

Quand j'utilise ce code dans l'évènement Worksheet_change rien ne se passe...

Merci à tous pour vos réponses et idée

Code:
Private Sub Worksheet_Change(ByVal Target As Range)


Dim i As String
Dim j As String

j = Target.Column
i = Target.Row

If j = 4 Then 'Condition colonne 4
If i >= 11 And i <= 1010 Then 'Condition de la ligne 11 à 1010

If Worksheets("LISTE").Cells(i, 4).Value <> Worksheets("LISTE").Cells(i, 43).Value Then 'Si la valeur est différente à la valeur d'une cellule morte

Worksheets("LISTE").Cells(i, 5).Value = Application.VLookup(Worksheets("LISTE").Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 2, False) 'Ecrire dans les 3 cellules situé à gauche de la Target une recherche V
Worksheets("LISTE").Cells(i, 6).Value = Application.VLookup(Worksheets("LISTE").Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 3, False)
Worksheets("LISTE").Cells(i, 7).Value = Application.VLookup(Worksheets("LISTE").Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 4, False)

Else: GoTo Fin
End If
Else: GoTo Fin
End If
Else: GoTo Fin
End If

Worksheets("LISTE").Cells(i, 43).Value = Worksheets("LISTE").Cells(i, 4).Value
'Recopier la nouvelle valeur dans la cellule morte

Fin: End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Evénnement VBA WorkSheet_Change

Bonjour,

où as tu placé ce code ? dans un module standard ou dans un module de feuille (c'est sa place).... A noter que si la feuille concernée est la feuille "LISTE", tu peux enlever cette instruction partout dans ton code : "Worksheets("LISTE")"...

bon après midi
@+
 

Bert

XLDnaute Nouveau
Re : Evénnement VBA WorkSheet_Change

Bonjour,

D'abord merci pour votre réponse!
J'ai placé ce code dans un module de feuille!
Et je viens de retirer le "worksheet("LISTE")." partout..
Ca ne change rien ..
Ca ne fonctionne toujours pas.

Que puis-je essayer d'autre ?

Merci d'avance.
 

Pierrot93

XLDnaute Barbatruc
Re : Evénnement VBA WorkSheet_Change

Re,

Vérifier si les événement sont bien déclenchés, et essayer en pas à pas touche de fonction F8 dans l'éditeur vba, après avoir mis un point d'arret (touche F9) sur cette ligne :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

A noter qu'il y aura sans doute lieu de stopper les événementielles durant l'execution afin d'éviter de boucler...
Code:
Application.EnableEvents = False
'ton code
Application.EnableEvents = True
 

tbft

XLDnaute Accro
Re : Evénnement VBA WorkSheet_Change

bonjour

pour sortir d'une macro on peut mettre exit sub eou exit function !!!!

on peut aussi travail dans l'inverse...c'est à dire
au lieu
if i=4 then
Actions
Else
Sortir
End if

on peut écrire:
if i<>4 then sortir
Actions
 
Dernière édition:

Bert

XLDnaute Nouveau
Re : Evénnement VBA WorkSheet_Change

Salut,

Merci pour toute vos réponses!
J'ai fais toute les modification que vous avez proposé mais rien ne marche
Voici le code modifié.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

Dim i As Long
Dim j As Long

j = Target.Column
i = Target.Row

If j <> 4 Then Exit Sub 'Condition colonne 4
If i < 11 And i > 1010 Then Exit Sub 'Condition de la ligne 11 à 1010

If Cells(i, 4).Value = Cells(i, 43).Value Then Exit Sub 'Si la valeur est différente à la valeur d'une cellule morte
Cells(i, 5).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 2, False) 'Ecrire dans les 3 cellules situé à gauche de la Target une recherche V
Cells(i, 6).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 3, False)
Cells(i, 7).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 4, False)
End If
End If
End If
Cells(i, 43).Value = Cells(i, 4).Value
'Recopier la nouvelle valeur dans la cellule morte
Application.EnableEvents = True

End Sub

Comme je l'ai dis au début ce topic : le code de début fonctionne parfaitement dans une sub Normal...
C'est juste l'événnement worksheet_change qui bloque.. Je sais pas trop quoi faire de plus ...
Merci d'avance pour vos réponse..
 

tbft

XLDnaute Accro
Re : Evénnement VBA WorkSheet_Change

Dans l'éditeur change la récuperation d'erreur
Outils->Options
Ongler Général
Zone Récupération d'erreur
Coche Arrêt sur les erreurs non gérés

Compile ton fichier par Débogage->Compiles VBAProject
Et tu supprimera les Endif en trop
 

Bert

XLDnaute Nouveau
Re : Evénnement VBA WorkSheet_Change

Bonjour,
J'ai effectué les opération précédement dites:
"Arret sur les érreur non gérés" était déjà coché.
Avce compile VBA project il m'a dit 3 fois bloc End if sans if.

J'ai supprimé les end if (même si j'ai des if)
Et ca ne marche toujours pas ...
Que faire!?
 

tbft

XLDnaute Accro
Re : Evénnement VBA WorkSheet_Change

Re

Serait'il possible d'avoir un bout de fichier avec des données bidon, stp???

Pour info

tu écris
If condition Then
Action1
Action2
Action3
Action4
Action5

Else
Actiona
Actionb
Actionc
Actiond
End If

ou
If condition Then Action1

ou
If condition Then Action1 Else Actiona

Le Endif n'est obligatoire cela dépend comment tu écris le if then (else)
 

tbft

XLDnaute Accro
Re : Evénnement VBA WorkSheet_Change

Bonjour

dépacle la ligne:
Application.EnableEvents = False

juste entre les if .... then et les lignes qui modifie les cellules....

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim j As Long

  j = Target.Column
  i = Target.Row
  
  If j <> 4 Then Exit Sub 'Condition colonne 4
  If i < 11 And i > 1010 Then Exit Sub 'Condition de la ligne 11 à 1010
  If Cells(i, 4).Value = Cells(i, 43).Value Then Exit Sub 'Si la valeur est différente à la valeur d'une cellule morte
  
  'Arret de la gestion des événements
  Application.EnableEvents = False
  Cells(i, 5).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 2, False) 'Ecrire dans les 3 cellules situé à gauche de la Target une recherche V
  Cells(i, 6).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 3, False)
  Cells(i, 7).Value = Application.VLookup(Cells(i, 4).Value, Worksheets("Client").Range("A2:E100000"), 4, False)
  'Recopier la nouvelle valeur dans la cellule morte
  Cells(i, 43).Value = Cells(i, 4).Value
  'Redemarrage de la gestion des événements
  Application.EnableEvents = True
End Sub
 

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji