OVH Cloud OVH Cloud

événement feuille

16 réponses
Avatar
dadda
Bonsoir ;
j'ai une feuille avec des donn=E9es sur la colonne A. je=20
souhaiterais que chaque fois que je clique dans une=20
cellule de la colonne B j'aie la valeur de la cellule=20
correspondante de A multipli=E9e par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4) =20

Merci. =20

10 réponses

1 2
Avatar
garnote
Salut dadda,

En cliquant, je ne sais pas mais en sélectionnant,
tu pourrais essayer ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 2 Then
If Target.Offset(0, -1) <> "" Then
Target = Target.Offset(0, -1) * 0.1
End If
End If
End Sub

Serge
"dadda" a écrit dans le message de
news: 05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.
Avatar
Philippe.R
Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.
Avatar
garnote
Salut Philippe,

À chaque fois que je mire deux macros qui font la même chose,
je me demande tout le temps : «Pourquoi l'une plutôt que l'autre ?».
Pour ce cas, saurais-tu me dire celle qu'il faudrait adopter et pourquoi ?

;-)

Serge


"Philippe.R" a écrit dans le message de news:

Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.





Avatar
Philippe.R
Serge,
A mon niveau de connaissance de VBA, j'utilise souvent à l'intuition ce dont je suis capable de me
souvenir
avoir utilisé avec plus ou moins de succès ou avoir lu sous la plume d'un expert.

Pour le cas d'espèce, la confrontation de nos deux approches initiales me donnerait envie de rédiger ça
ainsi :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
Target = Target.Offset(0, -1) * 0.1
End Sub

Un seul if et pas de variable à gérer me semble plus efficace ; un expert nous dira peut être ce qu'il
en pense.
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"garnote" a écrit dans le message de news:Jd9yb.71892$
Salut Philippe,

À chaque fois que je mire deux macros qui font la même chose,
je me demande tout le temps : «Pourquoi l'une plutôt que l'autre ?».
Pour ce cas, saurais-tu me dire celle qu'il faudrait adopter et pourquoi ?

;-)

Serge


"Philippe.R" a écrit dans le message de news:

Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.









Avatar
Michel Gaboly
Bonsoir,

Aucune des 2, car plantage assuré si la cellule en A n'est ni vide ni
numérique ;-))

Il n'y a pas d'événement Click pour l'obkjet Worksheet, mais tu peux
utiliser le double clic ou le clic droit (Ctrl + clic sur Mac si souris
avec un seul bouton).

Voici le code pour un double clic :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim a As Range
If Target.Column = 2 Then
Set a = Target.Offset(, -1)
If IsNumeric(a) And Not IsEmpty(a) Then
Target = a / 10
End If
End If
End Sub

Pour utiliser le clic droit, simplement remplacer "BeforeDoubleClick"
par "BeforeRightClick".



Salut Philippe,

À chaque fois que je mire deux macros qui font la même chose,
je me demande tout le temps : «Pourquoi l'une plutôt que l'autre ?».
Pour ce cas, saurais-tu me dire celle qu'il faudrait adopter et pourquoi ?

;-)

Serge

"Philippe.R" a écrit dans le message de news:

Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.






--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
Philippe.R
Re Serge,
Pour faire suite à la judicieuse remarque de Michel, il me semble qu'on peut aussi le faire comme ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("b:b")) Is Nothing Or Not IsNumeric(Target.Offset(0, -1)) Then Exit Sub
Target = Target.Offset(0, -1) * 0.1
End Sub

--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"garnote" a écrit dans le message de news:Jd9yb.71892$
Salut Philippe,

À chaque fois que je mire deux macros qui font la même chose,
je me demande tout le temps : «Pourquoi l'une plutôt que l'autre ?».
Pour ce cas, saurais-tu me dire celle qu'il faudrait adopter et pourquoi ?

;-)

Serge


"Philippe.R" a écrit dans le message de news:

Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.









Avatar
Michel Gaboly
Bonsoir Philippe,

Personnellement, je trouve plus simple ici d'utiliser comme Serge, la propriété Column,
puisqu'elle est connue pour la plage à traiter.

Cependant un minimum de tests est nécessaire :

1 -Si la cellule en A est vide, il est probablement inutile de faire apparaître 0 (zéro)
en B.

