Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Excel-VBA] Dernière ligne utilisée

Sujet résolu
    30 septembre 2018 à 20:04:51

    Bonjour chers Zéros,

    Je me suis mis depuis peu à la programmation de macro avec VBA sous Excel. Sauf que depuis un certain temps je bloque.

    En effet, j'aimerai récupérer dans ma macro, la dernière ligne utilisée dans une colonne que j'aurai au préalable sélectionné du coté de la feuille de calcul d'Excel.

    Exemple : Supposons que je sélectionne la colonne A de ma feuille de calcul et qu'elle compte 1587 lignes. Ma macro devra me permettre de récupérer la donnée "A1587" pour que je puisse l'exploiter par la suite dans mon traitement.

    J'ai essayé quelques solutions trouvées sur d'autres forums mais aucune jusque là ne m'a donné satisfaction.

    J'espère que vous pourrez m'aider à dénouer ce problème quelque peu épineux pour moi.

    Merci d'avance pour votre aide

    • Partager sur Facebook
    • Partager sur Twitter
      30 septembre 2018 à 22:02:55

      Salut :)

      Tu veux dire que les cellules A1 jusque A1587 ne sont pas vides ?

      Si oui, tu peux :

      Parcourir les lignes avec une boucle TANT QUE
      
      VARIABLES
          numéroDeLigne de type ENTIER
      
      numéroDeLigne <- 1 # première ligne
      TANT QUE cellule[A-numéroDeLigne] n'est pas vide FAIRE:
          numéroDeLigne <- numéroDeLigne + 1
      
      # Si la ligne numéro 3 est vide :
      écrire("Le numéro de ligne est ", numéroDeLigne)
      # Le numéro de ligne est 3 
      • Partager sur Facebook
      • Partager sur Twitter
        1 octobre 2018 à 9:44:17

        Salut,

        Quelles solutions et pourquoi elles ne te convenaient pas ?

        -
        Edité par Stormweaker 1 octobre 2018 à 9:44:28

        • Partager sur Facebook
        • Partager sur Twitter
          1 octobre 2018 à 10:02:36

          Bonjour, 

          Merci pour vos réponses Le Cobriste et Stormweaker

          Le Cobriste 128 a écrit:

          Tu veux dire que les cellules A1 jusque A1587 ne sont pas vides ?

          En effet, l'idéal serait que toutes les cellules de A1 à A1587 ne soient pas vides. Mais au cas où elles seraient vides faudrait que le code puisse prendre ce cas de figures en charge.

          Stormweaker a écrit:

          Salut,

          Quelles solutions et pourquoi elles ne te convenaient pas ?

          Les autres solutions que j'ai trouvé ne me renvoyaient que le numéro de la dernière ligne, genre je récupérais uniquement le 1587 au lieu du A1587.

          En fait, j'aimerai utilisé le A1587  dans une boucle dans la suite de ma macro sans avoir à chercher un moyen pour concaténer "A" et "1587"





          -
          Edité par Gelal 1 octobre 2018 à 10:04:22

          • Partager sur Facebook
          • Partager sur Twitter
            1 octobre 2018 à 10:23:03

            >je récupérais uniquement le 1587 au lieu du A1587

            Les codes que tu as vu se finissaient certainement par un ".Row", donc ça renvoie le numéro de ligne, si tu veux avoir "A1587", c'est à dire l'addresse de la cellule, alors il faut remplacer ".Row" par ".Address".

            Pour plus d'infos : https://docs.microsoft.com/en-us/office/vba/api/excel.range.address

            -
            Edité par Stormweaker 1 octobre 2018 à 10:24:09

            • Partager sur Facebook
            • Partager sur Twitter
              1 octobre 2018 à 13:35:35

              Merci beaucoup pour ton aide Stormweaker. Grâce à ton lien j'ai finalement pu coder ce que je voulais.

              Malheureusement en grand débutant en VBA que je suis, je ne pensais pas que les adresses me seraient renvoyées sous la forme $A$1587. Du coup, je ne pouvais pas l'insérer dans la suite de mon code comme je voulais.

              Finalement, je suis revenu aux solutions qui comptent le nombre de lignes d'une feuille de calcul en partant de la fin. Puis j'ai concaténé le résultat avec mon fameux "A" (ce que je ne voulais pas faire XD) et maintenant tout marche à merveille.

              Dim lastCell As Long
              lastCell = Selection.Cells(Rows.Count, 1).End(xlUp).Row - 1
              Range("A1:A" & lastCell)

              Merci pour vos aides et désolé pour le dérangement.

              • Partager sur Facebook
              • Partager sur Twitter
                1 octobre 2018 à 14:08:47

                Tu peux utiliser .Address pour renvoyer A1587, il faut le préciser avec les paramètres RowAbsolute et ColumnAbsolute, ils valent True par défaut, il faut donner False (les références absolues sont les "$"). Mais même avec ça tu étais obligé de faire une concaténation avec "A1:", donc ça ne change pas grand chose.

                Si tu voulais totalement éviter une concaténation tu aurais pu faire un Range("A1").Resize(nbLignes,1).

                • Partager sur Facebook
                • Partager sur Twitter
                  1 octobre 2018 à 17:49:49

                  Re Bonjour,

                  Tu as raison, StormWeaker en donnant la valeur false aux paramètres RowAbsolute et ColumnAbsloute on obtient bien A1587 sans les $. Par contre après la concaténation est inévitable.

                  Dim last As String
                  last = Selection.End(xlDown).Address(RowAbsolute:=False, ColumnAbsolute:=False)
                  Range("A1:"& last).Select


                  Resize aussi marche très bien. Mais là il faut au préalable récupérer le numéro de la dernière ligne

                  Dim lastcell As Long
                  lastcell = Selection.Cells(Rows.Count, 1).End(xlUp).Row
                  Range("A1").Resize(lastcell, 1)

                  Toutes ces solutions marchent très bien. Merci beaucoup pour ton aide. Grâce à toi je dormirai un peu moins zéro ce soir:D

                  -
                  Edité par Gelal 1 octobre 2018 à 17:53:07

                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Excel-VBA] Dernière ligne utilisée

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown