Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

compter les onglets d'un classeur fermé

4 réponses
Avatar
ptck
Bonjour
J'ai cette macro qui lit 3 onglets dans les classeurs fermés
mais comment mettre dans la variable Z le nombre exact d'onglets
de chaque classeur pour ne pas avoir d'erreurs dans la récap

merci
ptcck


Public Sub xx()
cellule = "A4,A9,A13, B5,C6,D8"
lign = 1
col = 0
Dossier = "C:\Chemin\"
fichier = Dir(Dossier & "*.xls")
Do While fichier <> ""
For Z = 1 To 3
lign = lign + 1
For i = 0 To UBound(Split(cellule, ","))
col = col + 1
valeur = ExecuteExcel4Macro("'" & Dossier & "[" & fichier & "]Feuil" & Z &
"'!" & _
Range(Split(cellule, ",")(i)).Address(ReferenceStyle:=xlR1C1))
Range(Cells(lign, col), Cells(lign, col)) = valeur
Next
col = 0
Next
fichier = Dir
Loop
End Sub

4 réponses

Avatar
michdenis
Bonjour,

Pour exécuter cette macro, il te faut ajouter une bibliothèque
à ton projet VBA. Dans la fenêtre de l'éditeur de code,
barre des menus / outils / références / et tu coches :
"Microsoft DAO 3.6 Object Library"


'-----------------------------
Sub Liste_Des_Noms_Onglets_Comme_Dans_Classeur_Fermer()
Dim Classeur As String, ListName

'À adapter
Classeur = "C:aaaclasseur1.xls"
ListName = FirstExcelSheetName(Classeur)

'Pour obtenir le nombre de feuille du classeur fermé :
Msgbox Ubound(ListName)

'Pour obtenir la liste des noms de chacune des feuille
For A = 0 To UBound(ListName)
MsgBox ListName(A)
Next
End Sub
'-----------------------------
Function FirstExcelSheetName(Fichier As String) As Variant
'Requiert la bibliothèque suivante :
'"Microsoft DAO 3.6 object librairy"

Dim XlDb As DAO.Database, Nb As Integer
Dim TbL As DAO.TableDef, List(), L As Integer

Set XlDb = OpenDatabase(Fichier, False, True, "Excel 8.0;")
Nb = XlDb.TableDefs.Count - 1
For A = 0 To Nb
If InStr(1, XlDb.TableDefs(A).Name, "$", vbTextCompare) > 0 Then
ReDim Preserve List(L)
x = XlDb.TableDefs(L).Name
List(L) = Left(XlDb.TableDefs(L).Name, Len(XlDb.TableDefs(L).Name) - 1)
L = L + 1
End If
Next
FirstExcelSheetName = List
XlDb.Close

End Function
'-----------------------------



"ptck" a écrit dans le message de groupe de discussion :

Bonjour
J'ai cette macro qui lit 3 onglets dans les classeurs fermés
mais comment mettre dans la variable Z le nombre exact d'onglets
de chaque classeur pour ne pas avoir d'erreurs dans la récap

merci
ptcck


Public Sub xx()
cellule = "A4,A9,A13, B5,C6,D8"
lign = 1
col = 0
Dossier = "C:Chemin"
fichier = Dir(Dossier & "*.xls")
Do While fichier <> ""
For Z = 1 To 3
lign = lign + 1
For i = 0 To UBound(Split(cellule, ","))
col = col + 1
valeur = ExecuteExcel4Macro("'" & Dossier & "[" & fichier & "]Feuil" & Z &
"'!" & _
Range(Split(cellule, ",")(i)).Address(ReferenceStyle:=xlR1C1))
Range(Cells(lign, col), Cells(lign, col)) = valeur
Next
col = 0
Next
fichier = Dir
Loop
End Sub
Avatar
Ptck
Merci
je vais adapter la macro à la mienne
ptck

"michdenis" a écrit dans le message de news:
%23i0AC%
Bonjour,

Pour exécuter cette macro, il te faut ajouter une bibliothèque
à ton projet VBA. Dans la fenêtre de l'éditeur de code,
barre des menus / outils / références / et tu coches :
"Microsoft DAO 3.6 Object Library"


