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

SCHMITX

Habitué
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
 

SCHMITX

Habitué
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
[cpp]
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address = Range("a1" ).Address Then
Call Module2.test_feuille_2

End If
End sub
[/cpp]

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
[cpp]
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address = Range("a1" ).Address Then
Call Module2.test_feuille_2
End If

If Target.Address = Range("a2" ).Address Then
Call Module2.test_feuille_2
End If

If Target.Address = Range("a3" ).Address Then
Call Module2.test_feuille_2
End If


ETC...

End sub
[/cpp]

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

Solution 1

Je déclare que cette procédure porte sur la colonne
[cpp]
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address = Range("a1":"a128" ).Address Then
Call Module2.test_feuille_2
End If
end sub
[/cpp]
solution 2

Je déclare une variable


[cpp]
Private Sub Worksheet_Change(ByVal Target As Range)

dim i as integer
i = activecell.row


If Target.Address = cells(i,1).Address Then
Call Module2.test_feuille_2

End If
end sub
[/cpp]

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


 

zeb

Modérateur
salut,

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

La cellule A1 :
Code:
If Target.Row = 1 And Target.Column = 1 Then ...
La colonne A :
Code:
If Target.Column = 1 Then ...
Les colonnes B-D :
Code:
If Target.Column >= 2 And Target.Column <= 4 Then ...
La ligne 1:
Code:
If Target.Row = 1 Then ...
Les lignes 2 à 4:
Code:
If Target.Row >= 2 And Target.Row <= 4 And Then ...
La zone B2 : D4:
Code:
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.
 

SCHMITX

Habitué
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.
 

zeb

Modérateur
Je n'aime pas beaucoup les codes qui ne fonctionnent pas à tous les coups.

Plutôt que de mettre des erreurs volontaires, apprend à déboguer. Utilise les points d'arrêt, l'objet Debug, l'instruction Stop. Tout est expliqué là :
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 101
Membres
1 586 287
Dernier membre
lucilleguffey
Partager cette page
Haut