forcer le revoi à une ligne en dessous

  • Initiateur de la discussion Initiateur de la discussion apt
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apt

XLDnaute Impliqué
Bonsoir à tous,

Pour forcer le retour à une ligne en dessous, j'ai utilisé ce code :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub

Application.EnableEvents = False
    'Si la touche flèche bas est pressée alors retour à la ligne
    If Application.SendKeys("{Down}") Then
    Target.Offset(1, -3).Select
Application.EnableEvents = True

End Sub

Mais une erreur est déclenchée.

Alors comment intercepter la pression de la touche flèche bas/droite pour dire à Excel d'aller à la premiere cellule d'une ligne en dessous ?

Merci d'avance.
 
Re : forcer le revoi à une ligne en dessous

bonjour apt🙂🙂
a mon avis il vaut mieux utiliser OnKey
SendKeys beaucoup moins fiable!!!
exemple pour la colonne 3
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Then Exit Sub
Application.OnKey Key:="{Down}", Procedure:="es"
End Sub

dans un module standard appel la macro es


Code:
Sub es()
Selection.Offset(1, -2).Select
Application.OnKey Key:="{Down}"
End Sub

tu remarques que je mets pas -3 autrement je genere une erreur normal
de plus je retabli la fonction de la touche deplacement par 1
 
Re : forcer le revoi à une ligne en dessous

Bonjour apt, Laetitia 🙂

Hum... 😕

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
Application.EnableEvents = False 'inutile si pas de macro SelectionChange
Target.Offset(1, -2).Select
Application.EnableEvents = True
End Sub
Edit : éventuellement bien sûr un autre test comme :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 3 Or Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
Application.EnableEvents = False 'inutile si pas de macro SelectionChange
Target.Offset(1, -2).Select
Application.EnableEvents = True
End Sub
A+
 
Dernière édition:
Re : forcer le revoi à une ligne en dessous

bonjour apt🙂 ,job🙂🙂
pas bien simple ce que tu cherches a faire??

quand tu ecris
Code:
If Target.Column = 3 And Target.Count = 1 Then
et que tu utilise
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

action ce declenche au moment ou tu selectionne une cellule dans la colonne 3 & non quand tu changes une valeur.... la dessus on est d'accord???
Code:
If Application.ActiveCell.Offset(1, -1).Value = "" Then
pour moi correspond a la colonne b et non a la colonne a
Si la premiere cellule de la nouvelle ligne est vide

autrement

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 And Target.Offset(1, -1) = "" Then
Application.OnKey "{RIGHT}", "Retour_ligne"
Application.OnKey "{Down}", "Retour_ligne"
Else
Application.OnKey "{RIGHT}"
Application.OnKey "{DOWN}"
End If
End Sub

a voir ??


Code:
Sub Retour_ligne()
Selection.Offset(1, -1).Select
Application.OnKey "{RIGHT}"
Application.OnKey "{DOWN}"
End Sub
 
Re : forcer le revoi à une ligne en dessous

Bonjour apt, Laetitia, le forum,

En effet le problème est plus compliqué qu'on peut le penser.

Voir le fichier joint et les macros dans Feuil1, ThisWorkbook et Module1.

Pendant qu'on y était j'ai traité les 4 touches de direction.

Edit : enregistrez d'abord le fichier sur le bureau...

A+
 

Pièces jointes

Re : forcer le revoi à une ligne en dessous

re,
si colonne A & non colonne B
je resterais sur un code a peu prés identique

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
If Target.Offset(1, -2) = "" Then
Application.OnKey "{RIGHT}", "Retour_ligne"
Application.OnKey "{Down}", "Retour_ligne"
End If: End If
End Sub

code module

Code:
Sub Retour_ligne()
Selection.Offset(1, -2).Select
Application.OnKey "{RIGHT}"
Application.OnKey "{DOWN}"
End Sub

mais bon!!! le code de l'ami job🙂🙂🙂 bien plus complet
gere les 4 touches
de plus en cas de plantage pour raisons x avec excel on sais jamais surtout quand on bidouille les attributions des touches
son code permet de retabir attributions des touches seulement en changeant de feuille
c'est parfait🙂🙂 toujours trés contente de te croiser🙂🙂
 
Re : forcer le revoi à une ligne en dessous

Bonjour apt, Laetitia, le forum,

Je crois comprendre seulement maintenant ce que notre ami désire.

Je me cite :

Sélectionner une cellule en colonne C puis appuyer sur l'une des touches DROIT ou BAS
Si la cellule du dessous est vide, contrôle de ces touches :
- en partant de cette cellule vide, déplacement de la sélection vers la gauche tant qu'elle est vide

D'où cette macro :

Code:
Sub RetourLigne()
Dim R As Range, n As Byte
Set R = ActiveCell.Offset(1, -2).Resize(, 3)
n = Switch(R.Cells(2) <> "", 3, R.Cells(1) <> "", 2, True, 1)
R.Cells(n).Select
End Sub
Fichier (2).

Edit : une variante pour la macro avec le fichier (3) :

Code:
Sub RetourLigne()
ActiveCell.Offset(1).End(xlToLeft).Select
If ActiveCell <> "" Then ActiveCell.Offset(, 1).Select
End Sub

A+
 

Pièces jointes

Dernière édition:
Re : forcer le revoi à une ligne en dessous

Bonjour Laetitia, job75, le forum,

Merci de vos réponses.

job75 -> Ton premier fichier répond bien à ce que je cherche

Parce que le traitement des touches n'est déclenché que si on est sur la dernière cellule ($C$n avec n = numéro de ligne) de la dernière ligne remplie.

Et si un utilisateur veut se déplacer une colonne à droite (flèche droite) ou se déplacer une cellule en bas (flèche bas), là on l'oblige à se positionner sur la première cellule vide ($A$n+1 avec n = numéro de ligne) en bas d'une ligne (c'est normal qu'elle soit vide puisque c'est une nouvelle ligne).

Dans le reste du tableau (lignes remplies), les 2 touches de direction concernées (droite + bas) sont rétablies à leur fonctionnement normal.

Mais j’ai du mal à comprendre le code du premier fichier RetourLigne(1).
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

L
Réponses
35
Affichages
3 K
Léraud Florian
L
Retour