Fonction de recherche de la dernière ligne

mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   - 22 mars 2016 à 17:07
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.


A voir également:

5 réponses

wakafa Messages postés 39 Date d'inscription   Statut Membre Dernière intervention  
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
f894009 Messages postés 17270 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
De plus, la valeur renvoyée par range("A65536").End(xlUp).Row est 1 et fin_col = 0.
0
f894009 Messages postés 17270 Date d'inscription   Statut Membre Dernière intervention   1 713 > mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

Sheets("data_Temp")
existe au moins ????
0
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai réussi à faire fonctionner la formule, mais cette dernière renvoie toujours 1 pour ma variable fin_col
0
f894009 Messages postés 17270 Date d'inscription   Statut Membre Dernière intervention   1 713 > mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
Re,

fin_col = ShTemp.Range("A" & ShTemp.Range("A65536").End(xlUp).Row).Row
0

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

Posez votre question
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313 > mimoz2 Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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