Passer "à la ligne" par macro

ccdouble6

XLDnaute Occasionnel
Bonjour le forum !!!

Utilisateur d'Excel XP et étant susceptible d'avoir beaucoup de données à saisir, je souhaite savoir s'il y a un moyen de passer "à la ligne" : par exemple si je me trouve en LC8, de me retrouver en L(1)C1, de préférence en pressant la touche Entrée ou autre raccourci accessible.
Une précision : j'aimerais pouvoir conserver l'utilisation des flèches et pouvoir sélectionner "normalement" une cellule de la colonne 9 qui contient des formules.
Donc :
Flèche -> : j'avance normalement sur la ligne
Entrée (ou autre touche spéciale) : je passe à la ligne si je suis en LC8.
Ce souci m'a l'air bien épineux même si je pense que ça peut en arranger plus d'un, si c'est réalisable... :)
Merci d'avance et bon week-end !!!!
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonjour le forum, Catrice, Gorfael,


Gorfael je ne saisis pas bien, ce que tu proposes c'est aussi d'insérer une formule ?? c'est juste une autre formule :confused: par ailleurs pour des soucis de conservation des données lors d'insertion de lignes j'ai vraiment besoin de cette formule OFFSET() (en français la formule DECALER() )
Je me demande si ce type de ligne a sa place dans une SUB ??? il faut peut-être ajouter une expression que j'ignore... D'où peut-être cette erreur 424... Enfin bon je m'y connais pas assez pour dire.. mais merci quand-même !! :)
Bonne journée !
 

Catrice

XLDnaute Barbatruc
Re : Passer "à la ligne" par macro

Bonjour,

Essaye ceci :

Sub Test1()
ColonneDeChangementDeligne = 12
If ActiveCell.Column = ColonneDeChangementDeligne Then
Cells(ActiveCell.Row + 1, 1).Select
Cells(ActiveCell.Row, 4).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Cells(ActiveCell.Row, 5).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Else
'Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
ActiveCell.Offset(0, 1).Select
End If
End Sub


A tester dans la Feuil2 du fichier joint.
 

Pièces jointes

  • retour à la ligne.xls
    30 KB · Affichages: 55
  • retour à la ligne.xls
    30 KB · Affichages: 60
  • retour à la ligne.xls
    30 KB · Affichages: 62

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

:) Merci Catrice !!

Cette formulation à la place de Target.Offset() est plus adaptée alors, en fait je ne connais pas la différence : quand peut-on utiliser Offset() ?? :confused:
je vais hélas manquer de temps pour me reconnecter aujourd'hui, je vais tester et je te tiens au courant, j'espère pouvoir me reconnecter dans la semaine ou au pire samedi.
Merci encore et bonne soirée !!!
 

Catrice

XLDnaute Barbatruc
Re : Passer "à la ligne" par macro

Bonsoir,

On peut utiliser Offet par exemple de la façon suivante :
ActiveCell.Offset(0, 3).FormulaR1C1 = "=OFFSET(RC,-1,0)"
ActiveCell.Offset(0, 4).FormulaR1C1 = "=OFFSET(RC,-1,0)"

En revanche, "Target" n'existe pas ... donc ça ne fonctionne pas.

Voir fichier joint
 

Pièces jointes

  • retour à la ligne.xls
    28 KB · Affichages: 62
  • retour à la ligne.xls
    28 KB · Affichages: 61
  • retour à la ligne.xls
    28 KB · Affichages: 60

abc

XLDnaute Impliqué
Re : Passer "à la ligne" par macro

Bonsoir,
si j'ai compris,solution avec un double clic ou un racourci clavier
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Application.Goto REFERENCE:="R300C2"
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Range("a1").Select
End Sub
A +
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonsoir le forum, ABC, Catrice,

Merci ABC pour cette alternative je retiens.
Catrice j'ai donc testé la modif que tu m'a proposé : CA MARCHE C'EST ENORME !!! :D franchement merci beaucoup avec ça la rapidité de saisie est vraiment impressionnante :)

Juste un détail : je pense que c'est possible de démultiplier les conditions en utilisant plusieurs IF ou un CASE OF non?
Du genre (juste pour le raisonnement) :
Si colonnedechangement = 12
alors renvoyer ICI.
Si colonnedechangement = 14
alors renvoyer là-bas.

