|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Invité régulier
![]() Date d'inscription: novembre 2009
Messages: 18
|
Bonjour tout le monde
J'ai un tableau avec 34 colonnes (nombre de ligne de 14 jusqu'à 600, les lignes 1 à 13 sont pour les titres) . Toutes les colones contiennent des valeurs numérique ou alphanumérique. Les colonnes 1 a 19 sont des colonnes sources dans lesquelles l'utilisateur entre des données. Les colonnes 20 à 34 sont des valeurs qui résultent de calculs par une Macro. Dans la feuille où se trouve le tableau, j'ai une Macro sous Worksheet Change. Cette macro appel une routine dans un module pour refaire le calcul des cellules 20 à 34 pour la ligne où se trouve l'ActiveCell, lorsque'une valeur change dans une des colonnes 1 à 19. Deux des colonnes 7 et 11 contiennent des barres déroulantes dans chacune des cellules. Lorsque nous changeons une valeur dans la barre déroulante, le curseur demeure dans la cellule où le changement a été fait. Dans les autres colonne, lorsqu'un changement est fait et que l'utilisateur presse sur Return la cellule active deviens Ligne + 1. Donc lorsque j'appel la routine pour faire les calculs, je dois envoyer Ligne - 1. Le problème est que si l'utilisateur presse sur la flèche de droite ou gauche au lieu de Return la valeur Ligne ne tient plus. Ma question sans faire un Userform comment puis-je figer la cellule sur un Return ou comment voyez-vous la solution. Merci |
|
|
|
|
|
#2 (permalink) |
|
Expert Confirmé
![]() |
Salut
Tout simplement en utilisant le paramètre Target transmis a Worksheet Change, Target représente la ou les cellule(s) modifiée(s), donc au lieu d'utiliser Activecell, tu utilises simplement Target. A++ Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
|
|
|
|
|
#4 (permalink) |
![]() |
Bonjour
C'est Excel qui te donne la ligne, il suffit d'interroger cette variable Target. Ex : Code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) MsgBox Target.Address End Sub
__________________
En cas de questions techniques par MP ou message visiteur ![]() Vous pouvez consultez mes articles sur Access et PowerPoint Si vous avez des réalisations à faire sur le pack Office Découvrez les nouveautés de PowerPoint 2010 Utilisez les pièces jointes avec parcimonie. |
|
|
|
|
#6 (permalink) |
|
Expert Confirmé
![]() |
P. JOCHMANS t'as juste donné un exemple pour que tu vois comment utiliser Target, mais msgbox effectivement ne sert qu'a afficher un message a l'ecran.
Dans ton code si tu utilise par exemple Code :
LigneEnCours = ActiveCell.row
Code :
LigneEnCours = Target.row
Dans la procedure Code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Imagine que tu change le contenu de la cellule G5, se faisant cela déclenche l'évènement Change du WorkSheet et exécute le code qu'il contient, ici Target pointera la cellule G5. Target.row te retournera donc 5 et Target.column retournera 7 (colonne G, la 7eme colonne), Target.value représente le contenu de la cellule G5 etc... voir les propriété de l'objet Range dans l'aide VBA. a++ Qwaz
__________________
MagicQwaz := Harry Potter la baguette en moins ![]() Le méchant Qwaz sur Msn ... inutile de me rajouter sur msn pour que je fasse votre boulot (les concernés sont au courant, les autres relax Le monde dans lequel on vit HammerFest Score PowerBall Gyroscope Green : 11847 |
|
|
|
|
|
![]() |
||
[XL-2007] Worksheet / Change retenuir a position de l'Activecell sur un Return
|
||
| Outils de la discussion | |
|
|