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
A voir également:

8 réponses

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
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
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
Lina
 
Bonjour,
le message box sort toujours "tableau vide".
0
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
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
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
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
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
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