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

'Worksheet_Change'

4 réponses
Avatar
JeanYvesGascon
Bonjour =E0 toutes et tous

Je travaille sous excel 2003 sur un tableau partag=E9 de gestion
d'abscence.

Initialement, j'avais ecris ce code pour avoir une trace de changement
de valeur sur une ligne qui donnait ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count =3D 1
Then
Application.EnableEvents =3D False
Cells(Target.Row, 24) =3D Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) =3D Now
Application.EnableEvents =3D True
End If
End Sub

Je voudrais afinner ce code en le divisant en deux parties distinctes,
=E0 savoir de [A:L] une zone d=E9di=E9e =E0 l'abscence
et une zone d=E9di=E9e au remplacement [M:P]

J'ai donc =E9cris ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:L65000], Target) Is Nothing And Target.Count =3D 1
Then
Application.EnableEvents =3D False
Cells(Target.Row, 24) =3D Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) =3D Now
Application.EnableEvents =3D True
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en AA le user name et en AB le moment
If Not Intersect([M2:p65000], Target) Is Nothing And Target.Count =3D 1
Then
Application.EnableEvents =3D False
Cells(Target.Row, 27) =3D Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) =3D Now
Application.EnableEvents =3D True
End If
End Sub

La premi=E8re proc=E9dure fonctionne, mais pas la seconde !!!

Que faire ?

Qui pourrait m'apporter ses lumi=E8res ?

merci d'avance et joyeuses f=EAtes =E0 toutes et tous

Jean-Yves

4 réponses

Avatar
Corona
Bonjour Jean-Yves,
Est-ce que ce code te convient ?
Il y a évidemment moyen de faire plus court
Philippe Tulliez

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' de A à L
Select Case Target.Column
Case 1 To 12
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Case 13 To 16
' de M à P
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
End Select
Application.EnableEvents = True
End If
End Sub

JeanYvesGascon a écrit :
Bonjour à toutes et tous

Je travaille sous excel 2003 sur un tableau partagé de gestion
d'abscence.

Initialement, j'avais ecris ce code pour avoir une trace de changement
de valeur sur une ligne qui donnait ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub

Je voudrais afinner ce code en le divisant en deux parties distinctes,
à savoir de [A:L] une zone dédiée à l'abscence
et une zone dédiée au remplacement [M:P]

