Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lo po compri !!!

13 réponses
Avatar
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

10 réponses

1 2
Avatar
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


Avatar
ru-th
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


Avatar
Jacky
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" a écrit dans le message de news:
%
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


Avatar
garnote
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" a écrit dans le message de news: %
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


Avatar
garnote
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" a écrit dans le message de news: e6uk3B%
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




Avatar
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" a écrit dans le message de news: e6uk3B%
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








Avatar
garnote
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" a écrit dans le message de news: uXY$LY%
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" a écrit dans le message de news: e6uk3B%
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









Avatar
cousinhub
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" a écrit dans le message de news: uXY$LY%
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" a écrit dans le message de news: e6uk3B%
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











Avatar
LSteph
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" a écrit dans le message de news: e6uk3B%
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








Avatar
LSteph
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


1 2