Dernière ligne d'une colonne excel

Résolu
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016 - 19 mai 2016 à 10:28
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016 - 20 mai 2016 à 11:54
Bonjour à tous,

j'aimerais avoir le numéro de la dernière ligne d'une colonne excel, j'ai utilisé plusieurs méthodes mais j'ai toujours le même problème, apparemment c'est une question de référence qui n'est pas coché dans vb6 et que je ne reconnait pas.

ci dessous mon bout de code

' Positionnement à l'intérieur du classeur
Set wbExcel = wbExcel.Worksheets(1)
Set wsExcel = wbExcel.Range("A2:A65535")

'Recherche de la dernière ligne

FinalRow = wbExcel.Cells(Rows.Count, 1).End(xlUp).Row

l'erreur rencontré est la suivante: Error 424 Object required

19 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
19 mai 2016 à 10:43
Bonjour,
On ne voit pas où et comment :
- tu as déclaré et initialisé l'objet Application Excel
- tu as déclaré et initialisé l'objet Classeur à traiter
- tu as déclaré la variable Feuille à traiter
Ces objets sont indispensables au "pilotage" de Excel, de ton classeur et de ta feuille. Ils doivent être utilisés dans ton code
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
Modifié par jordane45 le 19/05/2016 à 11:59
je m'excuse j'été pas assez clair. au fait j'ai tout déclaré normalement, vous trouverez ci dessous tout mon code, la première partie consiste à introduire manuellement le chemin du fichier excel

Private Sub Command3_Click()

'KPD-Team 2001
    'URL: [http://www.allapi.net/]
    'E-Mail: KPDTeam@Allapi.net
    Dim chemin As String
    chemin = Space(255)
    'If we're on WinNT, call the unicode version of the function
    If IsWinNT Then
    GetFileNameFromBrowseW Me.hWnd, StrPtr(chemin), 255, StrPtr("c:\"), StrPtr("txt"), StrPtr("Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0)), StrPtr("The Title")
 

    Else
        GetFileNameFromBrowseA Me.hWnd, chemin, 255, "c:\", "txt", "Text files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All files (*.*)" + Chr$(0) + "*.*" + Chr$(0), "The Title"
           
    End If


Set oXL = CreateObject("Excel.Application")
oXL.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = oXL.Workbooks.Open(chemin)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)


' Positionnement à l'intérieur du classeur
       Set wbExcel = wbExcel.Worksheets(1)
       Set wsExcel = wbExcel.Range("A2:A65535")

FinalRow = wbExcel.Cells(Rows.Count, 1).End(xlUp).Row

MsgBox "FinalRow = " & FinalRow

End Sub


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
Modifié par jordane45 le 19/05/2016 à 11:59
Public Function IsWinNT() As Boolean
    Dim myOS As OSVERSIONINFO
    myOS.dwOSVersionInfoSize = Len(myOS)
    GetVersionEx myOS
    IsWinNT = (myOS.dwPlatformId = VER_PLATFORM_WIN32_NT)

End Function

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 19/05/2016 à 12:53
Bonjour
A mon avis tu t'es mélangé les pinceaux entre wbExcel et wsExcel ( le classeur et la feuille)
Cette instruction est en double
Set wsExcel = wbExcel.Worksheets(1)

ensuite tu définis une plage de cellules et tu appelles cette plage avec le même nom que ta feuille ( wsExcel)
Ensuite ton finalrow se fait sur wbExcel ( soit le classeur pour moi) alors qu'il devrait se faire sur la feuille et cela sans se soucier d'une plage quelconque

Quant à la solution elle est surement là : http://codes-sources.commentcamarche.net/source/101370-determination-de-la-derniere-ligne-reelle-d-une-colonne-excel
0

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

Posez votre question
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 13:22
j'ai essayer de mettre un peu d'ordre à mon code

Set oXL = CreateObject("Excel.Application")
oXL.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = oXL.Workbooks.Open(chemin)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)


' Positionnement à l'intérieur du classeur
Set wgExcel = wsExcel.Range("A2:A65535")

sinon concernant la plage je n'ai besoin que de la colonne A

j'ai essayé avec la fonction

Private Function derlig_reelle(plage As Range) As Long
'cas d'absence de données dans la plage à traiter :
If WorksheetFunction.CountA(plage) = 0 Then derlig_reelle = 1: Exit Function
'dans tous les autres cas :
derlig_reelle = plage.Find("*", , , , , xlPrevious).Row
End Function

mais j'ai cette erreur de compilation : user defined type not defined
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 19/05/2016 à 15:54
J'y connais pas grand chose en VBA ( je suis plutôt VB Net)
J'ai trouvé ceci sur un forum

Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row


http://www.developpez.net/forums/d1036078/logiciels/microsoft-office/excel/macros-vba-excel/vba-derniere-ligne-d-colonne/

ce qui pourrait te donner

Set oXL = CreateObject("Excel.Application")
oXL.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = oXL.Workbooks.Open(chemin)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Dim DernLigne As Long
DernLigne = wsExcel.Range("A" & Rows.Count).End(xlUp).Row


Sans certitude
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 16:03
je l'ai déjà essayer mais ça me donne toujours Error 424 Object required
je crois que je dois ajouter une référence pour reconnaître le "count" , le problème c'est que je ne sais à quelle bibliothèque je dois me référencer
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
19 mai 2016 à 16:15
pour moi Rows.count te donne le nombre de lignes de la feuille Excel !
Il n'y a aucune référence à rajouter normalement
A cette ligne ci
DernLigne = wsExcel.Range("A" & Rows.Count).End(xlUp).Row

