Procédure événementielle pour décrémenter une colonne

Phillip

XLDnaute Occasionnel
Bonjour,

J'essaye d'écrire une procédure événementielle assez simple dans une feuille et je n'y arrive pas.

Je veux qu'une colonne de chiffres se décrémente de 1 si je supprime une valeur et que cette valeur supprimée passe à "vide".

Ca marchotte à peu près, mais ça me met des valeurs -1 sur la valeur supprimée...

Pouvez-vous m'aider ?

merci

Cordialement
 

Pièces jointes

  • test.xlsm
    12.4 KB · Affichages: 20

vgendron

XLDnaute Barbatruc
Bonjour
déjà. j'ai du mal à croire que ton code tel quel fonctionne..
il n'ya pas de End sub..?? ou alors, je l'ai effacé sans m'en rendre compte..

essaie ce code
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False 'pour éviter un lancement en boucle de l'évènement. puisque le code modifie certaines valeurs

If Target = "" Then 'si on clique sur une cellule vide....?
    For Each vValeur In Range("B8:B15")
        'vRang = vvaleur.Value
        If vValeur.Value > 1 Then
            vValeur.Value = vValeur.Value - 1
        Else
            vValeur.Value = ""
        End If
   
    Next
End If
Application.EnableEvents = True
End Sub
 

DoubleZero

XLDnaute Barbatruc
Bonjour, Phillip, vgendron :), le Forum,

Un autre essai :
VB:
Option Explicit
Private Sub Worksheet_Change(ByVal c As Range)
    Dim cc As Range
    If c.Count > 1 Then Exit Sub
    Application.EnableEvents = 0
    If c = 0 Then
        For Each cc In Range("b8:b15")
            cc = cc - 1
        Next
        c = ""
    End If
    Application.EnableEvents = -1
End Sub
A bientôt :)
 

Si...

XLDnaute Barbatruc
Bonsoir

En supprimant le vide on relance le décompte ?
Si… non :

VB:
Dim K  'ne pas supprimer, déplacer
Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If Not Intersect(R, [B8:B15]) Is Nothing And R.Count = 1 Then K = R
End Sub

Private Sub Worksheet_Change(ByVal R As Range)
  Dim C As Range
  If Not Intersect(R, [B8:B15]) Is Nothing And R.Count = 1 Then
  On Error Resume Next  'plage vide
  Application.EnableEvents = 0
  If R = "" And K <> "" Then
  For Each C In [B8:B15].SpecialCells(2)
  C = C.Value - 1
   If C < 0 Then C = ""
  K = ""
  Next
  End If
    Application.EnableEvents = 1
  End If
End Sub


ÒÓ, j'évite d'être négatif ;):D:cool:
 

Pièces jointes

  • PlageDécrémentée.xlsm
    16.3 KB · Affichages: 13

Phillip

XLDnaute Occasionnel
Bonjour,

Désolé de ma réponse tardive, j'étais absent.

Le code de VGendron ne fonctionne pas, et je ne comprends pas pourquoi, il devrait. Celui de Double zero est parfait ainsi que celui de si...

Merci à tous d'avoir cherché et de m'avoir aidé !

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 104
Messages
2 085 344
Membres
102 865
dernier inscrit
FreyaSalander