Se connecter avec
S'enregistrer | Connectez-vous

Excel executer une macro lorsque la valeur d'une cellule change

Dernière réponse : dans Programmation

Bonjour, je souhaiterai sur Excel, executer une macro lorsque la valeur d'une cellule change
J'ai déja un code fonctionnel qui réalise cette opération, cependant il porte sur la valeur d'une cellule alors que j'aimerai l'attribuer non pas à une cellule mais à l'ensemble de la colonne (en exemple de A1 à A 128)

Voici mon code

[voir messages suivants]


Je vous demande donc si il est donc possible de simplifier mon code originel afin de le porter sur l'ensemble de la colonne
Lassé par la pub ? Créez un compte

Bonjour, je souhaiterai sur Excel, executer une macro lorsque la valeur d'une cellule change
J'ai déja un code fonctionnel qui réalise cette opération, cependant il porte sur la valeur d'une cellule alors que j'aimerai l'attribuer non pas à une cellule mais à l'ensemble de la colonne (en exemple de A1 à A 128)

Voici mon code
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3.  
  4. If Target.Address = Range("a1" ).Address Then
  5. Call Module2.test_feuille_2
  6.  
  7. End If
  8. End sub


Effectivement, avec cette procédure, lorsque je modifie la valeur en A1 le module2 s'execute.

Or, je vous demande comment faire pour appliquer cette macro a chaque cellule de la colonne A1 à A128

Actuellement, je n'ai pas eu d'autre choix que de recopier cette macro autant de fois que le nombre de ligne de ma colonne, en changeant la valeur de la cellule référencée

Exemple
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3.  
  4. If Target.Address = Range("a1" ).Address Then
  5. Call Module2.test_feuille_2
  6. End If
  7.  
  8. If Target.Address = Range("a2" ).Address Then
  9. Call Module2.test_feuille_2
  10. End If
  11.  
  12. If Target.Address = Range("a3" ).Address Then
  13. Call Module2.test_feuille_2
  14. End If
  15.  
  16.  
  17. ETC...
  18.  
  19. End sub


J'ai bien sur essayé plusieurs solution mais aucune ne marche

Solution 1

Je déclare que cette procédure porte sur la colonne
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3.  
  4. If Target.Address = Range("a1":"a128" ).Address Then
  5. Call Module2.test_feuille_2
  6. End If
  7. end sub

solution 2

Je déclare une variable


  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3. dim i as integer
  4. i = activecell.row
  5.  
  6.  
  7. If Target.Address = cells(i,1).Address Then
  8. Call Module2.test_feuille_2
  9.  
  10. End If
  11. end sub


Je vous demande donc si il est donc possible de simplifier mon code originel afin de le porter sur l'ensemble de la colonne


Expert Programmation

salut,

Au lieu de te focaliser sur l'adresse, utilise les propriétés row et column.

La cellule A1 :
  1. If Target.Row = 1 And Target.Column = 1 Then ...

La colonne A :
  1. If Target.Column = 1 Then ...

Les colonnes B-D :
  1. If Target.Column >= 2 And Target.Column <= 4 Then ...

La ligne 1:
  1. If Target.Row = 1 Then ...

Les lignes 2 à 4:
  1. If Target.Row >= 2 And Target.Row <= 4 And Then ...

La zone B2 : D4:
  1. If Target.Column >= 2 And Target.Column <= 4 And Target.Row >= 2 And Target.Row <= 4 And Then ...


Oh, et puis oublie l'instruction Call qui ne sert pas à grand chose.

Merci pour l astuce.
Cependant il se passe une chose étrange puisque le code ne fonctionne pas a tout les coups.
Excel lit bien l instruction mais n execute pas le code toute les fois
(pour en etre sur j ai placé volontairement une erreur dans le code pour qu il stop la lecture)
je me demande donc si ce n est pas un probleme de configuration excel, rapidité d execution ou autre sur le pc.
Lassé par la pub ? Créez un compte