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

Pb dans programme de recherche de données - fichiers fermés

3 réponses
Avatar
Antoine
Bonjour,

Dans un fichier ("Récapitulatif inter-entreprises des Noemie"), j'essaie de
créer un programme qui centralise sur Feuil3, des données contenues dans
tous les fichiers du même classeur, sur la feuille "Salariés", si et
seulement si, cette feuille existe dans le fichier visité (sous XP-Excel
2000).

Michdenis m'a aider pour "extraire le nom des feuilles d'un classeur" (avec
activation de "Microsoft Activex Data Object 2.1 object Librairy" et de
"Microsoft ADO Ext. 2.8 for DDL and Security"), avec un code qui,
isolément, fonctionne très bien.
Youki m'a aider pour extraire les données situées sur la feuille "Salariés",
avec un code qui, isolément, fonctionne très bien.
Quand je les relie avec une vérification de l'existence de la feuille
"Salarié", le programme (mis ci-après) bloque au niveau de la ligne : With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier) avec
"Erreur d'exécution 1004" - Impossible d'accéder à 'entreprise TOTO.xls'

Je ne sais pas trop l'erreur de "concaténation" de programme que j'ai pu
commettre !

Merci à tous

Antoine

Sub test()

Dim a(20), lig As Integer, col As Byte
Dim feuille, fichier, chemin As String
' enregistre le chemin d'accès au fichier
chemin = ActiveWorkbook.Path & "\"
' définit le nom de chaque fichier contenu dans le dossier
fichier = Dir$(chemin & "*.xls")
' nom de la feuille où sont les données à lire, pour vérifier si elle
existe
feuille = "Salariés"
' décale la 1ère ligne de recopie de 2 lignes
lig = 2
Do Until fichier = ""
' exclut de la boucle ce fichier
If fichier = "Récapitulatif inter-entreprises des Noemie.xls" Then
GoTo saute
Else
Dim cnn As New ADODB.Connection
Dim Cat As New ADOX.Catalog
Dim Tbl As ADOX.Table
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & chemin & fichier & ";" & _
"Extended Properties=Excel 8.0;"
Cat.ActiveConnection = cnn
For Each Tbl In Cat.Tables
If InStr(1, Tbl.Name, "$") > 0 Then
MsgBox Left$(Tbl.Name, Len(Tbl.Name) - 1)
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = feuille Then
With CreateObject("Excel.Application").Workbooks.Open(chemin
& fichier)
' nom société
a(1) = .Worksheets(feuille).Cells(7, 19)
' Nombre de salariés
a(2) = .Worksheets(feuille).Cells(9, 4)
.Close False
End With
' décale la ligne de recopie de 1 ligne
lig = lig + 1
For col = 1 To 2
Feuil3.Cells(lig, col) = a(col)
Next col
End If
End If
Next Tbl
Set Cat = Nothing
cnn.Close
Set cnn = Nothing
saute:
fichier = Dir$
End If
Loop
End Sub

3 réponses

Avatar
LSteph
Bonjour,
Déjà un truc me semble bizarre (même si pour ce qui est d'ADO je ne
comprends pas tout et pas entièrement ton but)
il me semble que tu croises un code qui ouvre tous les fichier un par un
avec un autre conçu pour lire dedans sans les ouvrir.
Pour ce que j'y vois si tu définis :
fichier = Dir$(chemin & "*.xls")


et que plus loin tu dis
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
Cela fait deux fois le nom de chemin.


Habituellement pour la partie sans ADO je fais ainsi monchemin prédéfini
comme tu veux Avtiveworkbook.path (par exemple):

Chdir monchemin
f=dir("*.xls")
Do while len(f)>0
'mesinstructions
f=dir
loop

'lSteph


"Antoine" a écrit dans le message de news:
%23MhmnE$
Bonjour,

Dans un fichier ("Récapitulatif inter-entreprises des Noemie"), j'essaie
de créer un programme qui centralise sur Feuil3, des données contenues
dans tous les fichiers du même classeur, sur la feuille "Salariés", si et
seulement si, cette feuille existe dans le fichier visité (sous XP-Excel
2000).

Michdenis m'a aider pour "extraire le nom des feuilles d'un classeur"
(avec activation de "Microsoft Activex Data Object 2.1 object Librairy" et
de "Microsoft ADO Ext. 2.8 for DDL and Security"), avec un code qui,
isolément, fonctionne très bien.
Youki m'a aider pour extraire les données situées sur la feuille
"Salariés", avec un code qui, isolément, fonctionne très bien.
Quand je les relie avec une vérification de l'existence de la feuille
"Salarié", le programme (mis ci-après) bloque au niveau de la ligne : With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier) avec
"Erreur d'exécution 1004" - Impossible d'accéder à 'entreprise TOTO.xls'

