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 relatif sous vba [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut Déplacement relatif sous vba
    BOnjour,

    Dans une feuille à remplir, figure au départ une ligne d'entêtes (style : Range("A1:E1"). Ensuite, le programme ajoutera une ligne après l'autre.
    J'utilise la méthode suivante : Range("A1").End(xlDown).Offset(1,0).Select pour indiquer la première cellule de la ligne suivante (celle de l'entête pour le première écriture, celle qui suit la dernière écriture saisie ensuite).
    Le problème, c'est qu'avec End(xlDown) Excel envoie le curseur à la dernière ligne de la page et il couine ensuite avec Offset(1,0) qui lui demande d'aller à la ligne suivante qui n'existe pas.

    Si je positionne deux lignes d'entêtes (j'ai donc une plage de deux lignes), je n'ai plus ce problème, l'instruction fait pointer le curseur sur la cellule A3 pour la première écriture à saisir et tout se passe bien ensuite. Comment pourrais-je me passer de doubler la ligne d'entêtes ? D'avance merci pour votre aide.

  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
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La propriété End(xlDown) d'un objet Range est l'équivalent d'un Ctrl+flèche bas.
    Si on a une seule ligne dans la feuille et que l'on se positionne sur A1 et que l'on fait Crtl+Flèche bas, on arrive immédiatement à la dernière ligne de la feuille.
    Soit tu choisis de partir de la dernière ligne et tu utilises End(xlUp) soit et c'est l'option que j'utilise tu emploies la propriété CurrentRegion qui est l'équivalent d'un Ctrl+A
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub t()
     Dim rng As Range
     With ThisWorkbook.Worksheets("db")
      Set rng = .Range("A1").CurrentRegion
     End With
     MsgBox "Adresse de la liste de données " & rng.Address
    End Sub
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
     Dim LastRow As Long
     With ThisWorkbook.Worksheets("db")
      Debug.Print .Rows.Count
      LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
     End With
     MsgBox "Dernière ligne de la liste de données " & LastRow
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Bonjour,

    Merci pour les astuces mais je n'ai toujours pas compris pourquoi End(xlDown) renvoie en bas de la feuille excel si la plage n'a qu'une ligne d'épaisseur et pourquoi il renvoie à la dernière ligne de la plage si cette dernière fait deux lignes ou plus d'épaisseur. Puisque End(xlDown) équivaut à Ctrl + flèche vers le bas, la commande devrait produire le même résultat dans les deux cas. Merci d'avance pour cette explication.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je pense te l'avoir expliqué dans les deux premières lignes de ma réponse.
    As-tu fait le test manuellement ?
    Le raccourci clavier Ctrl+flèche de direction permet de se déplacer de la cellule active vers la dernière cellule remplie dans la direction choisie.
    Si la cellule qui suit est vide, le déplacement s'effectue jusqu'à la prochaine remplie.
    Donc si tu n'as qu'une cellule remplie (Exemple A1) et que tu fais Ctrl+Flèche bas) tu iras jusqu'à la dernière ligne alors que si les cellules A1 et A2 sont remplies et que tu fais Ctrl+Flèche bas depuis A1, il s'arrêtera à A2.
    En VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").End(xlDown).Select
    est l'équivalent de Ctrl+Flèche bas

    C'est plus clair maintenant ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    @ jcs75,

    Que tu utilise Cells().End(xlDown) ou Cells().End(xlUp), tu doit toujours vérifier si la cellule à laquelle tu fait référence est vide ou non juste avant.

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 20
    Par défaut
    Bonsoir,

    Merci à tous les deux. J'ai fait un test avec le jeu de touches Ctr + Flèche en bas, le curseur s'arrète aux limites des plages utilisées et s'il n'y en a plus descend jusqu'en bas de la feuille. Utilisant plus la souris que le clavier pour couvrir des plages de cellules, je n'avais pas repéré ce manège avec les touches de clavier. Merci beaucoup !

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

Discussions similaires

  1. Automatisation de déplacement d'objet sous VBA
    Par sokoma dans le forum VBA PowerPoint
    Réponses: 2
    Dernier message: 18/09/2013, 10h26
  2. Cases à cocher sous VBA
    Par dran dans le forum Général VBA
    Réponses: 4
    Dernier message: 15/11/2004, 21h50
  3. Réponses: 8
    Dernier message: 07/10/2004, 11h08
  4. (VBA-A] Requete access sous VBA
    Par vanima dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/07/2004, 16h07
  5. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39

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