Dernière ligne d'une colonne

roni44 Messages postés 8 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 30 octobre 2018 - 19 janv. 2011 à 23:30
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 20 janv. 2011 à 15:59
Bonjour, je suis en train de faire un petit programme VBA sur Excel 2007. Par contre j'ai un petit soucis, je comprends pas pourquoi une routine marche une fois sur 4. Je dois avoir un problème de sheet.
J'ai un bouton sur une page d'accueil qui ouvre un formulaire qui s'initialize en affichant des items dans une listbox. Ces items se trouvent dans une autre sheet "achat". J'ai mis ce code pour initialiser :
Private Sub UserForm_Initialize()
Dim DerLigne As Long
Dim x As Long
x = 0
DerLigne = 0
With Sheets("Achats")
DerLigne = Range("A333333").End(xlUp).Row
For x = 1 To DerLigne
If Range("A1").Offset(x, 9).Value = "Commandé" Then
ArticleReception.AddItem "[" & Range("A1").Offset(x, 1) & "] " & Range("A1").Offset(x, 3)
End If
Next
End With
DateReception.Value = Date
End Sub

Au début j'avais mis DerLigne = Range("A1").End(xlDown).Row mais il me faisait des dépassement capacité.
Et voila une fois sur 2 il me donne une valeur de DerLigne abérante, soit 1 alors qu'il y a 20 lignes de remplies...
D'ou vient le problème?
Cordialement

9 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 janv. 2011 à 08:07
Bonjour,
Voici une fonction pour trouver la dernière ligne remplie d'une colonne:

'Chercher la dernière ligne de la colonne A et de la feuille active
Function LastRow()
'feuille active, colonne A
  LastRow = Cells(Cells.Rows.Count, "A").End(xlUp).Row
End Function
Sub DerniereLigne ()
DerLigne = LastRow
End Sub



Le Pivert
0
roni44 Messages postés 8 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 30 octobre 2018
20 janv. 2011 à 11:46
Merci, mais je comprend toujours pas il me retourne 1ou 2 pour lastrow alors que j'ai les cellules A1 à A20 qui sont non vides...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 janv. 2011 à 12:02
As-tu déclaré ta variable "DerLigne" en haut de ton module en dehors de tes macros pour qu'elle soit reconnue dans tes 2 macros?
Ensuite tu mets un MsgBox pour voir le retour comme ceci:
Sub DerniereLigne ()
DerLigne = LastRow
MsgBox LastRow
End Sub

@+ Le Pivert
0
roni44 Messages postés 8 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 30 octobre 2018
20 janv. 2011 à 14:52
Mon problème était au niveau de la page selectionnée pour les opérations, du coup pour éviter les problèmes j'ai mis la page Achats en active et la ca marche.
Petite autre question :
J'ai une listbox qui recense les noms des produits dont l'état est marqué "commandé" et je voulais savoir comment je pouvais récupérer le numéro de la ligne comprenant l'article sélectionné? Car je veux que dès que je sélectionne un article, une textbox affiche la quantité qui était commandée.
Merci d'avance
0

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

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 janv. 2011 à 15:30
Voici 2 exemples:

Private Sub ListBox1_Click()
On Error Resume Next
Dim nom As String
Dim ligne As String
nom = ListBox1.Value 'on récupère le nom
MsgBox nom
ligne = ListBox1.ListIndex 'on récupère le N° de ligne
'La valeur de la propriété ListIndex de la 1ère de la liste est zéro
'la valeur de la 2èmeliste est 1 etc...
MsgBox ligne + 1 'Donc ligne + 1 pour récupérer la bonne ligne
End Sub



Le Pivert
0
roni44 Messages postés 8 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 30 octobre 2018
20 janv. 2011 à 15:43
Merci beaucoup Le Pivert. Alors en fait justement ce n'est pas vraiment ca que je voulais. Car dans ma listbox j'affiche uniquement les articles d'une page dont la colonne état affiche "commandé". Donc par exemple les 3 premiers articles peuvent se trouver dans les lignes 5,10 et 13. Et justement je voudrais qu'on retrouve la ligne 10 lorsque l'on clique sur le deuxième article de la listbox.
Cordialement
0
roni44 Messages postés 8 Date d'inscription mardi 29 juillet 2003 Statut Membre Dernière intervention 30 octobre 2018
20 janv. 2011 à 15:51
Je pense que je vais me débrouiller sinon en connaissant la ligne de la listbox, reporter ca sur la nieme ligne contenant l'état "commandé"...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 janv. 2011 à 15:56
Je ne sais pas si j'ai bien compris, voici un code pour sélectionner la cellule sur la feuille. Ne pas oublier d'activer la feuille où se trouve les données:

Private Sub ListBox1_Click()
On Error Resume Next
Dim ligne As String
'activer la feuille si besoin
ligne = ListBox1.ListIndex 'on récupère le N° de ligne
'La valeur de la propriété ListIndex de la 1ère de la liste est zéro
'la valeur de la 2èmeliste est 1 etc...
'MsgBox ligne + 1 'Donc ligne + 1 pour récupérer la bonne ligne
 Feuil1.Cells(ligne + 1, 1).Select 'on sélectionne la cellule
End Sub



Le Pivert
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
20 janv. 2011 à 15:59
Dans cet exemple c'est la colonne A où ce trouve les données. Adapter si besoin
Feuil1.Cells(ligne + 1, 3).Select 'colonne C
Le Pivert
0
Rejoignez-nous