Je ne sais pas trop l'erreur de "concaténation" de programme que j'ai pu
commettre !

Merci à tous

Antoine

Sub test()

Dim a(20), lig As Integer, col As Byte
Dim feuille, fichier, chemin As String
' enregistre le chemin d'accès au fichier
chemin = ActiveWorkbook.Path & ""
' définit le nom de chaque fichier contenu dans le dossier
fichier = Dir$(chemin & "*.xls")
' nom de la feuille où sont les données à lire, pour vérifier si elle
existe
feuille = "Salariés"
' décale la 1ère ligne de recopie de 2 lignes
lig = 2
Do Until fichier = ""
' exclut de la boucle ce fichier
If fichier = "Récapitulatif inter-entreprises des Noemie.xls" Then
GoTo saute
Else
Dim cnn As New ADODB.Connection
Dim Cat As New ADOX.Catalog
Dim Tbl As ADOX.Table
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & chemin & fichier & ";" & _
"Extended Properties=Excel 8.0;"
Cat.ActiveConnection = cnn
For Each Tbl In Cat.Tables
If InStr(1, Tbl.Name, "$") > 0 Then
MsgBox Left$(Tbl.Name, Len(Tbl.Name) - 1)
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = feuille Then
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
' nom société
a(1) = .Worksheets(feuille).Cells(7, 19)
' Nombre de salariés
a(2) = .Worksheets(feuille).Cells(9, 4)
.Close False
End With
' décale la ligne de recopie de 1 ligne
lig = lig + 1
For col = 1 To 2
Feuil3.Cells(lig, col) = a(col)
Next col
End If
End If
Next Tbl
Set Cat = Nothing
cnn.Close
Set cnn = Nothing
saute:
fichier = Dir$
End If
Loop
End Sub






Avatar
Antoine
Bonjour Lsteph

Pour te présenter les choses autrement, j'ai fait une procédure AVEC
ouverture des fichiers qui fonctionne.
Ce que j'essaie de faire, c'est la même chose, mais SANS ouvrir les fichiers
: en clair,
un dossier, qui contient les fichiers de 250 sociétés environ (effectifs,
âge, statut...) + le dossier "Récapitulatif...", dans lequel je veux faire
le listing, via macro, de différentes données concernant chacune de ces 250
sociétés, et ce sur une seule ligne.

La seule chose est que ces fichiers sont parfois sous un ancien "format"
(Cadre s/ 1 feuille, Non Cadre sur une 2ème...) aux données
non-exploitables, et les autres qui ont eu les feuilles refondues en 1 seule
baptisée toujours "Salariés", et qui contient divers données statistiques
que je cherche à regrouper dans le fichier "Récapitulatif..." pour
exploitation ultérieure.
Le seul fait de détecter, dans le fichier à lire, s'il y a une feuille
baptisée "Salarié" ou non, suffit donc à me dire si je dois aller chercher
(fichier fermé) les valeurs de ces cellules.
d'où le principe : dans chaque fichier de classeur commun - si fichier <>
fichier "Récapitulatif..." et si, une des feuille a pour nom "Salarié" -
alors transfert d'un certains nombre de cellules de la feuille "Salarié" de
ce fichier sur le fichier "Récapitulatif..." d'où est lancé la macro.

Je ne sais pas si j'ai réussi à être clair ?

j'ai essayé de remplacer - fichier = Dir$(chemin & "*.xls") ...Do Until
fichier = ""... - par - ChDir ActiveWorkbook.Path...
fichier = Dir("*.xls") ...Do While Len(fichier) > 0, mais cela ne change
rien au problème, car cela bloque toujours.

Je ne sais pas trop comment appréhender le problème !

Merci à toi

Antoine
"LSteph" a écrit dans le message de news:
%236N7zT$
Bonjour,
Déjà un truc me semble bizarre (même si pour ce qui est d'ADO je ne
comprends pas tout et pas entièrement ton but)
il me semble que tu croises un code qui ouvre tous les fichier un par un
avec un autre conçu pour lire dedans sans les ouvrir.
Pour ce que j'y vois si tu définis :
fichier = Dir$(chemin & "*.xls")


et que plus loin tu dis
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
Cela fait deux fois le nom de chemin.


