cs_vevel
Messages postés62Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention30 mai 20171 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.
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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.....
cs_vevel
Messages postés62Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention30 mai 20171 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???
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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.....
cs_vevel
Messages postés62Date d'inscriptionjeudi 26 mai 2005StatutMembreDernière intervention30 mai 20171 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.
Adn56
Messages postés1172Date d'inscriptionjeudi 24 mai 2007StatutMembreDernière intervention28 septembre 20131 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.....
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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