Donc si je tape Entrée en colonne 14 ça doit marcher :) je vais m'y mettre et je te tiens au courant si j'ai un souci...

Merci beaucoup beaucoup et bonne soirée !!!!
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonjour le forum, Catrice,

Euh le résultat de ma tentative ne s'est pas fait attendre :( la touche Entrée ne répond pas aux injonctions. Pourtant je pense avoir soigné la syntaxe mais visiblement j'ai dû me planter quelque part..
Tu peux m'éclairer s'il te plaît?? merci d'avance et bonne fin de dimanche!! ;)

voici mon texte (raccourci à 2 cas de figure, en tout y en a 4 d'où le choix du "case" plutot que "IF") :

Sub Redirige()
Select Case Selection.Value
'le 1er case reprend ce que tu m'as donné
Case ActiveCell.Column = 13
Cells(ActiveCell.Row + 1, 3).Select
Cells(ActiveCell.Row, 6).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Cells(ActiveCell.Row, 7).FormulaR1C1 = "=OFFSET(RC,-1,0)"

Case ActiveCell.Column = 16
Cells(ActiveCell.Row, 70).Select
End Select
ActiveCell.Offset(0, 1).Select
End Sub
 

Catrice

XLDnaute Barbatruc
Re : Passer "à la ligne" par macro

Bonsoir,

Je n'ai pas eu le temps de tester mais je dirai plutot quelque chose du genre :

Sub Redirige()
Select Case Selection.Column
Case 13
Cells(ActiveCell.Row + 1, 3).Select
Cells(ActiveCell.Row, 6).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Cells(ActiveCell.Row, 7).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Case 16
Cells(ActiveCell.Row, 70).Select
End Select
ActiveCell.Offset(0, 1).Select
End Sub
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonjour Catrice !!

C'est parfait !! :D ça marche nickel dis donc je me déplace dans le tableau à une vitesse impressionnante maintenant...
Merci énormément , bonne fin de week end et à bientôt !! :)
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonsoir le forum, Catrice,

Tu as passé de bonnes vacances ??
Une rentrée en accompagnant une autre, me voilà de retour dslé, avec un petit souci qui je pense est d'ordre syntaxique...
Tu m'avais expliqué précedemment comment faire pour dire à la macro à quelle feuille s'appliquer et à quelle feuille ne pas s'appliquer.
Mon fichier comporte pas mal de feuilles et je souhaite parvenir à placer les conditions dans un Select case.
Voici ce que j'obtiens après ma modif (résumé ici car il y a beaucoup plus de feuilles), les 2 SUB redirige1 et redirige2 sont dans un module à part.
Il doit surement y avoir une erreur qqpart car les Sub Redirige1 et Redirige2 ne répondent pas : il ne se passe strictement RIEN lorsque je tape 'Entrée' où que ce soit.


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Feuil3"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil12"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil5"
Application.OnKey "{RETURN}", "Redirige2"
End Select
End Sub
_________________________________________________________
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Select Case Sh.Name
Case "Feuil1"
Application.OnKey "{RETURN}"
Case "Feuil2"
Application.OnKey "{RETURN}"
Case "Feuil4"
Application.OnKey "{RETURN}"
End Select
End Sub


Est-ce que tu vois qqchose qui cloche?? ou qq'un du forum? Je suis ouvert à toute suggestion :)
Merci d'avance pour votre éclairage,
Bonne soirée !!
 

Catrice

XLDnaute Barbatruc
Re : Passer "à la ligne" par macro

Bonsoir,

Ca va bien, les vacances se sont bien passées.

Je n'ai pas tout testé mais je crois que dans ton exemple, tu ne geres pas le WorkBook_Open.
A l'ouverture du fichier, il n'y a pas d'evenement SheetActivate => pas de macro.

Ci-dessous une solution que j'ai simulée et qui fonctionne.
A tester dans ton environnement.
Cette solution utilise des sous-programmes avec parametres.

Private Sub Workbook_Open()
Entree ActiveSheet
End Sub

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

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sortie Sh
End Sub

Sub Entree(Arg1)
Select Case Arg1.Name
Case "Feuil1"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil2"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil3"
Application.OnKey "{RETURN}", "Redirige2"
End Select
End Sub