2 - Si le contenu de la cellule en A n'est pas numérique (titre par exemple), il ne faut
pas essayer de lui appliquer un calcul, ou alors, il faut prévoir une gestion d'erreur
(On Error Resume Next).

Enfin, quand tu utilises Intersect, qui est d'usage très général avec les procédures de
ce type, j'ai une préférence pour

If Not Intersect ... is Nothing Then

plutôt que

If Intersect ... is Nothing Then Exit Sub

mais en l'occurrence, des goûts et des couleurs ;-))

Ma préférence repose sur le fait que selon moi, il faut éviter les "Goto" dans un code,
qui le rendent vite illisible, et à un degré moindre les "Exit Sub" : si on indente le code
les lignes situées entre "If ... " et "End If" se repèrent immédiatement, plus facilement
qu'un "Exit Sub", donc c'est plus facile à comprendre quand on examine le code sans en
être l'auteur ou longtemps après l'avoir écrit.



Serge,
A mon niveau de connaissance de VBA, j'utilise souvent à l'intuition ce dont je suis capable de me
souvenir
avoir utilisé avec plus ou moins de succès ou avoir lu sous la plume d'un expert.

Pour le cas d'espèce, la confrontation de nos deux approches initiales me donnerait envie de rédiger ça
ainsi :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
Target = Target.Offset(0, -1) * 0.1
End Sub

Un seul if et pas de variable à gérer me semble plus efficace ; un expert nous dira peut être ce qu'il
en pense.
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"garnote" a écrit dans le message de news:Jd9yb.71892$
Salut Philippe,

À chaque fois que je mire deux macros qui font la même chose,
je me demande tout le temps : «Pourquoi l'une plutôt que l'autre ?».
Pour ce cas, saurais-tu me dire celle qu'il faudrait adopter et pourquoi ?

;-)

Serge


"Philippe.R" a écrit dans le message de news:

Bonsoir,

Dans le module de feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Long
If Intersect(Target, Range("b:b")) Is Nothing Then Exit Sub
r = ActiveCell.Row
ActiveCell.Value = Cells(r, 1).Value / 10
End Sub

le fait
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"dadda" a écrit dans le message de
news:05fa01c3b6bf$b185a380$
Bonsoir ;
j'ai une feuille avec des données sur la colonne A. je
souhaiterais que chaque fois que je clique dans une
cellule de la colonne B j'aie la valeur de la cellule
correspondante de A multipliée par 10% exemple :
A B
15 1.5
26 2.6
14 (Si je clique ici j'aurai 1.4)

Merci.









--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
AV
Ave Philippe,

Aïe, aïe si on clique sur la cellule Ax !
Le "Target.Offset(0, -1))" va pas aimer ;-)

AV
Avatar
Philippe.R
Bonjour Alain,

Le "Target.Offset(0, -1))" va pas aimer ;-)


Tu as raison dans l'absolu et c'est pourquoi je l'avais fait précéder de cette ligne :
If Intersect(Target, Range("b:b")) Is Nothing Or Not IsNumeric(Target.Offset(0, -1)) Then Exit Sub
qui réserve l'action à la colonne B
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"AV" a écrit dans le message de
news:uxBz%
Ave Philippe,

Aïe, aïe si on clique sur la cellule Ax !
Le "Target.Offset(0, -1))" va pas aimer ;-)

AV




Avatar
AV
Tu as raison dans l'absolu
sauf erreur, me semble aussi dans le "relatif" ;-)


le "If Intersect(Target, Range("b:b")) Is Nothing" n'exclue pas le test sur
"IsNumeric(Target.Offset(0, -1))" (opérateur "Or")
Donc si la cellule Ax est cliquée ça devrait planter
Pas chez toi ?

AV

me semb
et c'est pourquoi je l'avais fait précéder de cette ligne :
If Intersect(Target, Range("b:b")) Is Nothing Or Not
IsNumeric(Target.Offset(0, -1)) Then Exit Sub

qui réserve l'action à la colonne B
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002

"AV" a écrit dans le message de
news:uxBz%
Ave Philippe,

Aïe, aïe si on clique sur la cellule Ax !
Le "Target.Offset(0, -1))" va pas aimer ;-)

AV








1 2