Classeur fermé

Le
Brat'ac
Bonjour,
Comment faire pour récupérer la dernière ligne d'une colonne d'un
classeur fermé ?

Je galère.

Merci
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacquouille
Le #26456548
Bonsoir,
Pour la dernière cel de la colonne A:
derL= Cells(Rows.Count, 1).End(xlUp).Row
----------------------------
Voici ce que j'ai trouvé chez:
http://silkyroad.developpez.com/VBA/ClasseursFermes/
----------
Les formules de liaison:
='C:Documents and
Settingsmimidossierexcel[ClasseurBase.xls]Feuil1'!$A$1
Les macros Excel4:
'Lecture de la cellule A1 dans la Feuil1 du classeur fermé
MsgBox ExecuteExcel4Macro("'C:Documents and
Settingsmimidossierexcel[ClasseurBase.xls]Feuil1'!R1C1")
------------------
Attention aux apostrophes
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Brat'ac" a écrit dans le message de groupe de discussion :

Bonjour,
Comment faire pour récupérer la dernière ligne d'une colonne d'un
classeur fermé ?
Je galère.
Merci
Michd
Le #26456597
Bonjour,
La procédure soumise retourne la première ligne disponible d'une feuille de
calcul Excel d'un classeur fermé. Avant de lancer la procédure, prends le
temps de lire les remarques de la procédure
"Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()"
Évidemment, l'exécution de cette procédure requiert l'ajout de la
bibliothèque suivante : "Microsoft ActiveX Data Objects 2.8 Library" à
partir de la barre des menus de la fenêtre de l'éditeur de code (VBA) /
Outils / références.
'-------------------------------------------------------------------------
Sub Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()
'Inspirer d'une procédure créer par keiji kounoike
Dim SsourceData As String
Dim Table1 As String
'*************VARIABLES À DÉFINIR*****************
'Répertoire de ton fichier fermé
SsourceData = "c:UsersTon ProfilDocumentsClasseur1.xlsm"
'Nom de la feuille est la plage de cellules concernées
Table1 = "[Feuil1$A:F]"
'***************************************************
'Le résultat suppose que la ligne 1 est la première ligne
'de données de ton tableau des données. Si tu indiques un
'tableau des données de ce type : "[Feuil1$A4:F500]", tu
'devras ajouter 3 au résultat représentant les 3
'premières lignes pour obtenir la première ligne disponible
'dans ta feuille de calcul.
MsgBox "La dernière ligne du tableau de données est : " & _
GetLastRow(SsourceData, Table1)
End Sub
'-------------------------------------------------------------------------
Function GetLastRow(ByVal Fname As String, _
ByVal TableName As String) As Long
Dim Flawed As Boolean, i As Long
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Conn = New ADODB.Connection
If Val(Application.Version) <= 11 Then
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
Else
Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 12.0;HDR=NO"";"
End If
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open TableName, Conn, adOpenStatic
Rst.MoveLast
Flawed = True
Do While (Flawed)
For i = 0 To Rst.Fields.Count - 1
If Not IsNull(Rst.Fields(i).Value) Then
Flawed = False
Exit Do
End If
Next
Rst.MovePrevious
Loop
GetLastRow = Rst.AbsolutePosition + 1
Rst.Close: Conn.Close
Set Conn = Nothing: Set Rst = Nothing
End Function
'-------------------------------------------------------------------------
MichD
Jacquouille
Le #26456694
Salut Denis,
Ca, c'est autre chose qu'un copier-coller.
Ayant un dos fragilisé, je vais laisser les bibliothèques où elles sont.
Trop lourd pour moi.
Question: Vu que c'est le PC qui fait le job, pourquoi se casser le cul à
ne pas vouloir ouvrir un classeur pour aller patauger dedans?
c'est plus facile, non?
Déjà merci et bonne fin de semaine.
Jacques, XL MM III
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
p1gbud$tds$
Bonjour,
La procédure soumise retourne la première ligne disponible d'une feuille de
calcul Excel d'un classeur fermé. Avant de lancer la procédure, prends le
temps de lire les remarques de la procédure
"Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()"
Évidemment, l'exécution de cette procédure requiert l'ajout de la
bibliothèque suivante : "Microsoft ActiveX Data Objects 2.8 Library" à
partir de la barre des menus de la fenêtre de l'éditeur de code (VBA) /
Outils / références.
'-------------------------------------------------------------------------
Sub Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()
'Inspirer d'une procédure créer par keiji kounoike
Dim SsourceData As String
Dim Table1 As String
'*************VARIABLES À DÉFINIR*****************
'Répertoire de ton fichier fermé
SsourceData = "c:UsersTon ProfilDocumentsClasseur1.xlsm"
'Nom de la feuille est la plage de cellules concernées
Table1 = "[Feuil1$A:F]"
'***************************************************
'Le résultat suppose que la ligne 1 est la première ligne
'de données de ton tableau des données. Si tu indiques un
'tableau des données de ce type : "[Feuil1$A4:F500]", tu
'devras ajouter 3 au résultat représentant les 3
'premières lignes pour obtenir la première ligne disponible
'dans ta feuille de calcul.
MsgBox "La dernière ligne du tableau de données est : " & _
GetLastRow(SsourceData, Table1)
End Sub
'-------------------------------------------------------------------------
Function GetLastRow(ByVal Fname As String, _
ByVal TableName As String) As Long
Dim Flawed As Boolean, i As Long
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Conn = New ADODB.Connection
If Val(Application.Version) <= 11 Then
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
Else
Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 12.0;HDR=NO"";"
End If
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open TableName, Conn, adOpenStatic
Rst.MoveLast
Flawed = True
Do While (Flawed)
For i = 0 To Rst.Fields.Count - 1
If Not IsNull(Rst.Fields(i).Value) Then
Flawed = False
Exit Do
End If
Next
Rst.MovePrevious
Loop
GetLastRow = Rst.AbsolutePosition + 1
Rst.Close: Conn.Close
Set Conn = Nothing: Set Rst = Nothing
End Function
'-------------------------------------------------------------------------
MichD
Brat'ac
Le #26456699
Le jeudi 21/12/2017 Michd a écrit :
Bonjour,
La procédure soumise retourne la première ligne disponible d'une feuille de
calcul Excel d'un classeur fermé. Avant de lancer la procédure, prends le
temps de lire les remarques de la procédure
"Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()"
Évidemment, l'exécution de cette procédure requiert l'ajout de la
bibliothèque suivante : "Microsoft ActiveX Data Objects 2.8 Library" à partir
de la barre des menus de la fenêtre de l'éditeur de code (VBA) / Outils /
références.
'-------------------------------------------------------------------------
Sub Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()
'Inspirer d'une procédure créer par keiji kounoike
Dim SsourceData As String
Dim Table1 As String
'*************VARIABLES À DÉFINIR*****************
'Répertoire de ton fichier fermé
SsourceData = "c:UsersTon ProfilDocumentsClasseur1.xlsm"
'Nom de la feuille est la plage de cellules concernées
Table1 = "[Feuil1$A:F]"
'***************************************************
'Le résultat suppose que la ligne 1 est la première ligne
'de données de ton tableau des données. Si tu indiques un
'tableau des données de ce type : "[Feuil1$A4:F500]", tu
'devras ajouter 3 au résultat représentant les 3
'premières lignes pour obtenir la première ligne disponible
'dans ta feuille de calcul.
MsgBox "La dernière ligne du tableau de données est : " & _
GetLastRow(SsourceData, Table1)
End Sub
'-------------------------------------------------------------------------
Function GetLastRow(ByVal Fname As String, _
ByVal TableName As String) As Long
Dim Flawed As Boolean, i As Long
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Conn = New ADODB.Connection
If Val(Application.Version) <= 11 Then
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
Else
Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 12.0;HDR=NO"";"
End If
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open TableName, Conn, adOpenStatic
Rst.MoveLast
Flawed = True
Do While (Flawed)
For i = 0 To Rst.Fields.Count - 1
If Not IsNull(Rst.Fields(i).Value) Then
Flawed = False
Exit Do
End If
Next
Rst.MovePrevious
Loop
GetLastRow = Rst.AbsolutePosition + 1
Rst.Close: Conn.Close
Set Conn = Nothing: Set Rst = Nothing
End Function
'-------------------------------------------------------------------------
MichD

Merci à vous deux c'est OK.
Bonnes fêtes à tous.
Michd
Le #26456719
| c'est plus facile, non?
Imagine que dans un classeur X tu as une plage de cellules et que tu veux
trouver la première ligne disponible dans une feuille donnée où tu peux
écrire des données, la procédure donnée te trouve cette ligne et ce peu
importe que chacune des colonnes du tableau de données ait le même nombre de
lignes de data.
Cette manière de procéder est beaucoup plus rapide, mais plus austère à
coder!
La procédure devrait fonctionner dans Excel 2003 si tu ajoutes la
bibliothèque et que tu définis les 2 variables de la procédure.
MichD
Jacquouille
Le #26456757
Hello
C'est gentil à toi de m'associer aux mercis, même si j'ai du souffler la
réponse à Denis.
C'est lui qui a fait le boulot.
Que mes mercis aillent vers lui, au centuple.
Bon réveillon.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Brat'ac" a écrit dans le message de groupe de discussion :

Le jeudi 21/12/2017 Michd a écrit :
Bonjour,
La procédure soumise retourne la première ligne disponible d'une feuille
de calcul Excel d'un classeur fermé. Avant de lancer la procédure, prends
le temps de lire les remarques de la procédure
"Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()"
Évidemment, l'exécution de cette procédure requiert l'ajout de la
bibliothèque suivante : "Microsoft ActiveX Data Objects 2.8 Library" à
partir de la barre des menus de la fenêtre de l'éditeur de code (VBA) /
Outils / références.
'-------------------------------------------------------------------------
Sub Dernière_LIgne_Plage_De_Données_Ds_Classeur_Fermé()
'Inspirer d'une procédure créer par keiji kounoike
Dim SsourceData As String
Dim Table1 As String
'*************VARIABLES À DÉFINIR*****************
'Répertoire de ton fichier fermé
SsourceData = "c:UsersTon ProfilDocumentsClasseur1.xlsm"
'Nom de la feuille est la plage de cellules concernées
Table1 = "[Feuil1$A:F]"
'***************************************************
'Le résultat suppose que la ligne 1 est la première ligne
'de données de ton tableau des données. Si tu indiques un
'tableau des données de ce type : "[Feuil1$A4:F500]", tu
'devras ajouter 3 au résultat représentant les 3
'premières lignes pour obtenir la première ligne disponible
'dans ta feuille de calcul.
MsgBox "La dernière ligne du tableau de données est : " & _
GetLastRow(SsourceData, Table1)
End Sub
'-------------------------------------------------------------------------
Function GetLastRow(ByVal Fname As String, _
ByVal TableName As String) As Long
Dim Flawed As Boolean, i As Long
Dim Conn As ADODB.Connection, Rst As ADODB.Recordset
Set Conn = New ADODB.Connection
If Val(Application.Version) <= 11 Then
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 8.0;HDR=NO;IMEX=1"""
Else
Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & Fname & ";" & _
"Extended Properties=""Excel 12.0;HDR=NO"";"
End If
Set Rst = New ADODB.Recordset
Rst.CursorLocation = adUseClient
Rst.Open TableName, Conn, adOpenStatic
Rst.MoveLast
Flawed = True
Do While (Flawed)
For i = 0 To Rst.Fields.Count - 1
If Not IsNull(Rst.Fields(i).Value) Then
Flawed = False
Exit Do
End If
Next
Rst.MovePrevious
Loop
GetLastRow = Rst.AbsolutePosition + 1
Rst.Close: Conn.Close
Set Conn = Nothing: Set Rst = Nothing
End Function
'-------------------------------------------------------------------------
MichD

Merci à vous deux c'est OK.
Bonnes fêtes à tous.
Publicité
Poster une réponse
Anonyme