Sub Sortie(Arg2)
Select Case Arg2.Name
Case "Feuil1"
Application.OnKey "{RETURN}"
Case "Feuil2"
Application.OnKey "{RETURN}"
Case "Feuil3"
Application.OnKey "{RETURN}"
End Select
End Sub
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonjour Catrice, le forum,

Merci beaucoup pour ta solution, c'est vrai que j'avais complètement zappé le "open" dans le texte.. on doit toucher au but je pense mais... il doit y avoir un souci car la touche Entrée ne provoque aucune redirection, qqsoit la feuille :confused:

Voici un petit récapitulatif qui j'espère t'aidera à voir où ça peut clocher :

--------------------------------------------------
Voici donc ce que j'ai tapé dans "ThisWorkbook" :

Private Sub Workbook_Open()
Entree ActiveSheet
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Entree Sh
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Sortie Sh
End Sub

Sub Entree(Arg1)
Select Case Arg1.Name
Case "Feuil3"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil12"
Application.OnKey "{RETURN}", "Redirige1"
Case "Feuil5"
Application.OnKey "{RETURN}", "Redirige2"
End Select
End Sub

Sub Sortie(Arg2)
'Toutes les feuilles où aucune macro Redirige ne s'applique
Select Case Arg2.Name
Case "Feuil1"
Application.OnKey "{RETURN}"
Case "Feuil2"
Application.OnKey "{RETURN}"
Case "Feuil4"
Application.OnKey "{RETURN}"
Case "Feuil6"
Application.OnKey "{RETURN}"
Case "Feuil7"
Application.OnKey "{RETURN}"
Case "Feuil8"
Application.OnKey "{RETURN}"
Case "Feuil9"
Application.OnKey "{RETURN}"
Case "Feuil10"
Application.OnKey "{RETURN}"
Case "Feuil11"
Application.OnKey "{RETURN}"
End Select
End Sub

------------------------------------------------------
Dans le module 3 figurent les deux Sub Redirige1 et 2 :

Sub Redirige1()
Select Case Selection.Column
Case 13
Cells(ActiveCell.Row + 1, 2).Select
Case 16
Cells(ActiveCell.Row, 63).Select
Case 17
Cells(ActiveCell.Row, 76).Select
Case 18
Cells(ActiveCell.Row, 99).Select
Case 19
Cells(ActiveCell.Row, 136).Select
Case 20
Cells(ActiveCell.Row, 165).Select
End Select
ActiveCell.Offset(0, 1).Select
End Sub

Sub Redirige2()
Select Case Selection.Column
Case 2
Cells(ActiveCell.Row, 18).Select
Case 3
Cells(ActiveCell.Row, 28).Select
Case 4
Cells(ActiveCell.Row, 38).Select
Case 5
Cells(ActiveCell.Row, 48).Select
Case 6
Cells(ActiveCell.Row, 58).Select
End Select
ActiveCell.Offset(0, 1).Select
End Sub

--------------------------------------------

Il doit y avoir un noeud qqpart mais je vois pas... si tu peux jeter un coup d'oeil.. merci d'avance !!! :)
Bonne fin de journée !!
 

ccdouble6

XLDnaute Occasionnel
Re : Passer "à la ligne" par macro

Bonsoir le forum, Catrice,

Est-ce quelqu'un peut me dire où j'ai pu faire une erreur dans le texte ci-dessous ?? Je trouve vraiment pas, j'ai pourtant suivi tout ce que je savais à la lettre... encore que je suis bien loin de maîtriser :(
Merci d'avance !! ça me permettrait vraiment d'aller plus loin (et plus vite) dans mon tableau ;)
Bonne soirée !
ccdouble6.
 

Catrice

XLDnaute Barbatruc
Re : Passer "à la ligne" par macro

Bonjour,

Chez moi ça fonctionne ...
Dans le fichier joint, j'ai modifié le code pour que les touches ENTRER du pavé Numérique et ENTRER du clavier soient prises en compte.
 

Pièces jointes

  • passer à la ligne.zip
    12.4 KB · Affichages: 22
  • passer à la ligne.zip
    12.4 KB · Affichages: 23
  • passer à la ligne.zip
    12.4 KB · Affichages: 19

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 896
Messages
2 093 388
Membres
105 716
dernier inscrit
jrmdprt