Déplacement du curseur

cogestia

XLDnaute Nouveau
Sur la touche "entrée", comment déplacer automatiquement mon curseur de droite à gauche dans une plage de cellules déterminée et seulement dans cette plage alors que la configuration de ma souris est réglée pour se déplacer de haut en bas ??

Bien entendu, sans modifier la configuration de ma souris.

Merci de vos réponses.
 

Gelinotte

XLDnaute Accro
Re : Déplacement du curseur

Bonjour,

Si la proposition de Rachid ne te convient pas.

En VBE, colle dans la feuille concernée :
Disons que nous parlons de la plage F10:M44 à tout hasard ...

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      ' disons pour la plage F10:M44
   If Not Intersect(ActiveCell, Range("F10:M44")) Is Nothing Then
      Application.MoveAfterReturnDirection = xlToLeft
   Else
      Application.MoveAfterReturnDirection = xlDown
   End If
End Sub


G
 

job75

XLDnaute Barbatruc
Re : Déplacement du curseur

Bonsoir à tous,

L'idée de Gelinotte est la bonne mais il faut peaufiner.

1) Nommer Plage la plage concernée.

2) Placer dans ThisWorkbook :

Code:
Private Sub Workbook_Activate()
Dim r As Range
On Error Resume Next
Set r = Intersect(ActiveCell, [Plage])
If Not r Is Nothing Then Application.MoveAfterReturnDirection = xlToLeft
End Sub

Private Sub Workbook_Deactivate()
Application.MoveAfterReturnDirection = xlDown
End Sub
3) Placer dans le code de la feuille contenant Plage :

Code:
Private Sub Worksheet_Activate()
If Not Intersect(ActiveCell, [Plage]) Is Nothing _
  Then Application.MoveAfterReturnDirection = xlToLeft
End Sub

Private Sub Worksheet_Deactivate()
Application.MoveAfterReturnDirection = xlDown
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim r As Range
Set r = Intersect(ActiveCell, [Plage])
Application.MoveAfterReturnDirection = IIf(r Is Nothing, xlDown, xlToLeft)
End Sub
Bonne nuit et A+
 

cogestia

XLDnaute Nouveau
Re : Déplacement du curseur

Bonjour,

Si la proposition de Rachid ne te convient pas.

En VBE, colle dans la feuille concernée :
Disons que nous parlons de la plage F10:M44 à tout hasard ...

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      ' disons pour la plage F10:M44
   If Not Intersect(ActiveCell, Range("F10:M44")) Is Nothing Then
      Application.MoveAfterReturnDirection = xlToLeft
   Else
      Application.MoveAfterReturnDirection = xlDown
   End If
End Sub


G

Le problème c'est que cette feuille de calcul sera mise entre des mains de personnes qui ne savent pas utiliser Excel, c'est pourquoi la 1ère solution ne me convient pas.

Quand à la 2ème, c'est moi le béotien car je ne sais même pas comment accéder à VBA !!

Donc si tu pouvait me donner le chemin complet, cela serait formidable.
 

Gelinotte

XLDnaute Accro
Re : Déplacement du curseur

Bonsoir Job75,

En tant que Gélinotte, j'ai un petit cerveau. Je ne comprends donc pas tout.

L'utilisation d'une plage est une excellente amélioration surtout qu'on pourrait avoir un champ nommé Plage dans plusieurs feuilles différentes.

Mais de tout ton code, je n'ai conservé que la dernière partie et le déplacement se fait bien.

J'essaie de compredre à quoi peut servir le reste. Sûrement des subtilités qui m'échappent.

Dans chacune des feuilles où l'on veut l'utiliser
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Call Deplacement
End Sub

Dans le Module1
Code:
Sub Deplacement()
Dim r As Range
With ActiveSheet
   Set r = Intersect(ActiveCell, [Plage])
   Application.MoveAfterReturnDirection = IIf(r Is Nothing, xlDown, xlToLeft)
End With
End Sub


G
 

Pièces jointes

  • Deplacement(1).xlsm
    17 KB · Affichages: 55

job75

XLDnaute Barbatruc
Re : Déplacement du curseur

Bonjour Gelinotte, le forum,

J'essaie de compredre à quoi peut servir le reste.

Supposons que la cellule active soit dans Plage, comme dans le fichier joint.

Quand on ouvre/active le fichier il faut que Application.MoveAfterReturnDirection prenne la valeur xlToLeft.

Et quand on change de feuille ou de classeur que cette propriété prenne la valeur xlDown.

Idem si l'on ferme le classeur.

A+
 

Pièces jointes

  • Touche Entrée(1).xls
    35 KB · Affichages: 50

job75

XLDnaute Barbatruc
Re : Déplacement du curseur

Re,

Avec 2 zones Plage1 en Feuil1 et Plage2 en Feuil2 :

Code:
Private Sub Workbook_Activate()
Dim r1 As Range, r2 As Range
On Error Resume Next
Set r1 = Intersect(ActiveCell, [Plage1])
Set r2 = Intersect(ActiveCell, [Plage2])
If Not (r1 Is Nothing And r2 Is Nothing) Then _
  Application.MoveAfterReturnDirection = xlToLeft
End Sub
Fichier (2).

A+
 

Pièces jointes

  • Touche Entrée(2).xls
    44.5 KB · Affichages: 44

job75

XLDnaute Barbatruc
Re : Déplacement du curseur

Re,

Avec cette version (3) multi-feuilles et multi-plages tout le code est dans ThisWorkbook :

Code:
Private Sub Workbook_Activate()
Direction ActiveSheet
End Sub

Private Sub Workbook_Deactivate()
Application.MoveAfterReturnDirection = xlDown
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Direction Sh
End Sub

Private Sub WorkBook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Direction Sh
End Sub

Sub Direction(Sh As Object)
Dim nom As Name, r As Range
Application.MoveAfterReturnDirection = xlDown
For Each nom In Me.Names
  If nom.Name Like "Plage#*" Then
    If Evaluate(nom.Name).Parent.Name = Sh.Name Then
      Set r = Intersect(ActiveCell, Evaluate(nom.Name))
      If Not r Is Nothing Then Application.MoveAfterReturnDirection = xlToLeft
      Exit For
    End If
  End If
Next
End Sub
A l'attention de cogestia :

- touches Alt+F11 pour aller dans VBA

- dans VBA en haut à gauche double-clic sur ThisWorkbook

A+
 

Pièces jointes

  • Touche Entrée(3).xls
    43 KB · Affichages: 48
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib