Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Transformer la valeur d'une cellule

Leskwal

XLDnaute Occasionnel
Bonsoir le forum, de retour vers vous...

Ma demande :

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

Un grand MERCI d'avance.


Pascal
 

Pièces jointes

  • Pour XLD Cellule 0 to 1.xlsm
    18.4 KB · Affichages: 60

Banzai64

XLDnaute Accro
Re : Transformer la valeur d'une cellule

Bonsoir

Remplaces la macro par celle-ci

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  Application.EnableEvents = False
  Target.Replace What:="0", Replacement:="1"
  Application.EnableEvents = True
End Sub
 

Etienne2323

XLDnaute Impliqué
Re : Transformer la valeur d'une cellule

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.
 

david84

XLDnaute Barbatruc
Re : Transformer la valeur d'une cellule

Bonsoir,
à tester :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target = 0 Then Target = 1
End Sub
Testé sur une feuille sans autre macro. Si nécessaire, désactiver les événementielles avec application.EnableEvents;
A+
 

Leskwal

XLDnaute Occasionnel
Re : Transformer la valeur d'une cellule

Merci à tous les 2

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


OUPS

Comment faire ?

Pascal
 

Etienne2323

XLDnaute Impliqué
Re : Transformer la valeur d'une cellule

Salut Pascal, le forum,
essaie comme ceci :

Code:
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é.

Cordialement,

Étienne
 

Leskwal

XLDnaute Occasionnel
Re : Transformer la valeur d'une cellule

Merci a tous

ça fonctionne parfaitement....

Que veut dire la commande :

Code:
Lookat:=xlWhole

Il semble que cela arrête la boucle ... Me trompé-je ???

Merci

Pascal
 

Pierrot93

XLDnaute Barbatruc
Re : Transformer la valeur d'une cellule

Que veut dire la commande :
Code:
Lookat:=xlWhole
Il semble que cela arrête la boucle ... Me trompé-je ???
Merci
Pascal

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

bonne journée
@+
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…