OVH Cloud OVH Cloud

réinitialisation texte bouton

18 réponses
Avatar
j-pascal
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur de D6 = "
>>>", le tri s'effectue et donc la valeur de D6 passe à "", mais le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir "Liste Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste ...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP

8 réponses

1 2
Avatar
Philippe.R
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !
--
Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le module
de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se trouve
dans la cellule E6 et en fonction du résultat, j'ai une mise en forme
conditionnelle qui met le motif de la cellule en rouge ce qui "invite"
l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le nom
du dessus est ">" à celui de la ligne testée, la formule renvoit un "1".
Si le contenu de la colonne est supérieur à 0 cela signifie que la plage
doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ; comme
ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici le
code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer le
tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis :
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la feuille


If Range("D6") = " >>>" Then '2 espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question car je
suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>" (situé
juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune instruction
correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton est
lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur de
D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "", mais le
texte
"TRIER ici" reste sur le bouton alors que je devrais avoir "Liste



Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste ...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP























Avatar
j-pascal
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans une
cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du bouton
(98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le module
de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se trouve
dans la cellule E6 et en fonction du résultat, j'ai une mise en forme
conditionnelle qui met le motif de la cellule en rouge ce qui "invite"
l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le nom
du dessus est ">" à celui de la ligne testée, la formule renvoit un "1".
Si le contenu de la colonne est supérieur à 0 cela signifie que la plage
doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici le
code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer le
tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis :
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la feuille


If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question car je
suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>" (situé
juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune instruction
correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton est
lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur de
D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "", mais le
texte
"TRIER ici" reste sur le bouton alors que je devrais avoir "Liste



Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste
...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP


























Avatar
Philippe.R
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de remplacer
doevents par application.enableevents=true en fin de procédure de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub

Et dans le code de la feuille, la condition étant évaluée en AW3 dont on
récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la propriété
par défaut
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans
une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du bouton
(98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton
!)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:

Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le module
de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise en
forme conditionnelle qui met le motif de la cellule en rouge ce qui
"invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le
nom du dessus est ">" à celui de la ligne testée, la formule renvoit un
"1". Si le contenu de la colonne est supérieur à 0 cela signifie que la
plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici le
code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer le
tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis :
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la feuille


If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question car
je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune instruction
correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton
est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur de
D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "", mais
le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir "Liste



Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste
...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP





























Avatar
j-pascal
Bonjour Philippe,

Quelle persévérance !!

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de remplacer
doevents par application.enableevents=true en fin de procédure de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub


Malheureusement, ça ne règle pas le pb. La seule chose qui fasse passer
l'affichage à "Liste Ok" , c'est une saisie dans la feuille (y compris pas
sélection via menu déroulant).

Et dans le code de la feuille, la condition étant évaluée en AW3 dont on
récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la
propriété par défaut


J'ai testé ; cela fonctionne effectivement très bien.

Pour revenir à mon "pb" initial (car de mon côté, je continue de
chercher...) : quand on a une "Private Sub Worksheet_Change", qu'est ce qui
se passe "concrétement" lorsqu'on saisie une valeur dans la feuille ?
Autrement dit, à partir de quel "état" cette procédure est-elle activée ?

JP

--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans
une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du
bouton (98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton
!)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le
module de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise en
forme conditionnelle qui met le motif de la cellule en rouge ce qui
"invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le
nom du dessus est ">" à celui de la ligne testée, la formule renvoit un
"1". Si le contenu de la colonne est supérieur à 0 cela signifie que la
plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici
le code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer
le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis :
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la feuille


If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question car
je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune
instruction correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton
est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur
de D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "", mais
le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir "Liste



Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste
...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP
































Avatar
Philippe.R
Re j-pascal,
Quelle persévérance !!
J'aime pas qu'on me résiste ;o)))))


Les procédures de feuille, du type Worksheet_qqch(), dont Worksheet_Change()
fait partie sont des procédures évenementielles, qui permettent de réaliser
une action lors de la réalisation d'un évènement donné.
Dans le cas présent, avec Worksheet_Change(), c'est le changement d'une
valeur dans la feuille qui décenchera la procédure.
Ces procédures sont inhibées par l'instruction
application.enableeventsúlse et rétablies par
application.enableevents=true

