Bonjour,
Je rencontre une difficulté sur VBA.
Je dois aller chercher la dernière cellule non vide dans une colonne. La difficulté est que je suis dans une boucle (For / Next) et que le numéro de la colonne change.
Sauriez-vous comment faire?
Merci
Bonjour,
Je rencontre une difficulté sur VBA.
Je dois aller chercher la dernière cellule non vide dans une colonne. La difficulté est que je suis dans une boucle (For / Next) et que le numéro de la colonne change.
Sauriez-vous comment faire?
Merci
Bonjour Mickael, bonjour le forum,
Si l'on considère la variable COL comme le numéro de colonne dans la boucle et DL la dernière ligne de la colonne ça devrait le faire avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part DL = Cells(Application.Rows.Count, COL).End(xlUp).Row
Merci je vais essayer ça
Comme il s'agit d'un projet assez compliqué (pour moi) dans lequel s'inscrit cette problématique, je risque de revenir pour d'autres problèmes ^^
En fait, juste pour préciser, la fonction Range.End(xlDirection) trouve la dernière cellule non vide si elle est lancée depuis une range non vide, si elle est lancée depuis une zone vide, elle trouvera la PREMIERE cellule non vide...
En gros :
Si tu veux la dernière cellule en colonne A, alors tu es tenté d'utiliser Range("A1").End(xlDown)... Ce qui, dans ce cas, fonctionnera parfaitement. Seulement, si tu veux être certain d'utiliser la dernière cellule de la colonne, part d'en bas, donc de la
A B C D E 1 XXX XXX XXX 2 XXX 3 4 XXX 5
Rows.Count indiquera le numéro de la dernière ligne (égal au nombre de lignes...), passer par cette propriété est important car suivant la version du workbook, tu n'auras pas le même nombre de lignes, donc Range("A1048576").End(xlUp) pourrait planter chez toi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Range("A" & Rows.Count).End(xlUp) 'que tu peux également écrire 'Cells(Rows.Count, "A").End(xlUp) 'voire Cells(Rows.Count, 1).End(xlUp)
Pourquoi est-il préférable d'utiliser la dernière cellule du bas et remonter ? Pour la simple et bonne raison que s'il y a ne serait-ce qu'UN trou dans ta colonne, la fonction End s'arrêtera sur la dernière cellule avant ce trou. Par exemple, Range("A1").End(xlToRight) te donnera la Range("B1") et non la "D1" que tu vises ! Donc tu pars de la droite avec :
Ensuite, pour récupérer le numéro de ligne de la cellule désignée, tu lis la propriété .Row comme indiqué par Thautheme plus haut :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Cells(1,Columns.Count).End(xlToLeft)
Code : Sélectionner tout - Visualiser dans une fenêtre à part DerLigne = Cells(Rows.Count,[TaColonne]).End(xlUp).Row
Salut, toujours utile de lire ceci
Merci de vos réponses !
Cependant, je n'arrive pas à résoudre complètement cela ...
Voici mon code :
Quand je lance la macro, j'ai une incompatibilité de type pour : DERNIEREDATE = Cells(DL, I)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Sub Bilan_MP() Dim A As Integer 'a est le numéro de feuille Dim I As Long 'i est le numéro de colonne dans les tableaux de maintenance Dim J As Long 'j est la ligne dans la feuille "Bilan" Dim NEWDATE As Date 'Prochaine échéance de maintenance Dim DATEDEBUT As Date 'Début de la période observée Dim DATEFIN As Date 'Fin de la période observée Dim COL As Long 'Numéro de colonne dans la boucle Dim DL As Long 'Numéro de ligne de la dernière cellule non vide Dim DERNIEREDATE As Date 'Dernière date de la colonne observée Cells(6, 2).Select For A = 3 To Sheets.Count For I = 3 To Columns.Count DL = Cells(Rows.Count, I).End(xlUp).Row DERNIEREDATE = Cells(DL, I) NEWDATE = DateAdd("m", Cells(13, I), DERNIEREDATE) DateDébut = Sheets("Bilan").Range("C1") DATEFIN = Sheets("Bilan").Range("E1") If Not IsEmpty(Sheets(A).Cells(12, I).Value) And CDate(NEWDATE) > CDate(DATEFIN) And CDate(NEWDATE) < CDate(DateDébut) Then ActiveCell.Value = Sheets(A).Cells(12, I).Value ActiveCell.Offset(1, 0).Select End If Next I Next A End Sub
Ce que je tente de faire, est ceci:
Je cherche dans ma colonne la dernière date renseignée.
Si cette date est comprise dans entre DATEDEBUT et DATEFIN alors elle doit apparaître dans ma feuille "BILAN".
Partager