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 !!!!
 

JCGL

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

Bonsoir,

Tu peux utiliser les SendKeys (de mémoire pour retourner en A1 :
Code:
SendKeys "{home}"

A vérifier dans l'aide VB en tapant SendKeys dans la barre de recherche

A+
 

Gorfael

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

ccdouble6 à dit:
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 !!!!
Salut
je ne comprend pas tellement le problème : tu as déjà 2 moyens à ta disposition :
- tu sélectionnes tes lignes et tu utilises la touche Tab(Tabulation)
- Tu utilses le grille/formulaires du menu données
A+
 

ccdouble6

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

Bonjour Gorfael, JCGL, le forum,

Je me suis surement mal expliqué.. en tout cas je vais tester vos solutions ;)

Gorfael je ne cherche pas à sélectionner des lignes, je veux juste, en me trouvant mettons en L11C8 passer direct en L12C1 rapidement et simplement, mais avec un mécanisme qui puisse marcher quelque soit la ligne :cool:
Je vais donc jeter un oeil :
- dans le grille/formulaires du menu données
- dans l'aide VB ce qu'est un Sendkey, je ne vois pas du tout ce que c'est.. un genre de lien hypertexte ?

Je vous tiens au courant, merci beaucoup pour ces solutions.
Bonne soirée !!!
 

Catrice

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

Bonsoir,

Ci-joint un exemple où les fleches permettent d'aller à droite et ENTRER renvoie à la premiere colonne ligne du dessous.
 

Pièces jointes

  • retour à la ligne.xls
    22 KB · Affichages: 150
  • retour à la ligne.xls
    22 KB · Affichages: 149
  • retour à la ligne.xls
    22 KB · Affichages: 151

ccdouble6

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

Bonjour le forum !!

Et un grand merci Catrice, c'est un très grand pas de fait :cool:
Toutefois à quoi sert le bouton exactement ?

Est-il possible de ne passer à la ligne que si on se trouve dans UNE colonne en particulier ? Le système doit bien sur marcher quelque soit la ligne où on est mais l'idéal serait qu'il ne fonctionne que si on tape ENTREE à droite du tableau, dans la colonne 12 par exemple, et pas avant.
Je vais voir avec cette macro ce que ça donne si je mets un IF THEN.
Merci beaucoup et bonne journée !!
 

Catrice

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

Bonjour,

Le bouton sert à "mettre en mémoire" (activer la fonctionnalité) le fait de revenir à la ligne lorsque'on fait ENTRER.
Il a un role pédagogique.

Si tu veux que le document ait toujours cette propriété, il suffit d'insérer le code suivant (qui s'executera à chaque ouverture du classeur) :

Private Sub Workbook_Open()
Application.OnKey "{RETURN}", "Test1"
End Sub
Si on traduit un peu, "à chaque fois qu'on appuies sur ENTRER executer Test1"

Dans Test1 il y a :
Sub Test1()
Cells(ActiveCell.Row + 1, 1).Select
End Sub
Si on traduit aussi "Selectionne la cellule dont la colonne est tjs 1 et dont la ligne est celle de la ligne active"

Voir fichier joint.
 

Pièces jointes

  • retour à la ligne.xls
    19 KB · Affichages: 94
  • retour à la ligne.xls
    19 KB · Affichages: 93
  • retour à la ligne.xls
    19 KB · Affichages: 92

ccdouble6

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

Bonjour le forum, Catrice, Jean-Marie,

Merci à tous deux, je vais voir les fichiers que vous proposez. Dslé pour le délai de réponse.
Je vous tiens au courant dès que je peux voir.
Bonne soirée !!!
 

ccdouble6

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

Bonsoir le forum, Catrice, JeanMarie,