Je joins un petit classeur exemple avec une macro de tri lancée par le
bouton

Sub triplage()
'MPFE le 28/07/2007
Application.EnableEvents = False
Range("G1:G23").Select
Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.EnableEvents = True
[a1] = 2
DoEvents
End Sub

et une macro évenementielle

Private Sub Worksheet_Change(ByVal Target As Range)
'MPFE le 28/07/2007
'La première ligne de commande permet de faire passer la cellule a1 à 1
If Not Intersect(Target, Range("g1:g23")) Is Nothing Then [a1] = 1
'la suite reprend la logique de ton classeur
ActiveSheet.Shapes("Button 1").Select
Selection.Characters.Text = Range("A6").Value
Range("a1").Select
End Sub

permettant de simuler ce qui devrait se passer normalement (à ce que j'ai
pigé)

http://cjoint.com/?hCsXLUjFEj

--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonjour Philippe,


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de remplacer
doevents par application.enableevents=true en fin de procédure de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub


Malheureusement, ça ne règle pas le pb. La seule chose qui fasse passer
l'affichage à "Liste Ok" , c'est une saisie dans la feuille (y compris pas
sélection via menu déroulant).

Et dans le code de la feuille, la condition étant évaluée en AW3 dont on
récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la
propriété par défaut


J'ai testé ; cela fonctionne effectivement très bien.

Pour revenir à mon "pb" initial (car de mon côté, je continue de
chercher...) : quand on a une "Private Sub Worksheet_Change", qu'est ce
qui se passe "concrétement" lorsqu'on saisie une valeur dans la feuille ?
Autrement dit, à partir de quel "état" cette procédure est-elle activée ?

JP

--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans
une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du
bouton (98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton
!)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le
module de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise en
forme conditionnelle qui met le motif de la cellule en rouge ce qui
"invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le
nom du dessus est ">" à celui de la ligne testée, la formule renvoit
un "1". Si le contenu de la colonne est supérieur à 0 cela signifie
que la plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici
le code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer
le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis
:
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la

feuille

If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question car
je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune
instruction correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton
est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur
de D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "", mais
le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir



"Liste Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma liste
...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP



































Avatar
j-pascal
Bonjour Philippe,

Ton classeur fonctionne très bien, mais si on modifie une valeur de ta liste
à trier, la macro demande toujours de trier même si la nouvelle valeur est
déjà dans l'ordre alpha.

Comme j'avais remarqué qu'il suffisait de saisir une valeur dans la feuille
pour réinitialiser le texte du bouton (et à la relecture de tes nombreuses
explications antérieures), j'ai fait ceci :

Code de la feuille :

ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").Value
Range("D6").Select

Code du Tri :

J'ai simplement ajouté [a3] = 0 à la fin de la procédure (juste avec End
Sub) afin de "simuler" une saisie (dans une zone vide) !

Ce n'est probablement pas très accadémique, mais ça fonctionne bien ;-)

Question subsidaire ;-) :

Que faudrait-il ajouter à cette ligne pour "évaluer" la présence d'un
commentaire situé entre les colonnes P et AT ? :

"If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0"

Peut-être à bientôt ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re j-pascal,
Quelle persévérance !!
J'aime pas qu'on me résiste ;o)))))


Les procédures de feuille, du type Worksheet_qqch(), dont
Worksheet_Change() fait partie sont des procédures évenementielles, qui
permettent de réaliser une action lors de la réalisation d'un évènement
donné.
Dans le cas présent, avec Worksheet_Change(), c'est le changement d'une
valeur dans la feuille qui décenchera la procédure.
Ces procédures sont inhibées par l'instruction
application.enableeventsúlse et rétablies par
application.enableevents=true

Je joins un petit classeur exemple avec une macro de tri lancée par le
bouton

Sub triplage()
'MPFE le 28/07/2007
Application.EnableEvents = False
Range("G1:G23").Select
Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.EnableEvents = True
[a1] = 2
DoEvents
End Sub

et une macro évenementielle

