|
Publicité | ||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Denis Schneider Inscription : mars 2010 Messages : 1 ![]() |
Bonjour tout le monde,
Après avoir parcouru le forum et lu le tutoriel sur l'événement Worksheet_Change, j'avoue que je n'ai toujours pas bien compris comment utiliser correctement le paramètre Target. Je crois même avoir vu des procédures qui n'utilisent pas ce paramètre, ce qui me semble pourtant nécessaire, non ? Donc ma première question serait de me donner un exemple TRES basique afin que je comprenne comment il est utilisé. Ensuite, je voulais votre avis sur ma macro qui justement utilise cet événement : Code :
J'ai pensé à rajouter l'objet EnableEvents, mais j'avoue que je ne sais pas s'il est bien imbriqué dans la procédure... Evidemment, ma macro ne marche pas... Je suis un peu embêté... Merci d'avance pour votre aide Denis Dernière modification par Pierre Fauconnier ; 14/03/2010 à 15h45. Motif: Balises de code svp (sélection du code puis bouton #au dessus du message). Merci |
||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() |
La procédure évènementielle "Worksheet_Change" ne se produit que lorsqu'il y a un changement dans la feuille de calcul (dans laquelle se trouve la procédure).
Donc si on modifie la cellule "AZ123" sur la feuille, le code dans la procédure "Worksheet_Change" est exécuté. Dans notre cas, si la cellule "O43" contient une valeur (IF ou RMF) alors la feuille active devient la feuille "feuille numéro x" à chaque modification sur la feuille de départ. Pas pratique ! Il ne faut donc appliquer le code que si la dernière cellule changée est "O43". On est d'accord ? Et comment connaitre la dernière cellule ou plage modifiée ? Par la valeur de "Target". Dans ce cas je mettrais un code du genre : ESVBA |
|
|
00
|
|
|
#3 | ||||||||
|
Membre Expert
![]() Inscription : juillet 2007 Messages : 2 134 ![]() |
Salut Denisrv75 et le forum
Juste une rélexion : si un code ne fonctionne pas comme tu l'espère, comment doit-on trouver son fonctionnement, si on ne sait même pas réellement le but à atteindre et qu'on ne connaît pas "l'erreur" qu'il génère ? Tout ce qui est évident... ne l'est que pour celui qui travaille avec le fichier et la macro. Rien n'est évident. Ce qui est le plus difficile à démontrer en maths est toujours ce qui te semble évident. Worksheet_Change, à un paramètre système appelé Target. Il contient la ou les cellules (dans le cas d'un coller ou effacement) qui sont passées en mode édition (qui ont été modifiées, même si on a rien changé). Citation:
Citation:
Code :
Code :
Application.EnableEvents : Bloque les évènements quand il est à False. À utiliser avec précaution : c'est une instruction de portée "Excel" et si tu as un autre fichier d'ouvert, il est concerné. Ou tout autre tant qu'Excel n'est pas fermé ou que EnableEvents est remis à True. À case de ça, je m'oblige à faire une gestion d'erreur avec une seule sortie, qui remet les évènement en route. L'exemple typique, c'est une macro change qui augmente de 1 une cellule : Target=Target+1 La cellule lance la macro qui modifie la cellule qui lance la macro etc... Sur ta macro : EnableEvents n'a pas besoin d'être bloqué puisqu'on ne touche pas à la feuille. 2 conditions : O43="IF" ou O43="RMF". Donc, ElseIf semble indiqué. Sauf que moi, j'en vois un supplémentaire : O43<>IF" AND O43<>"RMF" (un simple Else dans ce cas suffit). En informatique, je ne laisse aucune zone de flou dans mes codes. Si tu mets une feuille en visible... il me semble qu'avant elle était invisible. Donc le code devrait prévoir de remettre la feuille 3 en invisible si c'est la 4 qui est mise en visible ou inversement. Mettre en visible me semble vouloir dire qu'on va travailler sur la feuille. Or les modules lié au feuilles n'autorisent pas ça. Au lieu du module et de Worksheet_Change, j'utiliserai le module ThisWorkBook et la macro Workbook_SheetChange, qui admet deux variable système Sh qui représente la feuille qui subit une modif et Target les cellules modifiées. Un exemple : Code :
|
||||||||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Michel Développeur Web Inscription : décembre 2007 Messages : 2 ![]() |
Code :
|
||
|
|
00
|
|
|
#5 | |||
|
Invité de passage
![]() Michel Développeur Web Inscription : décembre 2007 Messages : 2 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : juillet 2007 Messages : 2 134 ![]() |
Salut micanto et le forum
Ta seconde proposition : Tu fais une préparation de "boucle" (Vide->IF->RMF->Vide->etc...) Avec Worksheet_BeforeDoubleClick Tu entres dans la cellule pour modifier : Il faudrait mettre un Cancel=True pour éviter de passer un mode édition. Juste une une remarque : tu supposes que "Feuille numero 3" est en position 3 et que "Feuille numero 4" et en position 4. Et si ce n'est pas le cas ? Surtout que le questionneur est en plein apprentissage ! Ce n'est pas une critique, juste une remarque. Et un nouveau venu sur le forum qui commence par répondre au lieu de questionner est forcément bienvenu à bras ouverts ![]() A+ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com