Alors j'ai regardé les fichiers joints que vous proposez, mais le problème reste toujours présent.
- JeanMarie je n'ai pas bien compris où veut en venir le fichier que tu m'a remis... :confused:
- Catrice je ne vois pas la différence avec le premier fichier que tu m'as proposé : le curseur revient bien à la colonne A avec la touche 'Entrée', mais quelque soit la colonne où je me trouve et j'aimerais savoir comment limiter l'action à la présence de la sélection dans la colonne 12 par exemple, ce qui donnerait :
* Quelque part dans la colonne 12 et 'Entrée' : retour en colonne A ligne suivante.
* Dans une autre colonne et 'Entrée' : rien ne se passe.
j'ai essayé de trafiquer la macro en ajoutant un IF THEN mais ça ne donne rien...
Si vous pouvez me donner des précisions... je vous remercie par avance et vous souhaite une bonne soirée.

PS: désolé encore pour le délai, mes possibilités de connexion restent très limitées...
 

Catrice

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

Bonsoir,

J'ai modifié la macro comme suit :

Sub Test1()
ColonneDeChangementDeligne = 12
If ActiveCell.Column = ColonneDeChangementDeligne Then
Cells(ActiveCell.Row + 1, 1).Select
Else
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
End If
End Sub

En tapant Entrer on va dans la cellule de droite
Arrivé à la colonne 12, on passe à la ligne du dessous 1 ere colonne.

Ca permet à l'opérateur de toujours utiliser la meme touche de validation.
En effet, s'il utilise la fleche et qu'il dépasse la colonne 12 ca ne reviendra pas au debut.
Alors quen utilisant la touche ENTRER, tout se passe de façon transparente.
Cela dit, les fleches fonctionne comme avant.
Voir fichier joint.
 

Pièces jointes

  • retour à la ligne.xls
    24 KB · Affichages: 81
  • retour à la ligne.xls
    24 KB · Affichages: 86
  • retour à la ligne.xls
    24 KB · Affichages: 83

ccdouble6

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

Bonsoir Catrice !!

C'est vraiment super ça marche à merveille !! :) :)
juste quelques petites questions :
- le Else est vraiment indispensable dans la macro ??
- A quoi ça sert de passer par le Workbook dans cette macro ? jusqu'à présent j'avais l'habitude de passer par module ou par simple feuille.
- Un détail : est-il possible de faire en sorte que certaines feuilles échappent à cette macro (donc rien ne se produirait en colonne 12 si on presse 'Entrée') ?

Un grand grand merci pour ton aide, cette trouvaille va me faire gagner un temps énoOOOorme !!! :)))
Bonne soirée !!!

PS: ...et encore dslé pour le délai :eek:
 

Catrice

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

Bonsoir,

C'est vrai que ce n'est pas recent, il a fallu remonter tout ça en mémoire ... ;)

- le Else est vraiment indispensable dans la macro ??
Ca fonctionne de la façon suivante :
Si le N° de colonne =12 alors on passe à la ligne du dessous premiere colonne.
Sinon (else) on passe à la colonne d'à coté meme ligne.
Oui il est indispensable.
J'ai d'ailleurs simplifié le code :

Sub Test1()
ColonneDeChangementDeligne = 12
If ActiveCell.Column = ColonneDeChangementDeligne Then
Cells(ActiveCell.Row + 1, 1).Select
Else
ActiveCell.Offset(0, 1).Select
End If
End Sub


- A quoi ça sert de passer par le Workbook dans cette macro ? jusqu'à présent j'avais l'habitude de passer par module ou par simple feuille.
Le Private Sub Workbook_Open() execute la procédure à l'ouverture du classeur.
Donc à l'ouverture du classeur, on redirige l'appui sur la touche ENTRER vers la macro Test1
On peut gérer d'autres évènements cf. ci-dessous.


- Un détail : est-il possible de faire en sorte que certaines feuilles échappent à cette macro (donc rien ne se produirait en colonne 12 si on presse 'Entrée') ?
Les macros suivantes permettent d'appliquer le retour à la ligne à la colonne 12 uniquement sur Feuil2

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "Feuil2" Then Application.OnKey "{RETURN}", "Test1"
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "Feuil2" Then Application.OnKey "{RETURN}"
End Sub


