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 :

Dernière cellule non vide d'une ligne


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut Dernière cellule non vide d'une ligne
    Hello,

    J'ai une boucle qui tourne sur une plage de donnée, un tableau de 4 lignes et 5 colonnes (bon en fait c'est bcp plus, mais c'est transposable)

    1 2 3 4 5
    1 2
    1 2 3
    1 2 3 4

    Je cherche à positionner mon curseur sur la dernière cellule non vide de chaque ligne, j'utilise donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim ligne As Byte
    Dim col As Byte
     
    For ligne = 1 To 4
    For col = 1 To 5
     
    Cells(ligne, col).End(xlToRight).Columns.Select
     
    Next col
    Next ligne
    End Sub
    Donc à chaque tour il selectionen bien respectivement 5, 2, 3 puis 4 (dc la dernière cellule pleine de chaque ligne), mais avt de passer à la ligne suivante le curseur va tout au bout à droite du tableur, colonne "XFD".
    Pourtant je spécifie bien mes colonnes de 1 à 5 (for col 1 to 5).

    Mauvaise utilisation du xlToRight ?

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 470
    Points : 16 350
    Points
    16 350
    Par défaut
    Bonjour

    Partir de XFD (ou moins loin ) et aller vers la gauche est plus sûr
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    La structure de ta boucle est étrange
    Avec les 2 boucles For tu pointes ton tableau (5x4), cellule par cellule (donc les 20 cellules)
    Ensuite attention End(...) ne permet pas de forcement trouver la dernière cellule non vide, End(...) repère un changement fais des essais avec avec la touche Ctrl de ton clavier et les touches fléchées

    Plutôt qu'un long discours alambiqué voila un schéma

    ++
    Qwaz
    Images attachées Images attachées  

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    merci à vous 2 !
    J'ai effectué 2 corrections :
    - d'abord, ma variable pour les colonnes ne sert strictement à rien, dc suppr.
    - et deusio, j'ai remplacé le End(xlToRight).Columns.Select par simplement: End(xlToRight).Select

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ligne As Long
    For ligne = 1 To 4
    Cells(ligne, 2).End(xlToRight).Select
    Next ligne
    End Sub
    simpler is better

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Attention si on reprend ton exemple, la ligne 2 va aller à la dernière colonne.
    Soit tu parts de la colonne A en etant sûr et certain que la colonne B aura toujours un contenu, soit tu utilises (xltoLeft) comme le dit 78chris, ce qui est le plus couramment utilisé.
    La seule raison ici de vouloir utiliser xlToRight serait si un 2ème tableau se trouvait à droite de celui ou tu fais ta recherche, mais là encore, il suffirait de partir de la 1ere colonne de ton 2eme tableau et de revenir vers la gauche pour trouver la dernière colonne utilisée dans ton 1er tableau.

    avec XlToLeft

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim ligne As Long
    For ligne = 1 To 4
    Cells(ligne, columns.count).End(xlToLeft).Select
    Next ligne
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Avec ton code, lorsque tu vas passer à la ligne 2, tu vas encore taper dans la butée.
    Tu as tout intérêt à coder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test2()
    Dim ligne As Byte
    Dim col As Byte
        For ligne = 1 To 4
                Cells(ligne, Columns.Count).End(xlToLeft).Select
        Next ligne
    End Sub
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test1()
    Dim ligne As Byte
    Dim col As Byte
        For ligne = 1 To 4
                Cells(ligne, 1).End(xlToRight).Select
        Next ligne
    End Sub
    Cordialement.

    EDIT : Désolé Qwazerty. Je n'avais pas vu que tu avais dégainé avant

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    [Edit]Pas de soucis , mais une petite critique comme tu peux le voir ^^'[/Edit]

    Définir des Row et des Colomns avec des Byte est dangereux, y'en a qu'on essayé, ils ont eu des problèmes.
    Plus sérieusement, je comprend qu'ici c'est un teste, mais il vaut mieux dire Row -> Long et column->Integer, parfois notre code évolue au gré du temps et paff (surtout pour les lignes 255, c'est vite atteint) .
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 28
    Points : 20
    Points
    20
    Par défaut
    Alors, en effet un second tableau se trouve à droite, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Tendances()
    Dim ligne As Long
    For ligne = 12 To 208
    Cells(ligne, 17).End(xlToLeft).Select
    Next ligne
    End Sub
    la colonne 17 est la premiere de mon second tableau.

    Le probleme c'est que dans mon premier tableau, les cellules vides sont en fait des recherchev qui donnent " " si #n/a.
    donc les cellules sont pas vraiment vides mais contiennent des formules...
    Comment faire pour considérer ces cellules comme vide dans mon code ?

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Pour trouver la dernière cellule renseignée, tu peux effectuer la recherche de la première cellule vide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Tendances()
    Dim ligne As Long
    Dim Colonne As Integer
        For ligne = 12 To 208
            For Colonne = 1 To 15
                If Cells(ligne, Colonne).Offset(0, 1) = "" Then
                    Cells(ligne, Colonne).Select
                    Exit For
                End If
            Next Colonne
        Next ligne
    End Sub
    Cordialement.

  10. #10
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Je pensais que tu faisais juste des essais afin de tester les boucles et les sélections, visiblement ton problème s'inscrit dans une démarche plus global, il serait donc peut-être intéressant de nous dire ce que tu souhaites faire exactement, je doute que le finalité soit de sélectionner l'une après l'autre la dernière cellule de chaque colonne.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

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

Discussions similaires

  1. [XL-2010] Dernière cellule non vide d'une ligne et simplification code
    Par Ditch3122 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2012, 20h48
  2. renvoi dernière cellule non vide d'une colonne
    Par emilie31 dans le forum Excel
    Réponses: 5
    Dernier message: 29/09/2008, 15h26
  3. Dernière cellule non vide d'une colonne
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/02/2008, 14h43
  4. [vba Excel] Obtenir dernier cellule non vide d'une ligne
    Par cow_boy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/05/2007, 10h07
  5. [VBA-E]selectionner la premiere cellule non vide d'une ligne
    Par muse47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/10/2005, 08h11

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