Localisation plage inconnue, comment stocker

Bonjour,

dans VBA excel:
je souhaite stocker dans une variable "nlignes" le nombre de lignes, le hic, c'est que la localisation de la plage est inconnue, comment puis je procéder ?
merci pour votre réponse
Configuration: Windows Vista
Internet Explorer 7.0

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour,

    Si tu devais repérer cette plage en observant le tableau, comment t'y prendrais-tu, qu'est ce qui déterminerait le debut et la fin de cette plage? Il y a bien une valeur, un texte, une date ...

    A+.
    1. Bonjour,

      Ilfaut faire avec l'objet "selection".
      La question est "donnez les instructions qui permettent de stocker dans une variable le nombre de lignes, sachant que la localistion de la "plage" de meme que ses dimensions ne sont pas connues.

      à part fixer le "debutdeligne" avec une cellule, je ne sais pas faire.
      merci
  2. Bonjour,

    Essaie cette macro
    Sub Macro1()
    
    Dim DerniereLigne As Integer, PremiereLigne As Integer
    Dim NombreLignes As Integer
    
      Application.ScreenUpdating = False
    
    'selection denière ligne
      Selection.SpecialCells(xlCellTypeLastCell).Activate
      DerniereLigne = ActiveCell.Row
    
    'selection première ligne
      For PremiereLigne = 1 To DerniereLigne
          Range("A" & PremiereLigne).Select
          Selection.End(xlToRight).Activate
          If ActiveCell.Value <> "" Then Exit For
      Next
    
      Application.ScreenUpdating = True
      NombreLignes = DerniereLigne - PremiereLigne + 1
    
      If NombreLignes > 0 Then
            MsgBox "Le tableau commence à la ligne " & PremiereLigne & _
            " et finit à la ligne " & DerniereLigne & Chr(10) & _
            "Nombre total de lignes : " & NombreLignes
      Else
            Range("A1").Select
            MsgBox "Tableau vide"
      End If
    
    End Sub
    


    A+.
    1. Bonjour,
      le message box sort toujours "tableau vide".
  3. Re,

    Quel genre de données il y a dans ton tableau, parce chez moi j'ai essayé avec du texte et des nombre et ça marche bien.

    Essaie cette macro pour voir si la dernière ligne est bien trouvée.
    Sub Macro2()
    
    Dim DerniereLigne As Integer
    
    'selection denière ligne
      Selection.SpecialCells(xlCellTypeLastCell).Activate
      DerniereLigne = ActiveCell.Row
    
    Msgbox "Dernière ligne : " & DerniereLigne
    
    End Sub
    
    1. Re,

      Dans la macro initiale que j'avais posté, il y a un Bug si le tableau n'a qu'une seule ligne de données, la macro renvoie "Tableau vide".

      Voici la macro corrigée
      Sub Macro1()
      
      Dim DerniereLigne As Integer, PremiereLigne As Integer
      Dim NombreLignes As Integer
      
        Application.ScreenUpdating = False
      
      'selection denière ligne
        Selection.SpecialCells(xlCellTypeLastCell).Activate
        DerniereLigne = ActiveCell.Row
      
      'selection première ligne
        For PremiereLigne = 1 To DerniereLigne
            Range("A" & PremiereLigne).Select
            Selection.End(xlToRight).Activate
            If ActiveCell.Value <> "" Then Exit For
        Next
      
      If PremiereLigne > DerniereLigne Then PremiereLigne = DerniereLigne
      
        Application.ScreenUpdating = True
        NombreLignes = DerniereLigne - PremiereLigne + 1
        
      If Not (ActiveCell.Value <> "") And NombreLignes = 1 Then NombreLignes = 0
        
        If NombreLignes > 0 Then
              MsgBox "Le tableau commence à la ligne " & PremiereLigne & _
              " et finit à la ligne " & DerniereLigne & Chr(10) & _
              "Nombre total de lignes : " & NombreLignes
        Else
              Range("A1").Select
              MsgBox "Tableau vide"
        End If
      
      End Sub
      
      1. BONJOUR,

        elle marche pour une grande partie.
        lorsque j'ai des données sur la colonne A (et plusieurs lignes de données),elle ne marche pas .
        pour les autres colonnes, ca marche.

        merci beaucoup
    2. Bonjour,

      On va en venir à bout, j'ai rajouté un test pour selectionner la première ligne du tableau et cette fois ce sera bon
      'selection première ligne
        For PremiereLigne = 1 To DerniereLigne
            Range("A" & PremiereLigne).Select
            If ActiveCell.Value <> "" Then Exit For
            Selection.End(xlToRight).Activate
            If ActiveCell.Value <> "" Then Exit For
        Next
      


      A+
      1. Re,

        Cela marche lorsqu'on met 1 colon A2 à A6 par exemple, mais j'ai l'impression qu'il garde en mémoire ce résultat.pourtant j'ai initialisé.
        cela ne marche pas quand on met une colonne de D1 à D8 par exemple.

        je peux vous poser une autre question :
        j'ai excel 2007 avec vista et, à chaque fois que j'ouvre EXCEL, une box montre "L'ouverture du projet VBA de ce fichier nécessite un composant qui n'est pas installé.Le fichier sera vert sans le projet VBA.
        Pour plus d'information, recherchez "Convertisseurs VBA" sur Microsoft Office Online" . je ne sais quoi installée en plus.

        merci pour votre réponse,
    3. Bonjour,

      Bon, encore un essai pour la macro.
      Sub Macro1()
      Dim DerniereLigne As Integer, PremiereLigne As Integer
      Dim NombreLignes As Integer, LastRow As Integer, i As Integer
      
        Application.ScreenUpdating = False
      
      'selection denière ligne
        Selection.SpecialCells(xlCellTypeLastCell).Activate
        LastRow = ActiveCell.Row
      
      'selection première ligne
        For PremiereLigne = 1 To LastRow
            Range("A" & PremiereLigne).Select
            If ActiveCell.Value <> "" Then Exit For
            Selection.End(xlToRight).Activate
            If ActiveCell.Value <> "" Then Exit For
        Next
        If PremiereLigne > LastRow Then
              Range("A1").Select
              MsgBox "Tableau vide"
              Application.ScreenUpdating = True
              Exit Sub
        End If
        DerniereLigne = 1
        For i = PremiereLigne To LastRow
            Range("A" & i).Select
            If ActiveCell.Value <> "" Then DerniereLigne = i
            Selection.End(xlToRight).Activate
            If ActiveCell.Value <> "" Then DerniereLigne = i
        Next
      
        NombreLignes = DerniereLigne - PremiereLigne + 1
        Range("a1").Activate
        Application.ScreenUpdating = True
        MsgBox "Le tableau commence à la ligne " & PremiereLigne & _
              " et finit à la ligne " & DerniereLigne & Chr(10) & _
              "Nombre total de lignes : " & NombreLignes
      
      End Sub
      

      Pour ta question sur la box qui s'affiche à l'ouverture d' Excel 2007, ça vient du fait que le classeur contient des macros au format Excel 95. Pour fonctionner avec Excel 2007, ces macros doivent etre converties au nouveau format. Malheureusement, ce convertisseur VBA n'est pas fournis avec office 2007, il doit être acheté et installé séparément.

      https://support.microsoft.com/fr-fr/help/926430/you-are-requested-to-search-microsoft-office-online-for-vba-converters

      Si c'est le cas pour toi, demande à quelqu'un qui à Excel 2000 ou 2003 d'enregistrer tes fichiers au format 2000 ou 2003, ensuite Excel 2007 les ouvrira sans problèmes.

      A+.
      1. Re,

        Super, Ca marche !!!

        Bon, juste 1 derniere question, peux tu me dire ce que veut dire ces 2 lignes :

        Application.ScreenUpdating = True

        Selection.SpecialCells(xlCellTypeLastCell).Activate

        merci
        1. Re,

          Application.ScreenUpdating = False
          Cette instruction empèche le rafraichissement de l'écran, c'est pratique quand on cherche des cellules dans un tableau, l'affichage ne bouge pas dans tous les sens. Quand c'est fini on réactive l'affichage dynamique.
          Application.ScreenUpdating = True

          Selection.SpecialCells(xlCellTypeLastCell).Activate
          Excel mémorise des cellules qui ont signification spéciale. Cette instruction active la dernière cellule non vide d'un tableau (xlCellTypeLastCell).
          Enfin, elle devrait parce qu'en fait, ça ne marche pas toujours. Elle garde en mémoire la dernière cellule même si elle a été effacée, c'est pourquoi la macro ne marchait pas avant que je trouve le moyen de contourner le problème.

          A+.