'-----------------------------
Sub Liste_Des_Noms_Onglets_Comme_Dans_Classeur_Fermer()
Dim Classeur As String, ListName

'À adapter
Classeur = "C:aaaclasseur1.xls"
ListName = FirstExcelSheetName(Classeur)

'Pour obtenir le nombre de feuille du classeur fermé :
Msgbox Ubound(ListName)

'Pour obtenir la liste des noms de chacune des feuille
For A = 0 To UBound(ListName)
MsgBox ListName(A)
Next
End Sub
'-----------------------------
Function FirstExcelSheetName(Fichier As String) As Variant
'Requiert la bibliothèque suivante :
'"Microsoft DAO 3.6 object librairy"

Dim XlDb As DAO.Database, Nb As Integer
Dim TbL As DAO.TableDef, List(), L As Integer

Set XlDb = OpenDatabase(Fichier, False, True, "Excel 8.0;")
Nb = XlDb.TableDefs.Count - 1
For A = 0 To Nb
If InStr(1, XlDb.TableDefs(A).Name, "$", vbTextCompare) > 0 Then
ReDim Preserve List(L)
x = XlDb.TableDefs(L).Name
List(L) = Left(XlDb.TableDefs(L).Name,
Len(XlDb.TableDefs(L).Name) - 1)
L = L + 1
End If
Next
FirstExcelSheetName = List
XlDb.Close

End Function
'-----------------------------



"ptck" a écrit dans le message de groupe de
discussion :

Bonjour
J'ai cette macro qui lit 3 onglets dans les classeurs fermés
mais comment mettre dans la variable Z le nombre exact d'onglets
de chaque classeur pour ne pas avoir d'erreurs dans la récap

merci
ptcck


Public Sub xx()
cellule = "A4,A9,A13, B5,C6,D8"
lign = 1
col = 0
Dossier = "C:Chemin"
fichier = Dir(Dossier & "*.xls")
Do While fichier <> ""
For Z = 1 To 3
lign = lign + 1
For i = 0 To UBound(Split(cellule, ","))
col = col + 1
valeur = ExecuteExcel4Macro("'" & Dossier & "[" & fichier & "]Feuil" & Z &
"'!" & _
Range(Split(cellule, ",")(i)).Address(ReferenceStyle:=xlR1C1))
Range(Cells(lign, col), Cells(lign, col)) = valeur
Next
col = 0
Next
fichier = Dir
Loop
End Sub



Avatar
JB
Bonjour,

Sub NombreFeuillesClasseurFermé()
' Microsoft ActiveX DataObject doit être coché
Set cnn = CreateObject("ADODB.Connection")
Set cata = CreateObject("ADOX.Catalog")
FichXLS = "adosource.xls"
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" &
repertoire & FichXLS & ";Extended Properties=Excel 8.0;"
Set cata.ActiveConnection = cnn
MsgBox cata.tables.Count
cnn.Close
Set cata = Nothing
Set cnn = Nothing
End Sub

JB
http://boisgontierjacques.free.fr/


On 24 oct, 17:51, "ptck" wrote:
Bonjour
J'ai cette macro qui lit 3 onglets dans les classeurs  fermés
mais comment mettre dans la variable Z le nombre exact d'onglets
de chaque classeur pour ne pas avoir d'erreurs dans la récap

merci
ptcck

Public Sub xx()
cellule = "A4,A9,A13, B5,C6,D8"
lign = 1
col = 0
Dossier = "C:Chemin"
fichier = Dir(Dossier & "*.xls")
Do While fichier <> ""
For Z = 1 To 3
lign = lign + 1
For i = 0 To UBound(Split(cellule, ","))
col = col + 1
valeur = ExecuteExcel4Macro("'" & Dossier & "[" & fichier & "]Feuil" & Z &
"'!" & _
Range(Split(cellule, ",")(i)).Address(ReferenceStyle:=xlR1C1))
Range(Cells(lign, col), Cells(lign, col)) = valeur
Next
col = 0
Next
fichier = Dir
Loop
End Sub


Avatar
michdenis
Comme c'est un tableau de base 0, il faut ajouter 1 à cette ligne de code :

'Pour obtenir le nombre de feuille du classeur fermé :
Msgbox Ubound(ListName) + 1