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 :

Déplacement du curseur dans la première cellule libre d'une colonne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut Déplacement du curseur dans la première cellule libre d'une colonne
    Bonjour,

    J'ai cherché, et pas trouvé, une solution pour passer le curseur de n'importe quelle cellule à la première cellule vide de la colonne B.

    Auriez-vous une solution ?

    Merci.

    Impolitis

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Je ne comprends pas très bien ce que tu souhaites.
    Est-ce après avoir fait une validation dans n'importe quelle cellule de la feuille que tu veux que le focus soit donné sur la première cellule vide de la colonne B ou bien est-ce au moment où tu sélectionnes la feuille ou bien encore autre chose ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Oui, il est vrai que j'aurais dû être plus clair.

    Je travaille sur une feuille qui me sert de dictionnaire multilingue. Il se peut que je sois amené à faire des modifications dans une quelconque des cellules de la feuille, et ensuite je dois retourner à ma cellule de départ de saisie, la première cellule vide de la colonne B.
    Ma feuille est très grande et cela devient de plus en plus pénible.
    J'ai essayé avec des formules pour calculer cette case, ou avec une macro, mais bien sûr, cela ne va pas.

    Je ne sais d'ailleurs pas si cela est possible.

    Merci en tout cas.

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    comment est élaborée ta colonne B ? la première cellule vide, littéralement est logiquement la première qui ne contient pas de données, je m'explique :
    si tu as une entete en B1, rien en B2, des valeurs de B3 à B50, la première cellule vide est bien B2, est-ce cela que tu veux ?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Ai-je bien compris ?
    Tu as une colonne B qui est ta cellule de départ et ensuite les colonnes d'à côté des cellules à remplir.
    Quand tu es arrivés au bout de la dernière colonne à remplir tu aimerais retourner automatiquement à la colonne B de la prochaine ligne vide.
    Si c'est bien ce que j'ai compris, Il y a plusieurs solutions.
    La première, sans VBA serait de
    1) Déprotéger toutes les colonnes à remplir
    2) Figer les volets pour avoir une visibilité plus aisées de la colonne B et de la ligne 1 mais ce n'est pas obligatoire pour revenir à colonne B
    3) Faire en sorte que l'encodage se fasse par ligne si ce n'est pas le cas. Pour cela aller dans Outils/Options... dans la boite de dialogue Options sélectionner l'onglet [Modification]
    Là cocher l'option Déplacer la sélection après validation et choisir le sens Droite
    4) Ensuite protéger la feuille.
    Ainsi après chaque validation (par retour), le curseur ira vers la prochaine cellule déprotégée, vers la droite. Au moment où il atteindra la dernière colonne déprotégée de la ligne, il passera à la colonne B de la ligne suivante. (A condition que la A soit protégée bien sûr.
    Petite astuce : Si par exemple, la dernière colonne déprotégée est la L et que l'on veut revenir à la colonne B alors que l'on est sur la colonne G. Il suffit de faire Ctrl+Flèche vers la gauche pour revenir à B.
    La deuxième solution serait d'utiliser la procédure événementielle Worksheet_Change()

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Un petit dessin vaut mieux que...



    Un petit exemple à partir de ma feuille avec quelques lignes.
    Ici mon curseur se trouve en G2. La première cellule libre de la colonne B est en B6 et en orangé. Toute les cellules supérieures de B sont non-vides, le français étant ma langue d'entrée.
    Je pourrais aussi bien être en K2654, après avoir effectué une modife, et devoir aller dans la 1ère cellule libre de B, en B8562.
    A est caché car ne comporte que des indexs.

    Cette fois ci je pense avoir été cohérent dans ma question.

    Est-ce qu'il existe un raccourci ? Une macro ? Un petit programme ? quoi qu'il en soit manifestement mes connaissances en Excel ne vont pas jusque là.

    Au passage je vous remercie car j'ai trouvé dans les tutoriels des tas d'astuces pour améliorer ma feuille, notamment la fonction DECALER. Trop génial !

    Merci.

  7. #7
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Dans le code de la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.column > 2 Then
       Range("b" & Rows.Count).End(xlUp).Select
    End If
    End Sub

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Bon, ben voilà, j'ai bien essayé mais au final ne sais pas où mettre ce code. Dans une macro ? J'ai essayé de le coller en passant par l'éditeur VBA dans une page appelée Code...

    Et d'ailleurs par quoi est-ce déclenché ? Par l'action sur OK ?

    Je ne suis pas loin d'être une bille...

    Est-ce qu'il y a un tutoriel qui expliquerait comment procéder ?

    Merci.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme indiqué dans la réponse de casefayere, Dans le code de la feuille.
    Dans l'éditeur Visual Basic (VBE), à gauche se trouve l'explorateur de projets, tu sélectionnes la feuille où se trouve tes données et ce par un doubles click.
    Ensuite tu colles le code qu'il t'a proposé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.column > 2 Then
       Range("b" & Rows.Count).End(xlUp).Select
    End If
    End Sub
    Sub Worksheet_Change(ByVal Target As Range) est une procédure événementielle qui se déclenche lors d'une modification dans une cellule.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Super, voilà ça marche pour l'insertion. Merci pour l'aide.

    Le code fonctionne a ceci près que le curseur arrive dans la dernière cellule renseignée, et non pas dans la première cellule libre, celle qui lui est adjacente et immédiatement inférieure.

    Merci de vos réponses.

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ajouter au code, la propriété Offset avec comme argument 1 soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 2 Then
       Range("b" & Rows.Count).End(xlUp).Offset(1).Select
    End If
    End Sub
    C'est à dire un déplacement de 1 ligne

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Je vous remercie. Cela fonctionne à merveille et je vous assure que c'est un grand soulagement pour moi.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 12
    Points : 6
    Points
    6
    Par défaut
    Seul petit changement, je souhaitais que ceci puisse être réalisé depuis n'importe quelle cellule, y compris depuis la colonne B. J'ai modifié le code ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column > 1 Then
       Range("b" & Rows.Count).End(xlUp).Offset(1).Select
    End If
    End Sub
    c'est-à-dire que j'ai fait passé à 1 "If Target.Column > 1 Then", au lieu de 2.

    Mais le code ne fonctionne que pour les cellules modifiées, et non pour les cellules seulement visitées. Comment faire en sorte qu'il fonctionne dans tous les cas ?

Discussions similaires

  1. [XL-2010] déplacement du curseur dans un textbox
    Par tontiche dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2014, 08h14
  2. [XL-2007] Copier/coller d'une date dans la première cellule vide
    Par AntMi dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 01/07/2014, 16h31
  3. Réponses: 10
    Dernier message: 26/07/2013, 18h57
  4. Réponses: 2
    Dernier message: 10/03/2013, 18h06
  5. Réponses: 3
    Dernier message: 05/05/2011, 13h41

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