Effectuer macro quand cellule donnees change de valeur

Résolu
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 - 26 sept. 2007 à 15:06
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 30 sept. 2007 à 14:03
Bonjour,

Je voulais savoir s'il etait possible d'effectuer une macro lorasque l'onchange la valeur d'une seule cellule identifiée.

Je crois que l'on peut faire une sub du genre cellule change(target as)???? et plus loin dire
if column =3 and row =3 then blablabla

Mais je souhaiterais que la sub se deleclanche uniquement si je change la valeur dans la cell C3.

Es-possible et quel est le code pour ce faire.

Merci d'avance cordialement

Evel.

13 réponses

Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
26 sept. 2007 à 15:14
Biensur !
en tappant :

private sub Worksheet_change(byval target as range)
l= target.row
c=target;column

'puis rechercher la cellule désiré pour lancer le code
If l=1 and c=5 then

'code à faire

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
3
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
26 sept. 2007 à 15:54
oups correction : c=target.column ^^

puis dans ton cas pour la cellule C3 c'est un IF l=3 and c=3 then tafonction()
++

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
3
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
26 sept. 2007 à 16:32
D'accord avec ta reponse, mais a chaque fois que je vais changer une valeur dans une cellule, la private sub () va checker la cellule que j'ai changer (et effectuer la commande si c'est bien la cellule c3 que je modifie).

Mais c'est pas ca que je veux. Je en voudrais pas passer par la private sub() si je change une autre cellule que C3.
Comme j'ai une feuille avec Xmille lignes de données d'entrée qui se remplie par une autre macro, a chaque fois qu'une cellule sera remplie, ca va verifie si c'est la C3 que je change. Ca va etre super long pour remplir toutes mais données. Enfin ca va relentir la moulinette non.
A moins qu'il soit possible, avec une commande magique de ne pas faire tourner la private sub() qui verifie la cellule changée pendant que le fichier de données se rempli.
3
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
26 sept. 2007 à 19:07
essaye et apres on verra !
++

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
26 sept. 2007 à 22:46
Bonsoir,

Je suis du même avis que Adn56... Comme tu veux lancer une macro en temps réel, tu n'as pas d'autre choix que (d'effectivement) tester à chaque changer si c'est la cellule C3 qui en est la cause... Normalement, le test est très rapide tout fois. En principe, tu n'as pas à craindre de ralentissement.


Amicalement,


Us.


 
3
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 sept. 2007 à 07:30
je confirme tes dires ^__^
Sur une vielle config qui tourne sous XP avec 256Mo et un office 97 -_°, c'est du temps réel !
Donc ne te tracasses pas avec ça ;)
++
Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
3
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
27 sept. 2007 à 11:26
Bon donc j'ai utiliser ta methode Adn56. Par contre, j'ai mis un arret a la premiere ligne pour voir si ca passe bien dans la private sub quand je change n'importe quelle cellule. Mais c'est pas le ca. Rien ne se passe quand je change la valeur d'une cell. C'est pas normal??

Sinon, dans la commande, est'il possible a la place de target dans
"private sub Worksheet_change(byval target as range)"
Ne peux-t-on pas mettre la valeur C3 la cellule pour que ca ne marche uniquement si C3 est changée???
3
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
27 sept. 2007 à 12:32
Non je ne pense pas, mais en revanche je te garanti que le code ci dessous fonctionne !

Private Sub Worksheet_Change(ByVal Target As Range)


L = Target.Row
c = Target.Column




'------------------------------------------------------------------------------
' regarde si c'est la cellule ligne 1 et colone 5  => Cells(1, 5) ou E1If L 1 And c 5 Then


    'ton code à faire
msgbox("tu vois bien que cela marche")

' tu peux biensur tester autant de cellule que tu veux
End If

End sub
En revanche il faut valider le changement avec enter, donc vérifier si un changement automatique par macro lance cette procédure

++


Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
27 sept. 2007 à 23:04
Bonsoir,

Pour voir justement les évenements entre ENTER et la souris, tu peux essayer avec ces lignes basiques :

Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "change"
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox "selectionchange"
End Sub

Amicalement,
Us
0
cs_vevel Messages postés 62 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 30 mai 2017 1
28 sept. 2007 à 10:58
merci us_30 pour la comprehension de cette fonction

Par contre, j'ai un soucis encore:
losrque la cellule c3 est modifiée, je demande a changer d'autre cellule en fonction de la valeur de c3. Et donc je tourne en boucle fermée, car la cellule active est toujours c3.

Private Sub Worksheet_Change(ByVal Target As Range) if activecell.row 3 and activecell.column 3 then
   if cells(3,3)=1 then
      cells(3,4) = 1
   else
        cells(3,4) = 0
   end if
end if
End Sub

Comme bidouille je pense qu'apresla ligneif activecell.row 3 and activecell.column 3 then
je peut rajouter
cells(4,3).activate

J'ai essayer, ca marche, mais y'a pas un autre moyen que cette bidouille de gznds chemin.

Evel
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 sept. 2007 à 13:10
change active cell = 3 par mon code en page 1 et cela fonctionnera
sinon tu test en permanence car tu lui dis activecell (cellule active)


Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
28 sept. 2007 à 13:11
Private Sub Worksheet_Change(ByVal Target As Range)
L = Target.Row
c = Target.Column

'------------------------------------------------------------------------------
' regarde si c'est la cellule ligne 1 et colone 5  => Cells(1, 5) ou E1
If L = 3 And c = 3 Then

' pense au case  c'est mieux ^^ sinon
 if cells(3,3)=1 then
      cells(3,4) = 1
   else
        cells(3,4) = 0
   end if
' tu peux biensur tester autant de cellule que tu veux
End If

Tiens les balises ne sont pas reconnues ^_____^, zut alors.....
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
30 sept. 2007 à 14:03
Bonjour,

En effet, comme le souligne Adn56, ton problème vient du fait que tu utilises ActiveCell au lieu de TARGET. En fait, à chaque changement d'une case sur la feuille, l'évenement "Change" de la feuille (Worksheet) est exécuté, et avec Excel indique également la cellule qui a changée par l'intermédiaire de Target (qui contient symboliquement toutes les propriétes de Cell) . Ce qui a l'avantage d'éviter le travers dans lequel tu d'évoquer$... -:);

Pour l'alternative proposée par Adn56, tu peux donc aussi essayer :

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Row
    Case 3  'ligne 3
        Select Case Target.Column
        Case 3  'colonne 3            If Target 1 Then Cells(3, 4) 1 Else Cells(3, 4) = 0
        End Select
End Select
End Sub

... qui aura l'avantage d'être plus clair...

Amicalement,
Us.
0
Rejoignez-nous