Changement uniquement si valeur numérique

Bonjour,

Pour enregistrer l'heure dans une cellule suite à la modification d'une autre j’utilise ça :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
Target.Offset(0, 33) = Time
etc ...

Le problème c'est que j'utilise une autre condition ailleurs (...Target.Offset(0, -2) = Empty) qui affecte "B:B" et donc ré-active la première condition

Je souhaiterai donc que l'heure de s’inscrive que si c'est une valeur numérique qui soit renseigné dans une cellule de la colonne B.

Mes essais avec "IsNumeric" n'ont rien donné de concluant...

Merci d'avance pour votre aide

Bonjour

Cela serait bien de voir tout le code. sinon essaie comme avec ce code

Dim stp As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If stp Then Exit Sub
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
stp = True
If IsNumeric(Target) Then Target.Offset(0, 33) = Time
End If
stp = False
End Sub

Si ok, lors de ta réponse clique sur le V vert à coté du bouton EDITER pour cloturer le fil

Amicalement

C'est surprenant ! ça fonctionne que dès lors que je rempli la cellule avec un "X" par exemple, mais pas si je laisse la cellule vide ...

Private Sub Worksheet_Change(ByVal Target As Range)

Dim stp As Boolean

If stp Then Exit Sub

If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then

stp = True

If IsNumeric(Target) Then Target.Offset(0, 33) = Time

stp = False

ElseIf Not Application.Intersect(Target, Range("F:F")) Is Nothing Then

stp = True

If IsNumeric(Target) Then Target.Offset(0, 33) = Time

stp = False

ElseIf Not Application.Intersect(Target, Range("D:D")) Is Nothing Then

Target.Offset(0, 32) = Time

(Target.Offset(0, -2) = Empty -> ne fonctionne pas)

Target.Offset(0, -2) = "X"

Ça fonctionne très bien si je met :

Target.Offset(0, -2) = ""

Merci beaucoup

Non finalement ça marche pas

L'heure de début s'écrase à chaque fois que je vide la cellule...

Ci-joint le fichier

Personne ??

Mais peut-être, existe-t-il une autre méthode ?? qui me permettrai d'obtenir le même résultat (sans avoir à taper un évènement pour chaque cellule)

Re

Edit

Bonjour,

Le fichier a été modifié parce que j'ai remis une version plus récente ... avec mes derniers essais.

1. En colonne B j'indique le numéro du match, ce qui doit inscrire l'heure du début dans la colonne AI correspondante

2. Lorsque la rencontre se termine, je valide via un double-clic dans la case correspondante au joueur vainqueur (colonne D)

3. L'action précédente engendre la suppression du numéro de match, l'inscription de l'heure de fin dans la colonne AJ correspondante

Le problème réside dans le fait qu'en effaçant via la macro le numéro du match, et donc en refaisant une modification d'une cellule de la colonne B, j'écrase l'heure de début de match inscrite précédemment... et bien sur je souhaiterai la conserver pour m'en servir ultérieurement.

Le fait de spécifier que seule une valeur numérique doit permettre l'inscription de l'heure n'y change rien.

Merci pour votre aide.

re

Je viens de voir que tu n'as pas recopié convenablement ce que je t'ai donné

Cette instruction est mal placée -->

Dim stp As Boolean

Il faut la mettre en entête de tes macros et donc dans ton fichier juste avant cette instruction ->

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

A te relire

Modification effectuée (c'est bien au dessus de l'instruction précisée ? parce qu'Excel fait une séparation avec une ligne ?)

Pas de changement, lorsque la cellule se vide, l'heure est écrasée

Re

Essaie comme ceci

Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan
If stp Then Exit Sub
If Not Application.Intersect(Target, Range("B:B,F:F,J:J,N:N")) Is Nothing Then
    stp = True
    If IsNumeric(Target) And IsEmpty(Range("AI" & Target.Row)) Then Target.Offset(0, 33) = Time
ElseIf Not Application.Intersect(Target, Range("R:R")) Is Nothing Then
    stp = True
    If IsNumeric(Target) Then Target.Offset(0, 32) = Time
ElseIf Not Application.Intersect(Target, Range("D:D,H:H,L:L,P:P,T:T")) Is Nothing Then
    stp = True
    Target.Offset(0, 32) = Time
    Target.Offset(0, -2) = ""
End If
stp = False
End Sub

Juste une remarque, il se peut que tu aies aussi des socuis avec les cellule fusionnées... à éviter avec les codes VBA. Donc ici fais quelques tests mais pas sûr que tu n'auras pas de problèmes

Si ok, lors de ta réponse clique sur la case à cocher Verte à coté du boutyon EDITER pour cloturer le fil

Amicalement

Extra ! Merci beaucoup Dan.

Rechercher des sujets similaires à "changement uniquement valeur numerique"