Celles-ci :
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name <> "Feuil2" Then Application.OnKey "{RETURN}", "Test1"
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
If Sh.Name = "Feuil2" Then Application.OnKey "{RETURN}"
End Sub
Permettre d'avoir le retour à la ligne sur la colonne 12 sur toutes les feuilles sauf Feuil2

Voir fichier joint.
 

Pièces jointes

  • retour à la ligne.xls
    25 KB · Affichages: 68
  • retour à la ligne.xls
    25 KB · Affichages: 55
  • retour à la ligne.xls
    25 KB · Affichages: 63
Dernière édition:

ccdouble6

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

Coucou le fourm, Catrice,

Merci pour ces précisions :) ça marche à la perfection sur mon fichier, quoique je n'ai pas simplifié le texte comme indiqué dans ton dernier message :eek:

Par contre, comme pas mal de débutants je pense, j'ai cherché à bidouiller un peu dans le code afin que la macro fasse un petit truc de plus : que la touche "Entrée" permette également de copier sur la ligne d'en dessous (celle-là même où va la sélection) deux données mettons des colonnes 4 et 5. j'ai finalement abouti au texte suivant :

Sub Test1()
ColonneDeChangementDeligne = 13
If ActiveCell.Column = ColonneDeChangementDeligne Then
Cells(ActiveCell.Row + 1, 3).Select
Target.Offset(0, 3).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Target.Offset(0, 4).FormulaR1C1 = "=OFFSET(RC,-1,0)"

Else
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
End If
End Sub

Lorsque je tape donc "Entrée" voilà qu'il me met "ERREUR 424 objet manquant" puis débogage qui pointe sur la première ligne ici en rouge.
Une objection à laquelle je ne comprends rien : un objet ??? La syntaxe n'en finira donc jamais de me martyriser lol :p
Si tu as une idée de quoi il s'agit, je te remercie d'avance car je nage complet...

Bonne soirée !!!
 

Gorfael

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

ccdouble6 à dit:
Coucou le fourm, Catrice,

Merci pour ces précisions :) ça marche à la perfection sur mon fichier, quoique je n'ai pas simplifié le texte comme indiqué dans ton dernier message :eek:

Par contre, comme pas mal de débutants je pense, j'ai cherché à bidouiller un peu dans le code afin que la macro fasse un petit truc de plus : que la touche "Entrée" permette également de copier sur la ligne d'en dessous (celle-là même où va la sélection) deux données mettons des colonnes 4 et 5. j'ai finalement abouti au texte suivant :

Sub Test1()
ColonneDeChangementDeligne = 13
If ActiveCell.Column = ColonneDeChangementDeligne Then
Cells(ActiveCell.Row + 1, 3).Select
Target.Offset(0, 3).FormulaR1C1 = "=OFFSET(RC,-1,0)"
Target.Offset(0, 4).FormulaR1C1 = "=OFFSET(RC,-1,0)"

Else
Cells(ActiveCell.Row, ActiveCell.Column + 1).Select
End If
End Sub

Lorsque je tape donc "Entrée" voilà qu'il me met "ERREUR 424 objet manquant" puis débogage qui pointe sur la première ligne ici en rouge.
Une objection à laquelle je ne comprends rien : un objet ??? La syntaxe n'en finira donc jamais de me martyriser lol :p
Si tu as une idée de quoi il s'agit, je te remercie d'avance car je nage complet...

Bonne soirée !!!
Salut
sans être sûr : Offset est une instructionVBA, ores ce que tu demandes est de coller une instruction "formule"
Target.Offset(0, 3).FormulaR1C1 = "=L(-1)C"
devrais donner un résultat plus probant, mais comme je ne l'ai pas essayé....
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 851
Membres
103 974
dernier inscrit
chmikha