lo po compri !!!

Le
Robert
Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je
comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je comprends
plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
cousinhub
Le #4545571
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets
ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je
comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je comprends
plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert


ru-th
Le #4545551
Salut

Parce que tu ne bouclerais pas dans ta prog (un peu normal avec une
target) ;-))
le changement de valeur, redéchenches l'opération, jusqu'à plus soif
125->12,5->1,25
avec
Application.EnableEvents = False
'Ton code
Application.EnableEvents = True
les problèmes devraient être évités

néanmois, pourquoi un coup : range(target.address) et un coup Target,
tout seul ?

a+
rural thierry

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je
comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je comprends
plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert


Jacky
Le #4545541
Bonsoir
Teste comme cela et tu comprendras, regarde bien la cellule
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox Target.Address
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
End Sub
'------------
Ensuite comme ceci
'-----------
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub
'---------------
Salutations
JJ



"Robert" %
Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je
comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je comprends plus
: d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert


garnote
Le #4545531
Salut Robert,

Ceci peut-être :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge


"Robert"
Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je
comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert


garnote
Le #4545501
Bonsoir,

Après avoir effacé des cellules, la macro envoie un
message d'erreur et par la suite, elle ne fonctionne plus.
Elle laisse le résultat intact. Pourquoi ?
J'ai donc pensé à :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge

"cousinhub"
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là,
je comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert




cousinhub
Le #4545481
Re-, et bonsoir, serge
effectivement, cellules multiples sélectionnées non prises en compte....
on remplace par :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
End If
Application.EnableEvents = True
End Sub

Enfin, jusqu'à ce que cela fonctionne...
Bonne soirée

Bonsoir,

Après avoir effacé des cellules, la macro envoie un
message d'erreur et par la suite, elle ne fonctionne plus.
Elle laisse le résultat intact. Pourquoi ?
J'ai donc pensé à :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge

"cousinhub"
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là,
je comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert








garnote
Le #4545471
Mais ce qui m'étonne le plus, c'est que suite à l'effacement d'une
plage contenant plus d'une cellule, la macro ne fonctionnait plus
sur aucune feuille et aucun classeur. J'ai été obligé de fermer Excel
et l'ouvrir à nouveau pour que la macro retrouve sa vitalité.

Cé quoi çâ ?

Serge







"cousinhub"
Re-, et bonsoir, serge
effectivement, cellules multiples sélectionnées non prises en compte....
on remplace par :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
End If
Application.EnableEvents = True
End Sub

Enfin, jusqu'à ce que cela fonctionne...
Bonne soirée

Bonsoir,

Après avoir effacé des cellules, la macro envoie un
message d'erreur et par la suite, elle ne fonctionne plus.
Elle laisse le résultat intact. Pourquoi ?
J'ai donc pensé à :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge

"cousinhub"
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là,
je comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert









cousinhub
Le #4545451
Re-,
effectivement, suite à ton post, j'ai fait quelques essais, et si la
plage comportait plusieurs cellules, le même bug que toi.
redémarrage d'Excel....et tout le pataclan...
Même une ligne évènementielle au niveau de de :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ne ramenait pas Excel dans le bon sens....
Comme quoi, il faut bien délimiter son besoin, et surtout bien
l'exprimer (en langage Vba)...Et trouver le bon code, oeuf corse
Bonne soirée

Mais ce qui m'étonne le plus, c'est que suite à l'effacement d'une
plage contenant plus d'une cellule, la macro ne fonctionnait plus
sur aucune feuille et aucun classeur. J'ai été obligé de fermer Excel
et l'ouvrir à nouveau pour que la macro retrouve sa vitalité.

Cé quoi çâ ?

Serge







"cousinhub"
Re-, et bonsoir, serge
effectivement, cellules multiples sélectionnées non prises en compte....
on remplace par :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
End If
Application.EnableEvents = True
End Sub

Enfin, jusqu'à ce que cela fonctionne...
Bonne soirée

Bonsoir,

Après avoir effacé des cellules, la macro envoie un
message d'erreur et par la suite, elle ne fonctionne plus.
Elle laisse le résultat intact. Pourquoi ?
J'ai donc pensé à :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge

"cousinhub"
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là,
je comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert











LSteph
Le #4545291
Bonjour,
oui et aussi pour les tests avoir un truc
dans son perso.xls, un petit coup de :

Sub RetablEvent()
Application.EnableEvents = True
end sub

'lSteph

Bonsoir,

Après avoir effacé des cellules, la macro envoie un
message d'erreur et par la suite, elle ne fonctionne plus.
Elle laisse le résultat intact. Pourquoi ?
J'ai donc pensé à :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
Application.EnableEvents = False
If Target > 10 Then Target = Target / 10
Application.EnableEvents = True
End Sub

Serge

"cousinhub"
Bonsoir,
ta procédure se déclenche à chaque changement de ta cellule (target)
Pour éviter une boucle sans fin, voire ..., en début de ton code tu mets ceci :
Application.EnableEvents = False

donc in fine :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10
Application.EnableEvents = True
End Sub

Bonne soirée

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là,
je comprends plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert








LSteph
Le #4545241
Bonjour,

Voici deux autres possibilités (faut choisir)

pour prendre en compte les saisies sur cellules multiples...

'''''''''
Private Sub Worksheet_Change(ByVal Target As Range)
dim c as range
Application.EnableEvents = False
For each c in target.cells
If c.value > 10 Then c = c / 10
next
Application.EnableEvents = True
End Sub
'''''''''

mais il serait bon aussi de limiter dans la feuille à la plage de
cellules , qui seule soit sensée réagir à ce change, (exemple a2:e100):

'''''''''
Private Sub Worksheet_Change(ByVal Target As Range)
Dim iSect As Range, c As Range
Set iSect = Intersect(Target, [a2:e100])
If iSect Is Nothing Then Exit Sub
Application.EnableEvents = False
For Each c In iSect.Cells
If c.Value > 10 Then c = c / 10
Next
Application.EnableEvents = True
End Sub

'''''''''
'cdlt
'lSteph

Bonsoir tout le monde
Pourquoi donc cette procédure transforme t'elle 12 en 1,2 (jusque là je
comprends), mais aussi 125 en 1,25 au lieu de 12,5 (là, je comprends
plus : d'où ma question)
Private Sub Worksheet_Change(ByVal Target As Range)

If Range(Target.Address) > 10 Then Target = Range(Target.Address) / 10

End Sub

merci de l'explication si vous n'êtes pas largués comme moi.

Robert


Publicité
Poster une réponse
Anonyme