Habituellement pour la partie sans ADO je fais ainsi monchemin prédéfini
comme tu veux Avtiveworkbook.path (par exemple):

Chdir monchemin
f=dir("*.xls")
Do while len(f)>0
'mesinstructions
f=dir
loop

'lSteph


"Antoine" a écrit dans le message de news:
%23MhmnE$
Bonjour,

Dans un fichier ("Récapitulatif inter-entreprises des Noemie"), j'essaie
de créer un programme qui centralise sur Feuil3, des données contenues
dans tous les fichiers du même classeur, sur la feuille "Salariés", si et
seulement si, cette feuille existe dans le fichier visité (sous XP-Excel
2000).

Michdenis m'a aider pour "extraire le nom des feuilles d'un classeur"
(avec activation de "Microsoft Activex Data Object 2.1 object Librairy"
et de "Microsoft ADO Ext. 2.8 for DDL and Security"), avec un code qui,
isolément, fonctionne très bien.
Youki m'a aider pour extraire les données situées sur la feuille
"Salariés", avec un code qui, isolément, fonctionne très bien.
Quand je les relie avec une vérification de l'existence de la feuille
"Salarié", le programme (mis ci-après) bloque au niveau de la ligne :
With CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
avec "Erreur d'exécution 1004" - Impossible d'accéder à 'entreprise
TOTO.xls'

Je ne sais pas trop l'erreur de "concaténation" de programme que j'ai pu
commettre !

Merci à tous

Antoine

Sub test()

Dim a(20), lig As Integer, col As Byte
Dim feuille, fichier, chemin As String
' enregistre le chemin d'accès au fichier
chemin = ActiveWorkbook.Path & ""
' définit le nom de chaque fichier contenu dans le dossier
fichier = Dir$(chemin & "*.xls")
' nom de la feuille où sont les données à lire, pour vérifier si elle
existe
feuille = "Salariés"
' décale la 1ère ligne de recopie de 2 lignes
lig = 2
Do Until fichier = ""
' exclut de la boucle ce fichier
If fichier = "Récapitulatif inter-entreprises des Noemie.xls" Then
GoTo saute
Else
Dim cnn As New ADODB.Connection
Dim Cat As New ADOX.Catalog
Dim Tbl As ADOX.Table
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & chemin & fichier & ";" & _
"Extended Properties=Excel 8.0;"
Cat.ActiveConnection = cnn
For Each Tbl In Cat.Tables
If InStr(1, Tbl.Name, "$") > 0 Then
MsgBox Left$(Tbl.Name, Len(Tbl.Name) - 1)
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = feuille Then
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
' nom société
a(1) = .Worksheets(feuille).Cells(7, 19)
' Nombre de salariés
a(2) = .Worksheets(feuille).Cells(9, 4)
.Close False
End With
' décale la ligne de recopie de 1 ligne
lig = lig + 1
For col = 1 To 2
Feuil3.Cells(lig, col) = a(col)
Next col
End If
End If
Next Tbl
Set Cat = Nothing
cnn.Close
Set cnn = Nothing
saute:
fichier = Dir$
End If
Loop
End Sub










Avatar
LSteph
Bonjour,
Si tu utilises comme ici Workbooks.open il me semble bien que tu les ouvres
ces fichiers!
C'est comme je te l'ai dit pour boucler l'ouverture des fichiers d'un
répertoire sinon
avec ADO (ou sans ouvrir les fichiers) désolé je ne maîtrise pas assez!

a+

lSteph

"Antoine" a écrit dans le message de news:

Bonjour Lsteph

Pour te présenter les choses autrement, j'ai fait une procédure AVEC
ouverture des fichiers qui fonctionne.
Ce que j'essaie de faire, c'est la même chose, mais SANS ouvrir les
fichiers : en clair,
un dossier, qui contient les fichiers de 250 sociétés environ (effectifs,
âge, statut...) + le dossier "Récapitulatif...", dans lequel je veux faire
le listing, via macro, de différentes données concernant chacune de ces
250 sociétés, et ce sur une seule ligne.

La seule chose est que ces fichiers sont parfois sous un ancien "format"
(Cadre s/ 1 feuille, Non Cadre sur une 2ème...) aux données
non-exploitables, et les autres qui ont eu les feuilles refondues en 1
seule baptisée toujours "Salariés", et qui contient divers données
statistiques que je cherche à regrouper dans le fichier "Récapitulatif..."
pour exploitation ultérieure.
Le seul fait de détecter, dans le fichier à lire, s'il y a une feuille
baptisée "Salarié" ou non, suffit donc à me dire si je dois aller chercher
(fichier fermé) les valeurs de ces cellules.
d'où le principe : dans chaque fichier de classeur commun - si fichier <>
fichier "Récapitulatif..." et si, une des feuille a pour nom "Salarié" -
alors transfert d'un certains nombre de cellules de la feuille "Salarié"
de ce fichier sur le fichier "Récapitulatif..." d'où est lancé la macro.

