Fonction de recherche de la dernière ligne

mimoz2 Messages postés 16 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à trouver et à stocker le numéro de la dernière ligne d'une de mes colonnes. Le problème est que le code que j'entre me renvoie dans la variable une valeur égale à 0. Auriez-vous une idée d'où cela pourrait venir ?

J'ai déclaré et initialisé ma variable de cette façon :

Dim fin_col As Integer
fin_col = range("A65536").End(xlUp).Row

Merci par avance,
Et bonne journée à tous.

5 réponses

  1. wakafa Messages postés 40 Statut Membre
     
    Bonjour,
    Tu essaies la syntaxe suivante:
    Dim fin_col As Integer
    fin_col =Sheets("Feuilx"). range("A65536" & Rows.Count).End(xlUp).Row+1
    Feuilx= la feuille dans laquelle vous travaillez
    9a permet de trouver le numéro de la derniere ligne non vide. pour le stockage ça dépend ou tu veux stocker ta valeur
    0
  2. mimoz2 Messages postés 16 Statut Membre
     
    Je souhaitais stocker cette valeur afin de m'en servir comme fin de boucle for. Et par la suite tracer automatiquement un graphe.

    fin_col = Sheets("data_Temp").range("A65536" & Rows.Count).End(xlUp).Row

    For i = 2 To fin_col
    abscisse(i) = range("B" & i).Value
    ordonnee(i) = range("A" & i).Value
    Next

    Une nouvelle erreur m'est renvoyée, cette dernière est du type "l'indice n'appartient pas à la sélection" et ma valeur de fin_col est toujours à zéro. J'ai du mal à comprendre pourquoi.
    0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a vus deux,

    mimoz2:
    j'entre me renvoie dans la variable une valeur égale à 0.
    Impossible, c'est au mini 1

    wakafa:
    ce code ne marche pas
    fin_col =Sheets("Feuilx"). range("A65536" & Rows.Count).End(xlUp).Row+1

    et s'il marchait ca donnerait la premiere cellule vide, pas la derniere non vide

    celui-ci oui:
    fin_col = Sheets("data_Temp").Range("A" & Range("A65536").End(xlUp).Row).Row
    
    0
  4. mimoz2 Messages postés 16 Statut Membre
     
    Bonjour f894009,

    L'erreur "l'indice n'appartient pas à la sélection" continue à apparaître au niveau de la ligne :

    fin_col = Sheets("data_Temp").range("A" & range("A65536").End(xlUp).Row).Row

    Sauriez-vous d'où cela peut venir ?

    Merci pour votre aide.
    0
    1. mimoz2 Messages postés 16 Statut Membre
       
      De plus, la valeur renvoyée par range("A65536").End(xlUp).Row est 1 et fin_col = 0.
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > mimoz2 Messages postés 16 Statut Membre
       
      Re,

      Sheets("data_Temp")
      existe au moins ????
      0
    3. mimoz2 Messages postés 16 Statut Membre
       
      Bien sur, je l'ai déclaré de la manière suivante

      Dim ShTemp As Worksheet
      Set ShTemp = Workbooks("Outil_V1.xlsm").Sheets("dataTemp")
      fin_col = ShTemp.range("A" & range("A65536").End(xlUp).Row).Row
      0
    4. mimoz2 Messages postés 16 Statut Membre
       
      J'ai réussi à faire fonctionner la formule, mais cette dernière renvoie toujours 1 pour ma variable fin_col
      0
    5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > mimoz2 Messages postés 16 Statut Membre
       
      Re,

      fin_col = ShTemp.Range("A" & ShTemp.Range("A65536").End(xlUp).Row).Row
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    une maquette -démo
    http://www.cjoint.com/c/FCwoDeAR86F

    le code
    Option Explicit
    '-----------------------------------
    Sub graf()
    Dim Derlig As Long, Ordonnee, Abcisse
    With ActiveSheet
    Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
    Ordonnee = Application.Transpose(.Range("A2:A" & Derlig))
    Abcisse = Application.Transpose(.Range("B2:B" & Derlig))
    End With

    'restitution pour vérifier
    With Sheets(2)
    .Range("B1") = "abcisse"
    .Range("B2").Resize(UBound(Abcisse)) = Application.Transpose(Abcisse)
    .Range("D1") = "ordonnée"
    .Range("D2").Resize(UBound(Ordonnee)) = Application.Transpose(Ordonnee)
    End With
    End Sub

    0
    1. mimoz2 Messages postés 16 Statut Membre
       
      Merci beaucoup pour ton aide, mais je suis un peu débutante en VBA et je n'ai pas entièrement compris ce qui étais effectué grâce à ce code. Pourrais-tu m'en dire un peu plus ?

      Par ailleurs, je pense que ce format n'est pas reconnu par la fonction :

      With ActiveChart
      .SeriesCollection.NewSeries
      .SeriesCollection(1).ShTemp.XValues = abscisse 'Abscisses
      .SeriesCollection(1).ShTemp.Values = ordonnee 'Ordonnées
      'Définit le type (Courbe)
      .ChartType = xlLine
      End With


      car un message d'erreur apparait au niveau de la ligne soulignée.
      Merci encore et désolée de t'ennuyer.
      0
    2. mimoz2 Messages postés 16 Statut Membre
       
      En ajoutant un espion sur ordonne et abscisse, j'ai l'impression que cette routine remplit directement les deux variables, est-ce bien cela ? Comment est-ce possible sans aucune boucle ?
      0
      1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320 > mimoz2 Messages postés 16 Statut Membre
         
        Les variables tableaux recense les valeurs dans les cellules désignées par
        tablo=range("A2:A100") et sont envoyées en mémoire RAM

        lorsqu'on restitue par exemple en sheets(2) range(C2:A100)=tablo, on renvie les valeurs dans les cellules (quand tu veux copier une plage d'un endroit à un autre, c'est beaucoup + rapide et propre qu'un classique copy- paste)

        pourquoi transpose ?

        dans le cas d'une colonne de cellules, si tu écris
        tablo=range(A2:100) le tableau est de la forme tablo(x,1) ce qui veut dire X données sur 1 dimension , ce dont se moque le processeur et la RAM qui ne s'intéressent qu'aux valeurs ...
        Transpose permet d'avoir un tablo de la forme tablo(X) horizontal en RAM,ce qui simplifie le code

        à la restitution il faut refaire un transpose pour restituer verticalement
        0