Fonction de recherche de la dernière ligne

Fermé
mimoz2 Messages postés 16 Date d'inscription lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016 - 21 mars 2016 à 15:30
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 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 40 Date d'inscription mercredi 22 juillet 2015 Statut Membre Dernière intervention 7 décembre 2020
Modifié par wakafa le 21/03/2016 à 16:36
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
21 mars 2016 à 16:55
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 17184 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 12 avril 2024 1 701
Modifié par f894009 le 22/03/2016 à 09:17
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 10:19
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 10:29
De plus, la valeur renvoyée par range("A65536").End(xlUp).Row est 1 et fin_col = 0.
0
f894009 Messages postés 17184 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 12 avril 2024 1 701 > mimoz2 Messages postés 16 Date d'inscription lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 11:31
Re,

Sheets("data_Temp")
existe au moins ????
0
mimoz2 Messages postés 16 Date d'inscription lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 11:33
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 11:50
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 17184 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 12 avril 2024 1 701 > mimoz2 Messages postés 16 Date d'inscription lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 12:22
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
22 mars 2016 à 15:30
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 15:38
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 lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
22 mars 2016 à 15:49
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 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > mimoz2 Messages postés 16 Date d'inscription lundi 21 mars 2016 Statut Membre Dernière intervention 22 mars 2016
Modifié par michel_m le 22/03/2016 à 17:09
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