Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/02/2010, 17h51   #1
Membre du Club
 
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 61
Points : 61
Par défaut Worksheet / Change retenuir a position de l'Activecell sur un Return

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
Bugzy1963 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 19h06   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 20h12   #3
Membre du Club
 
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 61
Points : 61
EN paramètre j'ai (ByVal Target As Range)

Comment puis-je connaitre la ligne ou se trouve "Target"
Bugzy1963 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 20h18   #4
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 168
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 43
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 168
Points : 29 876
Points : 29 876
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

C'est Excel qui te donne la ligne, il suffit d'interroger cette variable Target.

Ex :

Code :
1
2
3
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    MsgBox Target.Address
End Sub
Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 20h23   #5
Membre du Club
 
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 61
Points : 61
Désolé de mon ignorance, mais je n'ai jamais travaillé les msgbox autrement que pour afficher un message Msgbox(" ").

Comment puis-je soutirer la valeur de la ligne du msgbox.
Bugzy1963 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2010, 20h57   #6
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 431
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 31
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 431
Points : 4 042
Points : 4 042
Envoyer un message via MSN à Qwazerty
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
Il te suffit de mettre
Code :
LigneEnCours = Target.row
Activecell comme Target sont tous 2 des objets de type Range, ils représentent donc tous les 2 une cellule ou une plage de cellule (Voir l'aide sur Range).

Dans la procedure
Code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target représente la ou les cellules qui viennent d'être modifiées

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 monde dans lequel on vit
HammerFest
Score PowerBall Gyroscope Green : 11847
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web