Detecter changement contenu cellule

Detecter changement contenu cellule - VB/VBA/VBS - Programmation

Marsh Posté le 17-05-2009 à 21:41:06    

Bonjour,  
 
 
Je souhaiterai detecter que le contenu d'une cellule à changé sous excel, pour cela, j'utilise ceci :
 

Private Sub Worksheet_Change(ByVal Target As Range)
col = Target.Column: lig = Target.Row
If col > 7 And col < 23 And lig > 6 And lig < 23 Then GoTo CelOk
If col > 7 And col < 23 And lig > 33 And lig < 50 Then GoTo CelOk
Exit Sub
CelOk:
If Cells(lig, col).Value = "" Or Cells(lig, col).Value = "/ /" Then Exit Sub
nom = Cells(lig, col).Value
a = 0
Do
a = a + 1:
Loop While LCase(Sheets("Liste" ).Cells(a, 3)) <> LCase(Cells(lig, col).Value) And a <> 500
If a = 500 Then Exit Sub
Cells(lig, col) = Sheets("Liste" ).Cells(a, 3)
Cells(lig, col - 5) = Sheets("Liste" ).Cells(a, 2)
Cells(lig, col + 16) = Sheets("Liste" ).Cells(a, 4)
End Sub


 
Detection d'une plage de cellule précise, et vérification de la cellule par rapport à une liste d'entrée, afin de completer en auto la cellule gauche et droite de celle à controler.
 
 
Mon soucis est que cette macro figure directement dans le classeur excel, et je souhaiterai la ranger dans le classeur de macro complémentaire.
 
Comment faire, merci.

Reply

Marsh Posté le 17-05-2009 à 21:41:06   

Reply

Marsh Posté le 18-05-2009 à 15:35:37    

Reply

Marsh Posté le 18-05-2009 à 21:23:50    


Sauf que la macro s'executant dans le classeur des macros comp, la fonction Worksheet_Change ne fonctionne plus.
 
Puisqu'il faut que je lui dise d'aller voir dans telle feuille de tel classeur, mais comment ?

Reply

Marsh Posté le 19-05-2009 à 11:41:22    

Tu veux lui dire comment ? par saisie ou en automatique ?

Reply

Marsh Posté le 19-05-2009 à 12:16:35    

Ca va pas t'aider pour ton problème, mais pour tes futurs développements :
 

l0r3n1 a écrit :


 
Private Sub Worksheet_Change(ByVal Target As Range)
col = Target.Column: lig = Target.Row
If (col > 7 And col < 23) And ((lig > 6 And lig < 23  lig) Or (lig > 33 And lig < 50)) Then
 
  If Cells(lig, col).Value <> "" And Cells(lig, col).Value <> "/ /" Then
    nom = Cells(lig, col).Value
    a = 0
    Do
      a = a + 1:
    Loop While LCase(Sheets("Liste" ).Cells(a, 3)) <> LCase(Cells(lig, col).Value) And a <> 500
    If a <> 500 Then
      Cells(lig, col) = Sheets("Liste" ).Cells(a, 3)
      Cells(lig, col - 5) = Sheets("Liste" ).Cells(a, 2)
      Cells(lig, col + 16) = Sheets("Liste" ).Cells(a, 4)
    End If
  End If
End If
 
End Sub
 


 
Ce n'est qu'un début d'optimisation du code mais c'est quand même plus propre. Essaie d'éviter au maximum le recours aux "goto" et aux "exit sub", surtout quand tu as facilement moyen de faire autrement, ton code n'en sera que plus lisible.
 
C'est un conseil de vieux con :D, mais c'est néanmoins ce que n'importe quel bon développeur te dira  ;)


Message édité par Turkleton le 19-05-2009 à 12:18:11
Reply

Marsh Posté le 19-05-2009 à 20:02:49    

Paul Hood a écrit :

Tu veux lui dire comment ? par saisie ou en automatique ?


En automatique, puisque son fonctionnement doit être transparent pour l'utilisateur.

Reply

Marsh Posté le 22-05-2009 à 07:34:21    

Personne ?

Reply

Marsh Posté le 25-05-2009 à 21:43:41    

up !

Reply

Marsh Posté le 07-06-2009 à 12:09:45    

Personne ne sait, ou ce n'est pas faisable ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed