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 :

faire déplacer le curseur d'une cellule à une autre [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut faire déplacer le curseur d'une cellule à une autre
    Bonjour,

    Je souhaite pouvoir gérer via un programme Vba la gestion du déplacement du curseur d'une cellule choisie à une autre une fois qu'une cellule est remplie par l'utilisateur ( sans qu'excel effectue cette opération par défaut ) . Je souhaite éviter de réaliser un formulaire pour réaliser cette action.

    sauf erreur de ma part, il faut en permanence savoir dans quelle cellule l'utilisateur travaille.
    Existe t-il un exemple de programme qui gère ce type d'action dans une feuille excel ?

    en vous remerciant par avance

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour marcelisa2,

    Je ne sais pas si j'ai bien compris ta demande.
    Voici cependant ce que je te propose.

    Sur la feuille sur laquelle tu souhaites faire un tunnel d'insertion de données (ce que j'ai compris), il faut que tu ailles dans la gestion d’événements de ta feuille et que sélectionne "Worksheet_SelectionChange".

    Voici un bout de code que je te propose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    If Application.Intersect(Target, Range("B2")) Is Nothing Then
        If Range("B2") = "" Then
            Range("B2").Select
        Else
            Range("E2").Select
        End If
    End If
     
    End Sub
    Celui-ci oblige la sélection et le remplissage de la cellule B2. Tant que celle-ci n'est pas remplie, changer de cellule redirigera le curseur vers celle-ci.
    Dès qu'elle est saisie, le curseur se placera sur E2 avec les mêmes règles de gestion.

    J'attends ton retour.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Kimy,

    j'ai essayé mais n'est pas réussi à faire fonctionner le code.
    j'ai attaché une image de mon maque de saisie sur une feuille excel

    Nom : masque de saisie.JPG
Affichages : 4539
Taille : 145,1 Ko
    L'objectif est de démarrer en cellule C2. une fois l'utilisateur a saisi cette dernière, le curseur doit se déplacer en K2, C4, E4, C6, C12, E12, etc ...

    Est-ce que je peux arriver à réaliser ces actions avec le code fourni?

    Merci encore pour les retours
    Images attachées Images attachées  

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour marcelisa2,

    Je ne comprends pas l'algorithme que tu souhaites "K2, C4, E4, C6, C12, E12, etc ...".

    Peux-tu placer un fichier exemple en pièce jointe ou être plus précis sur cet algorithme ?

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Kimy_ire,
    merci pour ton retour.

    En fait, sur une feuille excel, j'ai construit un masque de saisie en utilisant plusieurs cellules que j'ai grisées (cf image jointe mail précédent)

    L'utilisateur a un ordre de saisie par défaut que je souhaiterai piloter à travers une macro.

    L'ordre des cellules est celui précisé K2, C4, E4, C6, C12, E12, etc...

    L'objectif de la macro est de faire en sorte que le curseur passe à la cellule suivante (en respectant cet ordre) une fois que l'utilisateur a mis à jour la cellule précédente.

    S'i y a besoin de nouvelle précision, n'hésite pas
    Merci

    bonjour,
    j'espère que mon besoin sur la gestion d'un masque de saisie dans une feuille excel est suffisamment clair.
    N'hésitez pas à me poser d'autres questions si nécessaire.
    Merci par avance pour votre aide

  6. #6
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une piste A mettre dans le module de la feuille en question et à adapter :
    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
    35
    36
    37
     
    Private Sub Worksheet_Activate()
     
        'sélectionne la première cellule et l'active pour la saisie
        Range("K2").Select
        Application.SendKeys "{F2}"
     
    End Sub
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        'sélectionne les cellules suivantes et les actives pour la saisie
        Select Case Target.Address(0, 0)
     
            Case "K2"
                Range("C4").Select
                Application.SendKeys "{F2}"
     
            Case "C4"
                Range("E4").Select
                Application.SendKeys "{F2}"
     
            Case "E4"
                Range("C6").Select
                Application.SendKeys "{F2}"
     
            Case "C6"
                Range("C12").Select
                Application.SendKeys "{F2}"
     
            Case "C12"
                Range("E12").Select
                Application.SendKeys "{F2}"
     
        End Select
     
    End Sub
    Hervé.

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Hervé,

    Merci beaucoup pour cette solution qui approche tout à fait de mon besoin. Je l'ai testé.

    Il me reste le cas où l'utilisateur souhaite revenir sur une précédente cellule ( pas forcément la toute dernière ) pour corriger la précédente saisie.
    Comment m'en faire ?
    Merci encore

  8. #8
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Comme le compilateur ne peux pas lire dans les pensées, l'utilisateur devra activer la cellule avec la souris et après modif, repartir dans le sens programmé

    Hervé.

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Hervé,
    merci pour ton retour
    j'ai quand même constaté que, si je double cliques sur une précédente cellule ( ex. : C2 ) utilisée alors que le traitement de déplacement est en cours ( cellule M14) , il n'y a pas interruption immédiate et qu' à chaque nouveau double clique, le curseur n'est toujours pas dans la cellule mais continue de se déplacer ( ex. : cellule O14, Q14, etc..)

    Il s'agit donc d'arriver à ce que le programme reconnaisse en permance là où il se produit l'évenement du "clique" de la cellule par la souris

    Marc.

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    afin de pouvoir arrêter à tout moment le déplacement du curseur, je souhaiterai faire une boucle qui teste si l'utilisateur a selectionné la touche {ESC}
    Comment utiliser la commande while et sendkeys?

    Merci par avance pour votre aide

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    le plus simple est sans code, tout simplement déverrouiller les cellules saisissables
    puis protéger la feuille en ne laissant l'accès qu'aux cellules déverrouillées …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    merci Marc L.
    La problématique que j'ai est que je gère le déplacement dès l'ouverture de la feuille
    Ainsi, si la personne souhaite positionner le curseur sur une autre cellule que celle définie par le déplacement, le curseur continue à se déplacer sur une autre cellule jusqu'à la fin des déplacements.
    Mon objectif est de vérifier qu'à chaque changement, il n'y a pas eu une demande d'arrêt via la touche "esc"

    Voici un extrait du code actuel

    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
    35
    36
    37
     
    ......
    Private Sub Worksheet_Change(ByVal Target As Range)
     Dim i
     
        'sélectionne les cellules suivantes et les actives pour la saisie
        Select Case Target.Address(0, 0)
     
            Case "C2"
                Range("K2").Select
                Application.SendKeys "{F2}"
     
            Case "K2"
                Range("C4").Select
                Application.SendKeys "{F2}"
     
            Case "C4"
                Range("E4").Select
                Application.SendKeys "{F2}"
     
            Case "E4"
                Range("C6").Select
                Application.SendKeys "{F2}"
     
            Case "C6"
                Range("C12").Select
                Application.SendKeys "{F2}"
     
         End Select
         ' n ligne correspondant au n contacts
         For i = 0 To 20
     
         Select Case Target.Address(0, 0)
            Case "C" & 12 + (2 * i)
                Range("E" & 12 + (2 * i)).Select
                Application.SendKeys "{F2}"
    ............
    merci par avanace pour votre aide

  13. #13
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Ainsi, si la personne souhaite positionner le curseur sur une autre cellule que celle définie par le déplacement, le curseur continue à se déplacer sur une autre cellule jusqu'à la fin des déplacements.
    Si tu double-clique sur une cellule, tu entre en modification (tu l'active pour la saisie) et la proc que je t'ai postée est sur l'évènement "Change" donc, un double click ne peux pas activer le déplacement tant que tu ne sort pas de la cellule. Je ne comprend pas vraiment ce que tu veux ? Si l'utilisateur change de cellule et que celle-ci n'est pas dans la liste des cellules de déplacement (K2, C4, E4, etc..), plus rien ne se produit !

    Hervé.

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour Theze
    et merci encore pour l'aide et du code que tu m'as proposé que j'utilise.

    je vais réessayer d'expliquer le problème que je rencontre.

    Après l'ouverture du classeur et positionnement sur la cellule C2 de la 1ère feuille, l'ordre de déplacement du curseur sera au moindre changement est le suivant K2, C4, E4, C6, C12, E12, G12, etc...
    L'utilisateur peut taper la touche "Enter" pour avancer de cellule en cellule suivant le masque de saisie. En effet, il peut double cliquer sur une cellule ( ex. : C12 ) et modifier le contenu. mais dès qu'il tape "Enter", le curseur se positionne sur la cellule suivante automatiquement (E12).

    A ce moment là, si l'utilisateur souhaite revenir sur une précédente saisie ( ex: cellule E4) pour remodifier une valeur précédemment saisie, il ne peut pas => le curseur continue à se déplacer ( cellule G12) suivant l'ordre défini

    Il me faut donc arrêter le processus en proposant la touche ESC par exemple.
    J'espère que j'étais un peu plus précis.
    Si ce n'est pas le cas, n'hésite pas à me le dire
    cordialement

  15. #15
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Ceci va être difficile car il n'est pas possible d'intercepter l'appui sur les touches du clavier donc, tes utilisateurs n'auront pas d'autre choix que de revenir vers les cellules à modifier en les sélectionnant avec la souris !

    Hervé.

  16. #16
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 159
    Points : 62
    Points
    62
    Par défaut
    Bonjour These,
    Merci encore pour ton aide. Je pense avoir trouvé une solution en demandant à l'utilisateur de taper la touche Escape ou CTRL+pause.
    Encore merci
    Bien cordialement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2013, 14h13
  2. Réponses: 6
    Dernier message: 22/10/2009, 15h42
  3. Réponses: 12
    Dernier message: 08/05/2009, 15h54
  4. Réponses: 6
    Dernier message: 07/11/2006, 09h23

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