OVH Cloud OVH Cloud

proc. évenementielle dans worsheet (2)

5 réponses
Avatar
laurent colledani
bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le n° de
ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle cellule
active (et non l'ancienne)

encore un peu d'aide svp
cordialement

5 réponses

Avatar
PMO
Bonjour,

Voici une astuce qui devrait convenir.

FAIRE:
1) Une variable publique String pour mémoriser dès l'activation
de la feuille la plage sélectionnée. (dans l'exemple: OldCell)
2) Dans l'évènement de la feuille activée récupérer l'adresse
de la sélection
3) Dans l'évènement Sélection Change récupérer l'adresse
(dans l'exemple par une MsgBox mais faites commme vous voulez)


'**********************
Option Explicit
Public OldCell As String
'____________________________________
Private Sub Worksheet_Activate()
OldCell = Selection.Address
End Sub
'_____________________________________
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
MsgBox OldCell
OldCell = Target.Address
End Sub
'**********************

Est-ce que ça marche ?

Cordialement.

PMO
Patrick Morange



bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le n° de
ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle cellule
active (et non l'ancienne)

encore un peu d'aide svp
cordialement



Avatar
Jacky
Bonsoir Laurent

pour rappel je cherche à renvoyer dans une procédure évenementielle le n°
de


ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.


désolé le steph et docm mais je n'y arrive pas
Pour te convaincre de l'exactitude de leurs dire ;o)

Essai ceci
Dans le module de la feuille
'-------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox "La cellule " & Target.Address(0, 0) & " que je viens de quitter
contient: " & Target.Value & Chr(10) & "Sa ligne est: " & Target.Row &
Chr(10) & "Sa colonne est: " & Target.Column
End Sub
'----------
Salutations
JJ

"laurent colledani" a écrit
dans le message de
news:
bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le n°
de

ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle
cellule

active (et non l'ancienne)

encore un peu d'aide svp
cordialement




Avatar
LeSteph
BonsoirLaurent ,
ton premier post parlait d'une cellule modifiée:....voir plus bas...après
les -------
donc:

'**********
'Met date en L qd une cell de H ou J est modifiée
'******
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 8 And Target.Column <> 10 Then Exit Sub

Application.EnableEvents = False
Cells(Target.Row, 12) = Format(Now, "dd-mmm-yyyy")
Application.EnableEvents = True



End Sub
'********
'lSteph

-------
bonsoir

je tente de mettre au point une procédure évenementielle qui se déclenche
quand la valeur dans cellule quelconque de 2 colonnes précises (h) ou (j)
est
créée ou modifiée ultérieurement
cette procédure fait appel à une fonction vba qui créée une date calculée
dans la colonne (l) sur la même ligne que mes valeurs h et j (c'est une
liste
de données avec une colonne calculée à partir de 2 éléments).
ma difficulté est de sélectionner le n° de ligne de la cellule de la colonne
h ou j dans laquelle (la cellule) on fait le changement de valeur. pPur
trouver le n° de ligne, j'utilise """k = ActiveCell.Row"""". Mais si je fais
"entrée" au clavier, apres le changement, c'est la ligne du dessous qui est
sélectionnée (à cause de l'évenement selectionchange)car la nouvelle cellule
active est celle du bas.

je ne trouve pas de procédure évenementielle qui renvoie le n° de ligne de
la cellule qui à été modifiée, seulement celle qui est nouvellement
sélectionnée.



***************voici une partie de ma procédure (qui ne marche
pas )*********

Private Sub Worksheet_selectionchange(ByVal target As Range)

Dim a As Integer
Dim b As Date

k = ActiveCell.Row
If Not Intersect(target, Range("j" & k)) Is Nothing Then
a = Range("h" & k)
b = Format(Range("j" & k).Value, "dd-mm-yy")
Range("l" & k) = datebutoir(a, b)
End If
End Sub


merci au 2 personnes qui m'ont déjà aidé sur ce problème

amicalement


"laurent colledani" a écrit
dans le message de news:

bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le n°
de
ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle
cellule
active (et non l'ancienne)

encore un peu d'aide svp
cordialement



Avatar
laurent colledani
bonjour

merci le steph, ta solution fonctionne. Je donne le programme à titre
d'info. Quelquesoit la ligne choisie dans la colonne 8 ou 10 et à condition
qu'il y ait 2 valeurs dans les 2 cellules, la fonction date butoir va
afficher son calcul dans la colonne 12 sur la bonne ligne sélectionnée.
Cependant, je ne comprend pas comment cela marche! . Que signifie
l'instruction "Application.EnableEvents = False" et plus loin
"Application.EnableEvents = True". Merci pour le cours le steph.

merci Patrick Morange mais je n'arrive pas à faire fonctionner la procédure
. elle me renvoie toujours le n° de ligne de la nouvelle cellule active et
non l'ancienne. Ou dois je mettre :
"Option Explicit
Public OldCell As String" ?

merci jj mais la procédure me renvoie aussi toujours le n° de ligne et
colonne de la nouvelle cellule active et non l'acienne cellule active.


--------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 8 And Target.Column <> 10 Then Exit Sub
If Cells(Target.Row, 8).Value = "" Or Cells(Target.Row, 10).Value = "" Then
Exit Sub
Application.EnableEvents = False
Dim a As Integer
Dim b As Date
a = Cells(Target.Row, 8).Value
b = Cells(Target.Row, 10)
Cells(Target.Row, 12).Value = datebutoir(a, b)
Application.EnableEvents = True
End Sub
----------------------


cordialement
laurent


"LeSteph" wrote:

BonsoirLaurent ,
ton premier post parlait d'une cellule modifiée:....voir plus bas...après
les -------
donc:

'**********
'Met date en L qd une cell de H ou J est modifiée
'******
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 8 And Target.Column <> 10 Then Exit Sub

Application.EnableEvents = False
Cells(Target.Row, 12) = Format(Now, "dd-mmm-yyyy")
Application.EnableEvents = True



End Sub
'********
'lSteph

-------
bonsoir

je tente de mettre au point une procédure évenementielle qui se déclenche
quand la valeur dans cellule quelconque de 2 colonnes précises (h) ou (j)
est
créée ou modifiée ultérieurement
cette procédure fait appel à une fonction vba qui créée une date calculée
dans la colonne (l) sur la même ligne que mes valeurs h et j (c'est une
liste
de données avec une colonne calculée à partir de 2 éléments).
ma difficulté est de sélectionner le n° de ligne de la cellule de la colonne
h ou j dans laquelle (la cellule) on fait le changement de valeur. pPur
trouver le n° de ligne, j'utilise """k = ActiveCell.Row"""". Mais si je fais
"entrée" au clavier, apres le changement, c'est la ligne du dessous qui est
sélectionnée (à cause de l'évenement selectionchange)car la nouvelle cellule
active est celle du bas.

je ne trouve pas de procédure évenementielle qui renvoie le n° de ligne de
la cellule qui à été modifiée, seulement celle qui est nouvellement
sélectionnée.



***************voici une partie de ma procédure (qui ne marche
pas )*********

Private Sub Worksheet_selectionchange(ByVal target As Range)

Dim a As Integer
Dim b As Date

k = ActiveCell.Row
If Not Intersect(target, Range("j" & k)) Is Nothing Then
a = Range("h" & k)
b = Format(Range("j" & k).Value, "dd-mm-yy")
Range("l" & k) = datebutoir(a, b)
End If
End Sub


merci au 2 personnes qui m'ont déjà aidé sur ce problème

amicalement


"laurent colledani" a écrit
dans le message de news:

bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le n°
de
ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle
cellule
active (et non l'ancienne)

encore un peu d'aide svp
cordialement








Avatar
LeSteph
Bonjour laurent,
(si tu utilises selection_change
Target , la cible , devient la sélection atteinte.)

L'événement change signifie que
quelque chose est modifié
ici target (la cible) est donc la cellule modifiée
et non pas celle atteinte.


Ainsi dès qu'il y a un change dans la feuille l'événement
démarre la procédure qui vérifie target et si la condition est remplie
exécute la suite des instruction sinon cela quitte (Exit Sub)
On met ainsi le enableevents à False pour désactiver l'évennement lorsque
la macro modifie ( sinon on redéclanche le change).
On réactive ensuite par True.
Même si dans le cas présent le deuxième événement avortera puisque que la
colonne L ne correspond pas à la condition posée pour target,
il n'est pas nécessaire de le redéclancher


'lSteph

"laurent colledani" a écrit
dans le message de news:

bonjour

merci le steph, ta solution fonctionne. Je donne le programme à titre
d'info. Quelquesoit la ligne choisie dans la colonne 8 ou 10 et à
condition
qu'il y ait 2 valeurs dans les 2 cellules, la fonction date butoir va
afficher son calcul dans la colonne 12 sur la bonne ligne sélectionnée.
Cependant, je ne comprend pas comment cela marche! . Que signifie
l'instruction "Application.EnableEvents = False" et plus loin
"Application.EnableEvents = True". Merci pour le cours le steph.

merci Patrick Morange mais je n'arrive pas à faire fonctionner la
procédure
. elle me renvoie toujours le n° de ligne de la nouvelle cellule active et
non l'ancienne. Ou dois je mettre :
"Option Explicit
Public OldCell As String" ?

merci jj mais la procédure me renvoie aussi toujours le n° de ligne et
colonne de la nouvelle cellule active et non l'acienne cellule active.


--------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Column <> 8 And Target.Column <> 10 Then Exit Sub
If Cells(Target.Row, 8).Value = "" Or Cells(Target.Row, 10).Value = ""
Then
Exit Sub
Application.EnableEvents = False
Dim a As Integer
Dim b As Date
a = Cells(Target.Row, 8).Value
b = Cells(Target.Row, 10)
Cells(Target.Row, 12).Value = datebutoir(a, b)
Application.EnableEvents = True
End Sub
----------------------


cordialement
laurent


"LeSteph" wrote:

BonsoirLaurent ,
ton premier post parlait d'une cellule modifiée:....voir plus bas...après
les -------
donc:

'**********
'Met date en L qd une cell de H ou J est modifiée
'******
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 8 And Target.Column <> 10 Then Exit Sub

Application.EnableEvents = False
Cells(Target.Row, 12) = Format(Now, "dd-mmm-yyyy")
Application.EnableEvents = True



End Sub
'********
'lSteph

-------
bonsoir

je tente de mettre au point une procédure évenementielle qui se déclenche
quand la valeur dans cellule quelconque de 2 colonnes précises (h) ou (j)
est
créée ou modifiée ultérieurement
cette procédure fait appel à une fonction vba qui créée une date calculée
dans la colonne (l) sur la même ligne que mes valeurs h et j (c'est une
liste
de données avec une colonne calculée à partir de 2 éléments).
ma difficulté est de sélectionner le n° de ligne de la cellule de la
colonne
h ou j dans laquelle (la cellule) on fait le changement de valeur. pPur
trouver le n° de ligne, j'utilise """k = ActiveCell.Row"""". Mais si je
fais
"entrée" au clavier, apres le changement, c'est la ligne du dessous qui
est
sélectionnée (à cause de l'évenement selectionchange)car la nouvelle
cellule
active est celle du bas.

je ne trouve pas de procédure évenementielle qui renvoie le n° de ligne
de
la cellule qui à été modifiée, seulement celle qui est nouvellement
sélectionnée.



***************voici une partie de ma procédure (qui ne marche
pas )*********

Private Sub Worksheet_selectionchange(ByVal target As Range)

Dim a As Integer
Dim b As Date

k = ActiveCell.Row
If Not Intersect(target, Range("j" & k)) Is Nothing Then
a = Range("h" & k)
b = Format(Range("j" & k).Value, "dd-mm-yy")
Range("l" & k) = datebutoir(a, b)
End If
End Sub


merci au 2 personnes qui m'ont déjà aidé sur ce problème

amicalement


"laurent colledani" a écrit
dans le message de news:

bonsoir,
désolé le steph et docm mais je n'y arrive pas

pour rappel je cherche à renvoyer dans une procédure évenementielle le

de
ligne de la cellule que je quitte par "entrée" au clavier, flêche(s) du
clavier ou clic de souris sur une autre cellule.

les solutions que le met en place à savoir......

Private Sub Worksheet_change(ByVal Target As Range)
a = Target.Offset.Row) ou....
Worksheet_selectionchange(ByVal Target As Range)
a = Target.Offset.Row)

....ne donne rien ou alors donne à "a" le n° de ligne de la nouvelle
cellule
active (et non l'ancienne)

encore un peu d'aide svp
cordialement