IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Passer d'une cellule à une autre par tabulation [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Par défaut Passer d'une cellule à une autre par tabulation
    Bonjour!

    J'ai différentes cellules que l'utilisateur doit remplir. J'aimerais, pour faciliter la saisie, que lorque l'utilisateur clique sur entrée ou la touche tabulation, on passe de la cellule sélectionnée à la suivante.
    Ex, je dois remplir les cellules A1 puis la cellule C5, puis E7... Comment dire que lorsque A1 est sélectionnée puis qu'on clique sur la touche entrée ou tabulation, je passe à la cellule C5 etc...?

    Pour le moment j'ai écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Count > 1 Or Intersect(Target, Range("A1,C5,E7,K7,E17,E19,E21,E23,J19,J21,J23,G27,G28,G29,G30,G33,G35")) Is Nothing Then Exit Sub
    Merci à celui qui répondra.
    Bonne journée.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Par défaut Voici ce que j'ai écris, ça marche mais encore un détail
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ligne As Variant
    Dim colonne As Variant
     
    ligne = Target.Row
    colonne = Target.Column
     
    If Target.Count > 1 Or Intersect(Target, Range("E5,E7,K5,K7,E17,E19,E21,E23,J19,J21,J23,G27,G28,G29,G30,G33,G35")) Is Nothing Then Exit Sub
     
        If ligne = 5 And colonne = 5 Then
            Cells(ligne, colonne + 6).Select
        End If
     
    End Sub
    En fait ça fonctionne quand je double clic dans la cellule et appuie sur entrée.
    Il faudrait que ça se fasse quand la cellule est sélectionnée simplement et qu'on appuie sur entrée ou tabulation.

  3. #3
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Selon le contexte, il peut y avoir beaucoup plus simple, sans vba.

    Tu sélectionnes les cellules que tu veux parcourir, clic droit dessus, format de cellule, onglet protection, tu décoches verrouillée.

    Ensuite, dans le ruban onglet Révision, protéger la feuille, décocher sélectionner les cellules verrouillées etc. en laissant cocher Sélectionner les cellules dérouillées etc... et OK

    Désormais, avec tab ou entrée la navigation se fera automatiquement sur les cellules choisie

    cordialement,

    Didier

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Par défaut
    Merci pour votre réponse.
    J'avoue que je n'y avais pas pensé...

    Le problème est que j'ai des optionbutton dans ma feuille donc je ne peux pas la protéger, autrement, les optionbutton ne fonctionnent pas.

    D'ailleurs, j'aimerai aussi que quand on clique sur entrée ou tabulation dans la dernière cellule sélectionnée, que la souris se positionne sur un optionbutton pour montrer à l'utilisateur qu'il doit sélectionner quelque chose à cet endroit.

    Comment je peux faire?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 87
    Par défaut code
    Au final, voici le code qui fonctionne donc quand on double clic sur la cellule et qu'on appuie sur entrée: (ce n'est peut-être pas très jolie comme code mais je ne sais pas comment faire autrement...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ligne As Variant
    Dim colonne As Variant
     
    ligne = Target.Row
    colonne = Target.Column
     
    If Target.Count > 1 Or Intersect(Target, Range("E5,E7,K5,K7,E17,E19,E21,E23,J19,J21,J23,G27,G28,G29,G30,G33,G35")) Is Nothing Then Exit Sub
     
        If ligne = 5 And colonne = 5 Then Cells(ligne + 2, colonne).Select    'Si E5 est remplie, on passe à E7
        If ligne = 7 And colonne = 5 Then Cells(ligne - 2, colonne + 6).Select  'Si E7 on passe à K5
        If ligne = 5 And colonne = 11 Then Cells(ligne + 2, colonne).Select
        If ligne = 7 And colonne = 11 Then Cells(ligne + 2, colonne - 8).Select
     
        If ligne = 17 And colonne = 5 Then Cells(ligne + 2, colonne).Select
        If ligne = 19 And colonne = 5 Then Cells(ligne, colonne + 5).Select
        If ligne = 19 And colonne = 10 Then Cells(ligne + 2, colonne - 5).Select
        If ligne = 21 And colonne = 5 Then Cells(ligne, colonne + 5).Select
        If ligne = 21 And colonne = 10 Then Cells(ligne + 2, colonne - 5).Select
        If ligne = 23 And colonne = 5 Then Cells(ligne, colonne + 5).Select
        If ligne = 23 And colonne = 10 Then Cells(ligne + 3, colonne - 3).Select
        If ligne = 26 And colonne = 7 Then Cells(ligne + 1, colonne).Select
        If ligne = 27 And colonne = 7 Then Cells(ligne + 1, colonne).Select
        If ligne = 28 And colonne = 7 Then Cells(ligne + 2, colonne).Select
        If ligne = 30 And colonne = 7 Then Cells(ligne + 3, colonne).Select
        If ligne = 33 And colonne = 7 Then Cells(ligne + 2, colonne).Select
        If ligne = 35 And colonne = 7 Then Cells(ligne + 3, colonne - 5).Select
     
    End Sub

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    bonjour,

    Le plus important dans un code au final est qu'il fonctionne , une super œuvre / code qui ne fait que partiellement ce que voulait le demandeur est moins intéressante ( pire si elle bug). Après c'est une notion de contexte

    Pas le temps de penser à une autre approche, donc juste des remarques :

    Tu as bien mis un exit sub au départ pour éviter des traitements inutiles, ce serait bien d'appliquer la même logique ensuite, là ta procédure parcourt tous les if...

    Vois du côté de Select Case qui serait peut-être plus approprié sinon..

    cordialement,

    Didier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2013, 14h13
  2. Réponses: 1
    Dernier message: 10/04/2012, 23h12
  3. Passer d'une procédure à l'autre par l'intermédiaire d'un GoTo
    Par trecks dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 09/04/2007, 20h21
  4. comment passer d'une cellule à une autre
    Par khier dans le forum Composants VCL
    Réponses: 2
    Dernier message: 01/04/2006, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo