Localisation plage inconnue, comment stocker

Lina -  
 amigo -
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

  1. amigo
     
    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
    1. Lina
       
      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
      0
  2. amigo
     
    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+.
    0
    1. Lina
       
      Bonjour,
      le message box sort toujours "tableau vide".
      0
  3. amigo
     
    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
    
    0
  4. amigo
     
    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
    
    0
    1. Lina
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. amigo
     
    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+
    0
    1. Lina
       
      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,
      0
  7. amigo
     
    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+.
    0
  8. Lina
     
    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
    0
  9. amigo
     
    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+.
    0