Private Sub Worksheet_Change(ByVal Target As Range)
'MPFE le 28/07/2007
'La première ligne de commande permet de faire passer la cellule a1 à 1
If Not Intersect(Target, Range("g1:g23")) Is Nothing Then [a1] = 1
'la suite reprend la logique de ton classeur
ActiveSheet.Shapes("Button 1").Select
Selection.Characters.Text = Range("A6").Value
Range("a1").Select
End Sub

permettant de simuler ce qui devrait se passer normalement (à ce que j'ai
pigé)

http://cjoint.com/?hCsXLUjFEj

--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonjour Philippe,


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de
remplacer doevents par application.enableevents=true en fin de procédure
de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub


Malheureusement, ça ne règle pas le pb. La seule chose qui fasse passer
l'affichage à "Liste Ok" , c'est une saisie dans la feuille (y compris
pas sélection via menu déroulant).

Et dans le code de la feuille, la condition étant évaluée en AW3 dont on
récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la
propriété par défaut


J'ai testé ; cela fonctionne effectivement très bien.

Pour revenir à mon "pb" initial (car de mon côté, je continue de
chercher...) : quand on a une "Private Sub Worksheet_Change", qu'est ce
qui se passe "concrétement" lorsqu'on saisie une valeur dans la feuille ?
Autrement dit, à partir de quel "état" cette procédure est-elle activée ?

JP

--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans
une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du
bouton (98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le
bouton !)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le
module de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise
en forme conditionnelle qui met le motif de la cellule en rouge ce
qui "invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le
nom du dessus est ">" à celui de la ligne testée, la formule renvoit
un "1". Si le contenu de la colonne est supérieur à 0 cela signifie
que la plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici
le code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer
le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis
:
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la

feuille

If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question
car je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message
de news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune
instruction correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton
est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur
de D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "",
mais le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir



"Liste Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma
liste ...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP






































Avatar
j-pascal
Bonjour Philippe,

Juste pour dire que pour la "détection" de commentaire(s), c'est résolu.

Merci vraiment pour l'aide précieuse que tu m'as apportée tout au long de ce
fil. Il ne me reste plus qu'à étudier tout ça de près ...

Cordialement

JP

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re j-pascal,
Quelle persévérance !!
J'aime pas qu'on me résiste ;o)))))


Les procédures de feuille, du type Worksheet_qqch(), dont
Worksheet_Change() fait partie sont des procédures évenementielles, qui
permettent de réaliser une action lors de la réalisation d'un évènement
donné.
Dans le cas présent, avec Worksheet_Change(), c'est le changement d'une
valeur dans la feuille qui décenchera la procédure.
Ces procédures sont inhibées par l'instruction
application.enableeventsúlse et rétablies par
application.enableevents=true

Je joins un petit classeur exemple avec une macro de tri lancée par le
bouton

Sub triplage()
'MPFE le 28/07/2007
Application.EnableEvents = False
Range("G1:G23").Select
Selection.Sort Key1:=Range("G1"), Order1:=xlAscending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.EnableEvents = True
[a1] = 2
DoEvents
End Sub

et une macro évenementielle

Private Sub Worksheet_Change(ByVal Target As Range)
'MPFE le 28/07/2007
'La première ligne de commande permet de faire passer la cellule a1 à 1
If Not Intersect(Target, Range("g1:g23")) Is Nothing Then [a1] = 1
'la suite reprend la logique de ton classeur
ActiveSheet.Shapes("Button 1").Select
Selection.Characters.Text = Range("A6").Value
Range("a1").Select
End Sub

permettant de simuler ce qui devrait se passer normalement (à ce que j'ai
pigé)

http://cjoint.com/?hCsXLUjFEj

--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonjour Philippe,


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de
remplacer doevents par application.enableevents=true en fin de procédure
de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub


Malheureusement, ça ne règle pas le pb. La seule chose qui fasse passer
l'affichage à "Liste Ok" , c'est une saisie dans la feuille (y compris
pas sélection via menu déroulant).

Et dans le code de la feuille, la condition étant évaluée en AW3 dont on
récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la
propriété par défaut


J'ai testé ; cela fonctionne effectivement très bien.

