Dernière ligne d'une colonne excel [Résolu]

Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 19 mai 2016 à 10:28 - Dernière réponse : Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention
- 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
Afficher la suite 

21 réponses

Répondre au sujet
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 19 mai 2016 à 10:43
0
Utile
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
Commenter la réponse de ucfoutu
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - Modifié par jordane45 le 19/05/2016 à 11:59
0
Utile
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.
Commenter la réponse de Portmand
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - Modifié par jordane45 le 19/05/2016 à 11:59
0
Utile
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.
Commenter la réponse de Portmand
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par vb95 le 19/05/2016 à 12:53
0
Utile
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
Commenter la réponse de vb95
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 19 mai 2016 à 13:22
0
Utile
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
Commenter la réponse de Portmand
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par vb95 le 19/05/2016 à 15:54
0
Utile
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
Commenter la réponse de vb95
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 19 mai 2016 à 16:03
0
Utile
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
Commenter la réponse de Portmand
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 19 mai 2016 à 16:15
0
Utile
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
Commenter la réponse de vb95
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 19 mai 2016 à 16:20
0
Utile
oui c'est obligatoire
Commenter la réponse de Portmand
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - Modifié par vb95 le 19/05/2016 à 16:39
0
Utile
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) ?
Commenter la réponse de vb95
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 19 mai 2016 à 18:44
0
Utile
1
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
vb95 1388 Messages postés samedi 11 janvier 2014Date d'inscriptionContributeurStatut 15 décembre 2017 Dernière intervention - 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 
Commenter la réponse de Portmand
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 20 mai 2016 à 10:06
0
Utile
Toujours la même erreur
Commenter la réponse de Portmand
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par ucfoutu le 20/05/2016 à 10:39
0
Utile
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.
Commenter la réponse de ucfoutu
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 20 mai 2016 à 10:44
0
Utile
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
Commenter la réponse de Portmand
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - Modifié par ucfoutu le 20/05/2016 à 11:05
0
Utile
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.
Commenter la réponse de ucfoutu
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 20 mai 2016 à 11:09
0
Utile
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
Commenter la réponse de Portmand
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 mai 2016 à 11:20
0
Utile
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 ?

Commenter la réponse de ucfoutu
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 20 mai 2016 à 11:26
0
Utile
merciiiii beaucouuup
Commenter la réponse de Portmand
ucfoutu 18022 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 20 mai 2016 à 11:30
0
Utile
1
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
Portmand 12 Messages postés jeudi 19 mai 2016Date d'inscription 20 mai 2016 Dernière intervention - 20 mai 2016 à 11:54
c'est fait!
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.