OVH Cloud OVH Cloud

Worksheet_SelectionChange() - Suite -

6 réponses
Avatar
Thierry Euzenot
Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit les
coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change de
cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter ?
Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...

6 réponses

Avatar
michdenis
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une variable de type objet "Range"

Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de news:emep3%
Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit les
coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change de
cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter ?
Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...
Avatar
Michel Pierron
Bonjour Denis;
Je n'ai pas tout compris; pour ma part, j'avais envisagé quelque chose comme:

Private oldCell As String

Private Sub Worksheet_Activate()
oldCell = ActiveCell.Address
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If oldCell = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
Exit Sub
End If
oldCell = Target.Address
End Sub

MP

"michdenis" a écrit dans le message de
news:Olm$
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une variable
de type objet "Range"


Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de
news:emep3%

Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit les
coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change de
cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter ?
Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...






Avatar
michdenis
Bonjour Michel,

Je suis d'accord avec toi sur le principe , sauf sur ceci :

oldCell est une variable défini comme un "String", représentant une adresse de cellule.

Est-ce que le demandeur a spécifié qu'en B5 se trouvait une adresse de cellule valide ?

Moi, je n'ai pas tout compris ce que voulait faire le demandeur !

If oldCell = Feuil1.Range("B5") Then



Salutations!




"Michel Pierron" a écrit dans le message de news:
Bonjour Denis;
Je n'ai pas tout compris; pour ma part, j'avais envisagé quelque chose comme:

Private oldCell As String

Private Sub Worksheet_Activate()
oldCell = ActiveCell.Address
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If oldCell = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
Exit Sub
End If
oldCell = Target.Address
End Sub

MP

"michdenis" a écrit dans le message de
news:Olm$
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une variable
de type objet "Range"


Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de
news:emep3%

Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit les
coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change de
cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter ?
Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...






Avatar
Michel Pierron
Re Denis;
Ben oui, c'est écrit en clair dans la 2 ligne de sa procédure:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then

Target.Address est forcément de type String !
MP

"michdenis" a écrit dans le message de
news:%23YIB3%
Bonjour Michel,

Je suis d'accord avec toi sur le principe , sauf sur ceci :

oldCell est une variable défini comme un "String", représentant une adresse de
cellule.


Est-ce que le demandeur a spécifié qu'en B5 se trouvait une adresse de cellule
valide ?


Moi, je n'ai pas tout compris ce que voulait faire le demandeur !

If oldCell = Feuil1.Range("B5") Then



Salutations!




"Michel Pierron" a écrit dans le message de
news:

Bonjour Denis;
Je n'ai pas tout compris; pour ma part, j'avais envisagé quelque chose comme:

Private oldCell As String

Private Sub Worksheet_Activate()
oldCell = ActiveCell.Address
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If oldCell = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
Exit Sub
End If
oldCell = Target.Address
End Sub

MP

"michdenis" a écrit dans le message de
news:Olm$
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une variable
de type objet "Range"


Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de
news:emep3%

Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit les
coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change de
cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter ?
Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...











Avatar
Thierry Euzenot
Merci beaucoup messieurs Denis et Michel, ça fonctionne très bien (les deux
solutions ^^)

"michdenis" a écrit dans le message de
news:Olm$
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une
variable de type objet "Range"


Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de
news:emep3%

Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu plus
chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit
les

coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas à
grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change
de

cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de quitter
?

Je précise que je souhaite pouvoir quitter la cellule active soit par TAB,
soit par Entrée, soit par un clic sur une autre cellule...






Avatar
Thierry Euzenot
En fait dans cette solution le "Exit Sub" est en trop car si oldcell "$B$5" même si je sélectionne une autre cellule la valeur de OldCell reste
la même.

Et sinon au niveau ralentissement d'Excel, quelle est l'incidence ?
J'imagine qu'un test tournant en boucle ralentit l'execution du reste...

En clair est-ce que c'est une fonctionnalité qu'il est bon d'utiliser
fréquement ou vaut-il mieux l'éviter ?

Et encore une fois merci ^^

"Michel Pierron" a écrit dans le message de
news:
Bonjour Denis;
Je n'ai pas tout compris; pour ma part, j'avais envisagé quelque chose
comme:


Private oldCell As String

Private Sub Worksheet_Activate()
oldCell = ActiveCell.Address
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If oldCell = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
Exit Sub
End If
oldCell = Target.Address
End Sub

MP

"michdenis" a écrit dans le message de
news:Olm$
Bonjour Thierry,


Dans le haut du module feuille où se déroule l'action, tu déclare une
variable


de type objet "Range"

Dim MaCell as Range
'----------------------
Dim MaCell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If MaCell Is Nothing Then
Set MaCell = Target
End If

If Target.Address = Range("B5").Address Then
MsgBox "Ok"
End If

End Sub
'----------------------



Salutations!





"Thierry Euzenot" a écrit dans le message de
news:emep3%

Quelques infos de plus que dans mon post précédent...

Dans une feuille de calcul, je veux détecter la perte de focus d'une
cellule.

D'après mes connaissances limitées en ce domaine que j'explore un peu
plus


chaque jour, je vais donc utiliser la fonction :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Mais en fait Worksheet_SelectionChange(ByVal Target As Range) me renvoit
les


coordonnées de la nouvelle cellule sélectionnée... ce qui ne me sert pas
à


grand chose...
Je suis donc obligé de faire :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> Feuil1.Range("B5") Then
Feuil1.TextBox1.Value = "8:0"
Feuil1.TextBox2.Activate
End If
End Sub

Ceci ne me parait pas le plus simple et en plus pose de réels problèmes
puisque je ne peux plus sélectionner de cellules pour travailler
"normalement" dans ma feuille de calculs car à chaque fois que je change
de


cellule la fonction se lance...

Comment puis-je récupérer l'adresse de la cellule que je viens de
quitter ?


Je précise que je souhaite pouvoir quitter la cellule active soit par
TAB,


soit par Entrée, soit par un clic sur une autre cellule...