J'ai donc écris ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:L65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en AA le user name et en AB le moment
If Not Intersect([M2:p65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
Application.EnableEvents = True
End If
End Sub

La première procédure fonctionne, mais pas la seconde !!!

Que faire ?

Qui pourrait m'apporter ses lumières ?

merci d'avance et joyeuses fêtes à toutes et tous

Jean-Yves


Avatar
Corona
Version plus courte
Philippe

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' de A à L (1-12) ' de M à P (13-16)
With Target
Cells(.Row, 24 + 3 * Abs(.Column > 12)) = Environ("username") ' ou
GetUserName()
Cells(.Row, 25 + 3 * Abs(.Column > 12)) = Now
End With
Application.EnableEvents = True
End If
End Sub

Corona a écrit :
Bonjour Jean-Yves,
Est-ce que ce code te convient ?
Il y a évidemment moyen de faire plus court
Philippe Tulliez

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' de A à L
Select Case Target.Column
Case 1 To 12
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Case 13 To 16
' de M à P
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
End Select
Application.EnableEvents = True
End If
End Sub

JeanYvesGascon a écrit :
Bonjour à toutes et tous

Je travaille sous excel 2003 sur un tableau partagé de gestion
d'abscence.

Initialement, j'avais ecris ce code pour avoir une trace de changement
de valeur sur une ligne qui donnait ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub

Je voudrais afinner ce code en le divisant en deux parties distinctes,
à savoir de [A:L] une zone dédiée à l'abscence
et une zone dédiée au remplacement [M:P]

J'ai donc écris ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:L65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en AA le user name et en AB le moment
If Not Intersect([M2:p65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
Application.EnableEvents = True
End If
End Sub

La première procédure fonctionne, mais pas la seconde !!!

Que faire ?

Qui pourrait m'apporter ses lumières ?

merci d'avance et joyeuses fêtes à toutes et tous

Jean-Yves




Avatar
JeanYvesGascon
On 23 déc, 11:22, Corona wrote:
Bonjour Jean-Yves,
   Est-ce que ce code te convient ?
   Il y a évidemment moyen de faire plus court
Philippe Tulliez

Private Sub Worksheet_Change(ByVal Target As Range)
'   indiquer en X le user name et en Y le moment
  If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1 Then
    Application.EnableEvents = False
    ' de A à L
    Select Case Target.Column
      Case 1 To 12
         Cells(Target.Row, 24) = Environ("username") ' ou Get UserName()
         Cells(Target.Row, 25) = Now
      Case 13 To 16
    ' de M à P
         Cells(Target.Row, 27) = Environ("username") ' ou Get UserName()
         Cells(Target.Row, 28) = Now
    End Select
    Application.EnableEvents = True
  End If
End Sub

JeanYvesGascon a écrit :



> Bonjour à toutes et tous

> Je travaille sous excel 2003 sur un tableau partagé de gestion
> d'abscence.

> Initialement, j'avais ecris ce code pour avoir une trace de changement
> de valeur sur une ligne qui donnait ceci :

> Private Sub Worksheet_Change(ByVal Target As Range)
> '   indiquer en X le user name et en Y le moment
>  If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1
> Then
>    Application.EnableEvents = False
>    Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
>    Cells(Target.Row, 25) = Now
>    Application.EnableEvents = True
>  End If
> End Sub

> Je voudrais afinner ce code en le divisant en deux parties distinctes,
> à savoir de [A:L] une zone dédiée à l'abscence
> et une zone dédiée au remplacement [M:P]

> J'ai donc écris ceci :

> Private Sub Worksheet_Change(ByVal Target As Range)
> '   indiquer en X le user name et en Y le moment
>  If Not Intersect([A2:L65000], Target) Is Nothing And Target.Count = 1
> Then
>    Application.EnableEvents = False
>    Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
>    Cells(Target.Row, 25) = Now
>    Application.EnableEvents = True
>  End If
> End Sub

> Private Sub Worksheet_Change(ByVal Target As Range)
> '   indiquer en AA le user name et en AB le moment
>  If Not Intersect([M2:p65000], Target) Is Nothing And Target.Count = 1
> Then
>    Application.EnableEvents = False
>    Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
>    Cells(Target.Row, 28) = Now
>    Application.EnableEvents = True
>  End If
> End Sub

> La première procédure fonctionne, mais pas la seconde !!!

> Que faire ?

> Qui pourrait m'apporter ses lumières ?

> merci d'avance et joyeuses fêtes à toutes et tous

> Jean-Yves- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



Merci Philippe
Cela fonctionne admirablement bien.
Bien sur, si tu connais un moyen plus court ou plus rapide, je suis
preneur.

Joyeuses Fêtes

Jean-Yves
Avatar
Corona
J'ai déposé la version plus courte, dans le deuxième fil.
C'est à dire les premières lignes de ce fil
Philippe
JeanYvesGascon a écrit :
On 23 déc, 11:22, Corona wrote:
Bonjour Jean-Yves,
Est-ce que ce code te convient ?
Il y a évidemment moyen de faire plus court
Philippe Tulliez

Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' de A à L
Select Case Target.Column
Case 1 To 12
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Case 13 To 16
' de M à P
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
End Select
Application.EnableEvents = True
End If
End Sub

JeanYvesGascon a écrit :



Bonjour à toutes et tous
Je travaille sous excel 2003 sur un tableau partagé de gestion
d'abscence.
Initialement, j'avais ecris ce code pour avoir une trace de changement
de valeur sur une ligne qui donnait ceci :
Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:P65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub
Je voudrais afinner ce code en le divisant en deux parties distinctes,
à savoir de [A:L] une zone dédiée à l'abscence
et une zone dédiée au remplacement [M:P]
J'ai donc écris ceci :
Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en X le user name et en Y le moment
If Not Intersect([A2:L65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 24) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 25) = Now
Application.EnableEvents = True
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
' indiquer en AA le user name et en AB le moment
If Not Intersect([M2:p65000], Target) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
Cells(Target.Row, 27) = Environ("username") ' ou GetUserName()
Cells(Target.Row, 28) = Now
Application.EnableEvents = True
End If
End Sub
La première procédure fonctionne, mais pas la seconde !!!
Que faire ?
Qui pourrait m'apporter ses lumières ?
merci d'avance et joyeuses fêtes à toutes et tous
Jean-Yves- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Merci Philippe
Cela fonctionne admirablement bien.
Bien sur, si tu connais un moyen plus court ou plus rapide, je suis
preneur.

Joyeuses Fêtes

Jean-Yves