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

  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

  7. #7
    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 Le code ne répond qu'à moitié à ce que je souhaiterais
    Le code fonctionne effectivement, cependant il permet de passer d'une cellule à l'autre quand on double clic dans la cellule puis qu'on appuie sur entrée.

    Je voudrais que ça passe d'une cellule à l'autre quand la cellule est juste sélectionnée (c'est à dire qu'on est pas obligé de double cliquer dedans) et qu'on appuie sur la touche entrée ou la touche tabulation. Et ça je n'y arrive pas.

    Quelqu'un aurait-il une idée?

    Merci. Bonne journée.

  8. #8
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Essai de mettre ton code dans selection change et pas change:

    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
    31
    Private Sub Worksheet_SelectionChange(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

  9. #9
    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
    J'ai mis le code dans selectionchange, mais ça ne change rien.

  10. #10
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284
    Par défaut
    Je pense que pour que ça fonctionne correctement (la ça ne va pas attendre que tu appui sur entrée ou tab), il faut que tu mettes une condition sur onkey.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If target.adress=range("B1").adress then
    Application.OnKey Key:="~" , Range("B5").select 
    end if

  11. #11
    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
    Il ne comprend pas le code...

  12. #12
    Membre expérimenté
    Inscrit en
    Août 2009
    Messages
    284
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Août 2009
    Messages : 284

  13. #13
    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
    En fait, je crois comprendre qu'il faut assigner une procédure. Donc lui dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Target.adress = Range("E5").adress Then
    Application.OnKey "{TAB}", Range("E7").Select
    End If
    ne peut pas fonctionner.

    L'idée est bonne mais je ne sais pas trop comment faire pour que ça fonctionne.

  14. #14
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Erreur de syntaxe : adress ecrire address.

  15. #15
    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
    Bien vu... malheureusement ce n'est pas encore bon.

  16. #16
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Je vois que tes If... Then n'ont pas progressé
    Essaies plutôt comme ça (ça dépendra de ta configuration)
    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
    31
    32
    33
    34
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Kol As Integer, Lig As Integer, K As Integer, L As Integer
     
    Kol = Target.Column
    Lig = Target.Row
     
    If Target.Count > 1 Then Exit Sub  'Mettre Ici tous les tests sr la zone de travail
     
    Select Case Kol
        Case 1
            K = 0: L = 3
        Case 2
            Select Case Lig
                Case 2
                    K = 1: L = 0
                Case 3
                    K = 2: L = 1
                'Case ....
                'Case Else
                '    K=0:L=1
            End Select
     
        Case 3
            K = 3: L = 1
        'Case ....
     
        Case Else                       'Absolument mettre ce Case Else pour retrouver le fonctionnement normal
            K = 0: L = 1
     
    End Select
     
    Target.Offset(K, L).Select
     
    End Sub
    Quand tu changes le contenu de la cellule Target, et tu fais Enter ou Tabulation, la case Target.Offset(K,L) sera selectionnée

  17. #17
    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
    Bonjour,

    J'avoue avoir du mal à comprendre le code que tu m'as écris. Désolée, je ne suis pas très douée...
    En fait, d'après ce que tu dis, ça permet lorsque l'on change le contenu de la cellule, de passer à la cellule suivante. C'est ce que fais déjà le code (peut-être un peu cochon je l'avoue) que j'ai écris.

    En fait il faudrait maintenant réussir à ce qu'il n'y ait pas besoin de changer le contenu de la cellule pour que ça passe d'une cellule à l'autre par tabulation ou touche entrée.

    Merci pour ton aide.

  18. #18
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Pour ce que tu veux faire la solution de Ormonth me parait la plus simple et la plus pratique à mettre en place.

    Je viens de tester et c'est à la fois simple et efficace, pas besoin de réinventer.

    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.
    => Si, il suffit de faire avant la protection de la feuille : clique droit/Format de control /Protection et décocher vérouiller.

  19. #19
    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 aalex, ça fonctionne parfaitement!! Je n'y avais effectivement pas pensé...

+ 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