Je ne sais pas si j'ai réussi à être clair ?

j'ai essayé de remplacer - fichier = Dir$(chemin & "*.xls") ...Do Until
fichier = ""... - par - ChDir ActiveWorkbook.Path...
fichier = Dir("*.xls") ...Do While Len(fichier) > 0, mais cela ne change
rien au problème, car cela bloque toujours.

Je ne sais pas trop comment appréhender le problème !

Merci à toi

Antoine
"LSteph" a écrit dans le message de news:
%236N7zT$
Bonjour,
Déjà un truc me semble bizarre (même si pour ce qui est d'ADO je ne
comprends pas tout et pas entièrement ton but)
il me semble que tu croises un code qui ouvre tous les fichier un par un
avec un autre conçu pour lire dedans sans les ouvrir.
Pour ce que j'y vois si tu définis :
fichier = Dir$(chemin & "*.xls")


et que plus loin tu dis
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
Cela fait deux fois le nom de chemin.


Habituellement pour la partie sans ADO je fais ainsi monchemin prédéfini
comme tu veux Avtiveworkbook.path (par exemple):

Chdir monchemin
f=dir("*.xls")
Do while len(f)>0
'mesinstructions
f=dir
loop

'lSteph


"Antoine" a écrit dans le message de news:
%23MhmnE$
Bonjour,

Dans un fichier ("Récapitulatif inter-entreprises des Noemie"), j'essaie
de créer un programme qui centralise sur Feuil3, des données contenues
dans tous les fichiers du même classeur, sur la feuille "Salariés", si
et seulement si, cette feuille existe dans le fichier visité (sous
XP-Excel 2000).

Michdenis m'a aider pour "extraire le nom des feuilles d'un classeur"
(avec activation de "Microsoft Activex Data Object 2.1 object Librairy"
et de "Microsoft ADO Ext. 2.8 for DDL and Security"), avec un code qui,
isolément, fonctionne très bien.
Youki m'a aider pour extraire les données situées sur la feuille
"Salariés", avec un code qui, isolément, fonctionne très bien.
Quand je les relie avec une vérification de l'existence de la feuille
"Salarié", le programme (mis ci-après) bloque au niveau de la ligne :
With CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
avec "Erreur d'exécution 1004" - Impossible d'accéder à 'entreprise
TOTO.xls'

Je ne sais pas trop l'erreur de "concaténation" de programme que j'ai pu
commettre !

Merci à tous

Antoine

Sub test()

Dim a(20), lig As Integer, col As Byte
Dim feuille, fichier, chemin As String
' enregistre le chemin d'accès au fichier
chemin = ActiveWorkbook.Path & ""
' définit le nom de chaque fichier contenu dans le dossier
fichier = Dir$(chemin & "*.xls")
' nom de la feuille où sont les données à lire, pour vérifier si elle
existe
feuille = "Salariés"
' décale la 1ère ligne de recopie de 2 lignes
lig = 2
Do Until fichier = ""
' exclut de la boucle ce fichier
If fichier = "Récapitulatif inter-entreprises des Noemie.xls" Then
GoTo saute
Else
Dim cnn As New ADODB.Connection
Dim Cat As New ADOX.Catalog
Dim Tbl As ADOX.Table
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & chemin & fichier & ";" & _
"Extended Properties=Excel 8.0;"
Cat.ActiveConnection = cnn
For Each Tbl In Cat.Tables
If InStr(1, Tbl.Name, "$") > 0 Then
MsgBox Left$(Tbl.Name, Len(Tbl.Name) - 1)
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = feuille Then
With
CreateObject("Excel.Application").Workbooks.Open(chemin & fichier)
' nom société
a(1) = .Worksheets(feuille).Cells(7, 19)
' Nombre de salariés
a(2) = .Worksheets(feuille).Cells(9, 4)
.Close False
End With
' décale la ligne de recopie de 1 ligne
lig = lig + 1
For col = 1 To 2
Feuil3.Cells(lig, col) = a(col)
Next col
End If
End If
Next Tbl
Set Cat = Nothing
cnn.Close
Set cnn = Nothing
saute:
fichier = Dir$
End If
Loop
End Sub