Pour revenir à mon "pb" initial (car de mon côté, je continue de
chercher...) : quand on a une "Private Sub Worksheet_Change", qu'est ce
qui se passe "concrétement" lorsqu'on saisie une valeur dans la feuille ?
Autrement dit, à partir de quel "état" cette procédure est-elle activée ?

JP

--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier" dans
une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du
bouton (98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le
bouton !)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le
module de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise
en forme conditionnelle qui met le motif de la cellule en rouge ce
qui "invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si le
nom du dessus est ">" à celui de la ligne testée, la formule renvoit
un "1". Si le contenu de la colonne est supérieur à 0 cela signifie
que la plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés), voici
le code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer
le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu fournis
:
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la

feuille

If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question
car je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message
de news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune
instruction correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton bouton
est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la valeur
de D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "",
mais le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir



"Liste Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma
liste ...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP






































Avatar
Philippe.R
Bonjour j-pascal,
J'ai noté la réponse de Jacky concernant la détection de commentaire ; ça me
servira peut être un jour
En tout cas, tout ça, c'était avec plaisir !
;o)))
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Juste pour dire que pour la "détection" de commentaire(s), c'est résolu.

Merci vraiment pour l'aide précieuse que tu m'as apportée tout au long de
ce fil. Il ne me reste plus qu'à étudier tout ça de près ...

Cordialement

JP

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Re j-pascal,
Quelle persévérance !!
J'aime pas qu'on me résiste ;o)))))


Les procédures de feuille, du type Worksheet_qqch(), dont
Worksheet_Change() fait partie sont des procédures évenementielles, qui
permettent de réaliser une action lors de la réalisation d'un évènement
donné.
Dans le cas présent, avec Worksheet_Change(), c'est le changement d'une
valeur dans la feuille qui décenchera la procédure.
Ces procédures sont inhibées par l'instruction
application.enableeventsúlse et rétablies par
application.enableevents=true

Je joins un petit classeur exemple avec une macro de tri lancée par le
bouton

Sub triplage()
'MPFE le 28/07/2007
Application.EnableEvents = False
Range("G1:G23").Select
Selection.Sort Key1:=Range("G1"), Order1:=xlAscending,
Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Application.EnableEvents = True
[a1] = 2
DoEvents
End Sub

et une macro évenementielle

Private Sub Worksheet_Change(ByVal Target As Range)
'MPFE le 28/07/2007
'La première ligne de commande permet de faire passer la cellule a1 à 1
If Not Intersect(Target, Range("g1:g23")) Is Nothing Then [a1] = 1
'la suite reprend la logique de ton classeur
ActiveSheet.Shapes("Button 1").Select
Selection.Characters.Text = Range("A6").Value
Range("a1").Select
End Sub

permettant de simuler ce qui devrait se passer normalement (à ce que j'ai
pigé)

http://cjoint.com/?hCsXLUjFEj

--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonjour Philippe,


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de news:
%
Bonjour j-pascal,
En relisant le fil, et les messages de LSteph, il serait bon de
remplacer doevents par application.enableevents=true en fin de
procédure de tri :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
application.enableevents=true
calculate
End Sub


Malheureusement, ça ne règle pas le pb. La seule chose qui fasse passer
l'affichage à "Liste Ok" , c'est une saisie dans la feuille (y compris
pas sélection via menu déroulant).

Et dans le code de la feuille, la condition étant évaluée en AW3 dont
on récupère la valeur dans le texte du bouton, ceci devrait suffir :

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)
End Sub

avec un .value derrière la référence du range bien que ce soit la
propriété par défaut


J'ai testé ; cela fonctionne effectivement très bien.

Pour revenir à mon "pb" initial (car de mon côté, je continue de
chercher...) : quand on a une "Private Sub Worksheet_Change", qu'est ce
qui se passe "concrétement" lorsqu'on saisie une valeur dans la feuille
? Autrement dit, à partir de quel "état" cette procédure est-elle
activée ?

JP

--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonsoir,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news: %
Re,
Je vois, du moins je l'espère ;o))
Puisqu'il s'agit du résultat d'un calcul, tente d'ajouter encore
l'instruction calculate avant le doevents

Selection.End(xlDown).offset(1, 0).Select
End If
End If
calculate
doevents
End Sub

Servir !


