Quelque soit l'endroit où je rentre la valeur 0 dans une cellule, elle devient "1".
En fichier joint :
Une macro tourne, et fonctionne sur une plage donnée (FOR EACH...NEXT...), mais cela ne m'intéresse pas car dans le fichier réel, pour chaque cellule modifiée une série de tests et de calculs interviennent et les cellules non modifiées sont quand même testées, ce qui me ralenti considérablement le processus. (Calez vous en A1 dans le fichier joint et Tapez "0" Entrer, "0" Entrer très rapidement et vous comprendrez mon problème...)
Ce que je souhaite : pour une cellule unique modifiée : => "0" devient "1"
J'ai mis sous forme de commentaire ce que je souhaitais...
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Replace What:="0", Replacement:="1"
Application.EnableEvents = True
End Sub
Saltu Leskwal,
essayez ceci. Il s'agit de procéder avec une recherche plutôt qu'avec une boucle. Beaucoup plus rapide et vous n'avez pas besoin de tester 1300 cellules à chaque fois que vous faites une modification.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c
Set c = Range("A1:Z50").Find(0, LookIn:=xlFormulas, Lookat:=xlWhole)
If Not c Is Nothing Then
Cells(c.Row, c.Column).Value = 1
Exit Sub
End If
End Sub
Cordialement,
Étienne
Édit : Salut Banzai. Plus rapide que moi !!! Très bonne solution. Au plaisir de te recroiser.
j'ai testé la soluce de Banzai64 : elle fonctionne parfaitement, cependant j'ai voulu faire simple dans mon exemple en transformant le "0" en "1" mais dans la réalité, je transforme le "0" en "0,0001"...
La soluce ne fonctionne pas car la cellule testée en 0 devient 0.0001 mais est de nouveau testée car commence par "0" , et donc j'ai une suite dans la cellule comme ci-dessous...
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Target.Replace What:="0", Replacement:="1", Lookat:=xlWhole
Application.EnableEvents = True
End Sub
À noter que ma solution initiale aurait également fonctionné.
Bonjour, cela signifie que la valeur recherchée doit correspondre à la totalité de la cellule, par opposition à "xlpart", ou la valeur peut être seulement une partie du contenu de la cellule...