est-ce que wsExcel est obligatoire ? je l'ai rajouté sans être sûr
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 16:20
oui c'est obligatoire
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
Modifié par vb95 le 19/05/2016 à 16:39
A quelle ligne se trouve l'erreur exactement ?
Quelle version d'Excel ?
Pilotes-tu Excel depuis VB 6 ?
As-tu établi une référence à Microsoft Excel Objects, dans le menu Outils / Références de VB 6.( car je viens de me rendre compte que tu pilotes peut-être Excel depuis VB 6) ?
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
19 mai 2016 à 18:44
l'erreur est dans la ligne suivante:
DernLigne = wgExcel.Range("A" & Rows.Count).End(xlUp).Row

j'ai excel 2013 office 15.0
oui je le pilote depuis VB6
oui la référence Microsoft Office 15.0 Object Library est déjà cochée
0
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
19 mai 2016 à 20:52
La feuille est l'objet WsExcel et non WgExcel
DernLigne = wgExcel.Range("A" & Rows.Count).End(xlUp).Row 

a remplacé par
DernLigne = wsExcel.Range("A" & Rows.Count).End(xlUp).Row 
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
20 mai 2016 à 10:06
Toujours la même erreur
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/05/2016 à 10:39
Toujours la même erreur

et moi, j'attends également toujours les réponses à mon message 1
Tant que les objets à traiter n'auront pas été tous valablement déclarés (par Dim ...) ET intialisés (par Set ...), le tout dans un ordre logique (application excel, puis classeur,puis feuille de calcul, ma foi ...
toute ligne de code supposée utiliser l'objet worksheet concerné cherchera cet objet en vain et provoquera l'apparition du message d'erreur reçu.

EDIT : et enfin, quoi !
Le mien, de tout premier réflexe, aurait été de vérifier l'existence de mes objets !
Si par exemple, j'ai cru avoir créé un objet Worksheet toto, je testerais cette création par un tout bête :
msgbox toto.name
et( si cela provoque un message d'erreur, c'est que mon objet toto a mal été crée et n'est pas une feuille.
Voilà voilà !

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
20 mai 2016 à 10:44
Dim oXL As Excel.Application
Dim wbExcel As Excel.Workbook
Dim wsExcel As Excel.Worksheet
Dim wgExcel As Excel.Range

Set oXL = CreateObject("Excel.Application")
oXL.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = oXL.Workbooks.Open(chemin)
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)


' Positionnement à l'intérieur du classeur

Set wgExcel = wsExcel.Range("A2:A65535")

Dim DernLigne As Long
DernLigne = wsExcel.Range("A" & Rows.Count).End(xlUp).Row

MsgBox "DernLigne = " & DernLigne

Normalement ça devrait marcher comme ça, mais lorseque j'ai déclarer les objets suivants:

Dim oXL As Excel.Application
Dim wbExcel As Excel.Workbook
Dim wsExcel As Excel.Worksheet
Dim wgExcel As Excel.Range

j'ai eu cette erreur: compile error: user defined type not defined
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/05/2016 à 11:05
Et moi, je n'ai aucune erreur en exécutant ceci depuis VB6, sans même cocher la moindre référence à Excel :
Dim oXL As Object
Dim wbExcel As Object
Dim wsExcel As Object
Dim wgExcel As Object

Set oXL = CreateObject("Excel.Application")

Set wbExcel = oXL.Workbooks.Open("D:\classeur1.xlsm")
oXL.Visible = True
Set wsExcel = wbExcel.Worksheets(1)
wsExcel.Range("A1").Value = "Alors ? tu vois ?"

Et j'ai bien "alors ? tu vois ?" en cellule A1 de ma feuille 1 du classeur D:\classeur1.xlsl
Qu'ai-je fait ? Rien de bien "sorcier", hein ... Juste d e la logique élémentaire

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
20 mai 2016 à 11:09
Merci pour ton aide :)

maintenant je ne trouve pas ce qui cloche dans cette ligne

DernLigne = wsExcel.Range("A" & Rows.Count).End(xlUp).Row

l'erreur rencontré est la suivante: Error 424 Object required
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2016 à 11:20
C'est pourtant simple !
1) comment veux-tu que VB6 comprenne ce qu'est Rows.Count ?
Rows.count est une propriété de l'application Excel invoquée.
2) et comment veux-tu que VB6 connaisse la valeur de la constante Excel xlUp ? c'est une constante de Excel, pas de VB6
et quelle est cette constante ? voilà bien la preuve de ce que l'on ne saurait piloter une application sans la connaître à fond. xlUp vaut -4162
et donc, tout bêtement :
DernLigne = wsExcel.Range("A" & oXL.Rows.Count).End(-4162).Row
Tu piges ?

0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
20 mai 2016 à 11:26
merciiiii beaucouuup
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 mai 2016 à 11:30
Pas de quoi, mais :
1) pense dorénavant à répondre aussitôt aux questions posées (tu aurais gagné beaucoup de temps)
2) pense à libérer maintenant cette discussion : un clic sur le tag RESOLU au niveau de ton tout premier message
0
Portmand Messages postés 12 Date d'inscription jeudi 19 mai 2016 Statut Membre Dernière intervention 20 mai 2016
20 mai 2016 à 11:54
c'est fait!
0
Rejoignez-nous