"a priori" ça ne fonctionne pas ;-(

J'ai fait un essai en mettant les messages "Liste Ok" et "A Trier"
dans une cellule ("AW3")
(qui se change bien en "Liste Ok" après un tri effectué à partir du
bouton (98) ; mais le texte ne se modifie pas sur le bouton !


If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select '(j'ai mis ça pour désélectionner le
bouton !)
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("D6").Select
End If

Je suis un peu perplexe !


JP

Philippe.R
"j-pascal" a écrit dans le message de
news:e%23$
Re Philippe,

"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Re j-pascal,
2 questions encore :
le tri se fait bien dans la feuille qui contiens le Private Sub
Worksheet_Change(ByVal Target As Range) ?


Oui, mais le code du Tri est dans un module "normal" (pas dans le
module de Feuil)

où se trouve l'instruction de passage à "" de D6 ?


La cellule D6 = SI(SOMME(PlageTestTri)=0;"";" >>>") (le bouton se
trouve dans la cellule E6 et en fonction du résultat, j'ai une mise
en forme conditionnelle qui met le motif de la cellule en rouge ce
qui "invite" l'utilisateur à Trier !)

PlageTestTri contient une formule qui teste la colonne de Noms. Si
le nom du dessus est ">" à celui de la ligne testée, la formule
renvoit un "1". Si le contenu de la colonne est supérieur à 0 cela
signifie que la plage doit être triée.
Je sais, c'est un peu tordu, mais ça marche bien (sans recours à une
macro) ;-)


Essaie toujours de glisser l'instruction "doevents" en fin de sub ;
comme ceci :

Selection.End(xlDown).offset(1, 0).Select
End If
End If
doevents
End Sub

histoire de forcer l'exécution du code évenementiel.


Désolé, ça ne fonctionne pas ;-(

JP
--
Philippe.R
"j-pascal" a écrit dans le message de
news:
Bonjour Philippe,

Désolé, j'avais mis le code sur un autre fil (2 sujets liés),
voici le code en question :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant
d'effectuer le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

@+ ?

JP


"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message de
news:
Bonjour,
Voici ce que je lit comme instructions dans le code que tu
fournis :
Private Sub Worksheet_Change(ByVal Target As Range)
'Lorsque un contenu change dans une cellule quelconque de la

feuille

If Range("D6") = " >>>" Then '2
espaces
Si la cellule D6 contient la chaîne " >>>"


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "TRIER ici"
inscrit sur ce bouton le texte "TRIER ici"


Range("D6").Select
sélectionne la cellule D6


Else
sinon


ActiveSheet.Shapes("Button 98").Select
sélectionne le bouton n°98


Selection.Characters.Text = "Liste Ok"
inscrit sur ce bouton le texte "Liste Ok"


Range("D6").Select
sélectionne la cellule D6


End If

End Sub


A aucun moment l'instruction de tri ne figure, d'où ma question
car je suppose qu'une macro est affectée au bouton.
--
Philippe.R
"j-pascal" a écrit dans le message de
news:ue5f$
Bonjour Philippe,

Le tri s'effectue si la cellule "D6" comprend le signe " >>>"
(situé juste à gauche du bouton de TRI) ... :

--------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2
espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If

End Sub

----------------------------------------------------------------

JP



"Philippe.R" <AS_rauphil_at_wanadoo.fr> a écrit dans le message
de news: %
Bonsoir j-pascal,
Comment ton bouton lance t il le tri, je ne vois aucune
instruction correspondant dns le code fourni ?
En revanche, actuellemnt, le chnagement d'intitulé de ton
bouton est lié à un changement de valeur dans la feuille
--
Philippe.R
"j-pascal" a écrit dans le message de
news:%
Bonsoir,

Si j'effectue un tri en appuyant sur le bouton 98 car la
valeur de D6 = "
", le tri s'effectue et donc la valeur de D6 passe à "",
mais le texte
"TRIER ici" reste sur le bouton alors que je devrais avoir



"Liste Ok" !
"Liste Ok" s'affiche bien si j'effectue une saisie dans ma
liste ...

Voici le code :

--------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
Range("D6").Select
End If
End Sub

--------------------------------------------------------------------

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP









































1 2