OVH Cloud OVH Cloud

VBA - Vérifier si une feuille existe dans un classeur fermé

12 réponses
Avatar
Alex St-Pierre
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data" d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et vérifie si
elle est présente, cela prend environ 10 secondes à exécuter. Existe-t-il une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "\")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre

10 réponses

1 2
Avatar
Michel Pierron
Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf & Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter. Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre


Avatar
Alex St-Pierre
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet, un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf & Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter. Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre







Avatar
Alex St-Pierre
Ou bien, une solution simple serait de remplacer les # par des . !!
sTemp = Left$(Tbl.Name, Len(Tbl.Name) - 1)
sTemp = Replace(sTemp, "#", ".")
sTemp = Replace(sTemp, "$", "")
monDicoSource.Add sTemp, sTemp

--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf & Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter. Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre







Avatar
Michel Pierron
Re Alex;
Le signe $ est toujours présent à la fin du nom; c'est pourquoi il y a -1
dans:
Left$(Tbl.Name, Len(Tbl.Name) - 1)
Mais tu peux aussi utiliser (à condition de ne pas utiliser $ dans le nom de
la feuille):
Left$(Tbl.Name, InStr(1, Tbl.Name, "$") - 1)
Je te rappelle les restrictions d'usage dans les noms de feuilles:
31 caractères maxi
Pas de caractères tels que: / ? * [ ].
(3.1) n'est donc pas un nom valide; c'est pourquoi tu trouves # en lieu et
place du .

Tu peux aussi essayer cette autre manière de faire :

Sub VerifSheet()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Feuil3"
If FindSheet(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans" & vbLf & Wbk & " !", 64
End If
End Sub

Private Function FindSheet(FullPath$, Name$) As Boolean
If Dir(FullPath) = "" Then Exit Function
Dim Pos&(1 To 2), b(0 To 2048) As Byte
Dim lr&: lr = FileLen(FullPath)
Dim f&: f = FreeFile
Open FullPath For Binary Access Read As #f
Do
Pos(1) = Pos(1) + 2047
Get #f, Pos(1), b
Pos(2) = InStrB(b, ChrB(133))
Loop While Pos(2) = 0 And Pos(1) < lr
Do While Pos(2) > 0
Pos(1) = Pos(1) + Pos(2) - 1
Get #f, Pos(1), b
FindSheet = CBool(Mid(StrConv(b, vbUnicode), 13, b(10)) = Name)
If FindSheet Then Exit Do
Pos(2) = IIf(b(b(2) + 4) = 133, InStrB(4, b, ChrB(133)), 0)
Loop
Close #f
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre









Avatar
Alex St-Pierre
Bonjour Michel,
J'ai modifié mon programme pour qu'il ajoute l'ensemble des feuilles (autre
que data et manager) dans une ListBox pour que l'utilisateur puisse les
sélectionner. J'ai remarqué que dans certains fichiers, la fonction "For Each
Tbl In Cat.Tables" me donne des noms de plage aussi (en plus des noms de
feuilles). Ce qui est étrange, c'est que c'est seulement quelques noms de
plage qui se retrouve dans la liste.
Je vais essayer la 2e méthode.
Merci !

Set monDicoSource = CreateObject("Scripting.Dictionary")
For Each Tbl In Cat.Tables
sTemp = Replace(Tbl.Name, "#", ".")
sTemp = Replace(Tbl.Name, "$", "")
If sTemp = SheetName Then 'Left$(Tbl.Name, Len(Tbl.Name) - 1) =
SheetName
OkSheetName = True 'Exit For
ElseIf sTemp <> "manager" And sTemp <> "merge" Then 'don't want data
and manager sheet
monDicoSource.Add sTemp, sTemp
End If
Next Tbl
--
Alex St-Pierre



Re Alex;
Le signe $ est toujours présent à la fin du nom; c'est pourquoi il y a -1
dans:
Left$(Tbl.Name, Len(Tbl.Name) - 1)
Mais tu peux aussi utiliser (à condition de ne pas utiliser $ dans le nom de
la feuille):
Left$(Tbl.Name, InStr(1, Tbl.Name, "$") - 1)
Je te rappelle les restrictions d'usage dans les noms de feuilles:
31 caractères maxi
Pas de caractères tels que: / ? * [ ].
(3.1) n'est donc pas un nom valide; c'est pourquoi tu trouves # en lieu et
place du .

Tu peux aussi essayer cette autre manière de faire :

Sub VerifSheet()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Feuil3"
If FindSheet(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans" & vbLf & Wbk & " !", 64
End If
End Sub

Private Function FindSheet(FullPath$, Name$) As Boolean
If Dir(FullPath) = "" Then Exit Function
Dim Pos&(1 To 2), b(0 To 2048) As Byte
Dim lr&: lr = FileLen(FullPath)
Dim f&: f = FreeFile
Open FullPath For Binary Access Read As #f
Do
Pos(1) = Pos(1) + 2047
Get #f, Pos(1), b
Pos(2) = InStrB(b, ChrB(133))
Loop While Pos(2) = 0 And Pos(1) < lr
Do While Pos(2) > 0
Pos(1) = Pos(1) + Pos(2) - 1
Get #f, Pos(1), b
FindSheet = CBool(Mid(StrConv(b, vbUnicode), 13, b(10)) = Name)
If FindSheet Then Exit Do
Pos(2) = IIf(b(b(2) + 4) = 133, InStrB(4, b, ChrB(133)), 0)
Loop
Close #f
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre














Avatar
Michel Pierron
Re Alex;
En effet, puisque plages sont des sous tables, elles figurent dans la liste;
mais comme seules les feuilles possèdent le signe $ à la fin, tu peux la
jouer comme ça (en rajoutant la variable Pos&):

For Each Tbl In Cat.Tables
Pos = InStr(1, Tbl.Name, "$")
If Pos Then
OkSheetName = CBool(Left$(Tbl.Name, Pos - 1))
If OkSheetName Then Exit For
End If
Next Tbl

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre









Avatar
Alex St-Pierre
Ça fonctionne très bien avec le test sur le signe $ à la fin de chaque feuille!
Merci !
--
Alex St-Pierre



Re Alex;
En effet, puisque plages sont des sous tables, elles figurent dans la liste;
mais comme seules les feuilles possèdent le signe $ à la fin, tu peux la
jouer comme ça (en rajoutant la variable Pos&):

For Each Tbl In Cat.Tables
Pos = InStr(1, Tbl.Name, "$")
If Pos Then
OkSheetName = CBool(Left$(Tbl.Name, Pos - 1))
If OkSheetName Then Exit For
End If
Next Tbl

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre














Avatar
Alex St-Pierre
Bonjour Michel,
Je me demande s'il est possible d'accéder au contenu d'une cellule qui porte
un nom. Par exemple, dans la feuille "data" en question, il y a une cellule
nommé "date_eval" qui contient une date que je voudrais mettre dans mon
formulaire.
Merci !
--
Alex St-Pierre



Re Alex;
En effet, puisque plages sont des sous tables, elles figurent dans la liste;
mais comme seules les feuilles possèdent le signe $ à la fin, tu peux la
jouer comme ça (en rajoutant la variable Pos&):

For Each Tbl In Cat.Tables
Pos = InStr(1, Tbl.Name, "$")
If Pos Then
OkSheetName = CBool(Left$(Tbl.Name, Pos - 1))
If OkSheetName Then Exit For
End If
Next Tbl

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre














Avatar
MichDenis
Pour lire la valeur d'une cellule ayant le nom toto

LeNom = Application.ExecuteExcel4Macro("'C:Mes documentsClasseur1.xls'!toto")



"Alex St-Pierre" a écrit dans le message de news:

Bonjour Michel,
Je me demande s'il est possible d'accéder au contenu d'une cellule qui porte
un nom. Par exemple, dans la feuille "data" en question, il y a une cellule
nommé "date_eval" qui contient une date que je voudrais mettre dans mon
formulaire.
Merci !
--
Alex St-Pierre



Re Alex;
En effet, puisque plages sont des sous tables, elles figurent dans la liste;
mais comme seules les feuilles possèdent le signe $ à la fin, tu peux la
jouer comme ça (en rajoutant la variable Pos&):

For Each Tbl In Cat.Tables
Pos = InStr(1, Tbl.Name, "$")
If Pos Then
OkSheetName = CBool(Left$(Tbl.Name, Pos - 1))
If OkSheetName Then Exit For
End If
Next Tbl

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre














Avatar
Alex St-Pierre
Merci!
Est-ce qu'il est possible d'ajouter le nom de la feuille sur laquelle on
cherche le nom de cellule ? (La référence pourrait être Local ou Global sur
cette feuille).
Merci !
--
Alex St-Pierre



Pour lire la valeur d'une cellule ayant le nom toto

LeNom = Application.ExecuteExcel4Macro("'C:Mes documentsClasseur1.xls'!toto")



"Alex St-Pierre" a écrit dans le message de news:

Bonjour Michel,
Je me demande s'il est possible d'accéder au contenu d'une cellule qui porte
un nom. Par exemple, dans la feuille "data" en question, il y a une cellule
nommé "date_eval" qui contient une date que je voudrais mettre dans mon
formulaire.
Merci !
--
Alex St-Pierre



Re Alex;
En effet, puisque plages sont des sous tables, elles figurent dans la liste;
mais comme seules les feuilles possèdent le signe $ à la fin, tu peux la
jouer comme ça (en rajoutant la variable Pos&):

For Each Tbl In Cat.Tables
Pos = InStr(1, Tbl.Name, "$")
If Pos Then
OkSheetName = CBool(Left$(Tbl.Name, Pos - 1))
If OkSheetName Then Exit For
End If
Next Tbl

MP

"Alex St-Pierre" a écrit dans le
message de news:
Merci, ça fonctionne très bien (et très rapide!!)
Je vais aussi utiliser la fonction pour importer l'ensemble des noms de
feuille du classeur. J'ai remarqué que si le nom de la feuille est "table
3.1", Left$(Tbl.Name, Len(Tbl.Name) - 1) donne "Table 3#1" (le point est
remplacé par un #). Aussi, s'il y a de la couleur dans le nom de l'onglet,
un
signe de $ apparait à la fin du nom. Est-ce que tu sais s'il y a moyen
d'obtenir le nom tel qu'il est écrit dans Excel ?
Merci !
--
Alex St-Pierre



Bonsoir Alex;
Par exemple:

Sub SheetExists()
Const Wbk$ = "D:ExcelDataBaseMonClasseur.xls"
Const Sht$ = "Data"
If OkSheetName(Wbk, Sht) Then
MsgBox "La feuille " & Sht & " est présente dans le classeur:" & vbLf &
Wbk
& " !", 64
End If
End Sub

Private Function OkSheetName(FullPathFile$, SheetName$) As Boolean
Dim Con As Object, Cat As Object, Tbl As Object
Set Con = CreateObject("ADODB.Connection")
Con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" _
& FullPathFile & ";" & "Extended Properties=Excel 8.0;"
Set Cat = CreateObject("ADOX.Catalog")
Set Cat.ActiveConnection = Con
For Each Tbl In Cat.Tables
If Left$(Tbl.Name, Len(Tbl.Name) - 1) = SheetName Then
OkSheetName = True
Exit For
End If
Next Tbl
Set Cat = Nothing: Con.Close: Set Con = Nothing
End Function

MP

"Alex St-Pierre" a écrit dans le
message de news:
Bonjour,
J'utilise la programmation suivante pour vérifier si la feuille "data"
d'un
fichier excel fermé existe. La macro suivante ouvre le fichier et
vérifie
si
elle est présente, cela prend environ 10 secondes à exécuter.
Existe-t-il
une
façon plus rapide (peut-être sans ouvrir le fichier excel) de s'assurer
qu'elle est présente?
Merci !
Alex

sXlFilePath2 = Application.GetOpenFilename("Fichiers Excel,*.xls")
If sXlFilePath2 <> False Then
On Error Resume Next
Workbooks.Open sXlFilePath2, False
sXlFileName2 = LCase(Right(sXlFilePath2, Len(sXlFilePath2) -
InStrRev(sXlFilePath2, "")))
Workbooks(sXlFileName2).Activate
Set wks = Nothing
Set wks = Sheets("data")
Workbooks(sXlFileName2).Close (False)
If wks Is Nothing Then
'Aucun traitement, la feuille data n'existe pas.
Else
'Traitement
End If
--
Alex St-Pierre



















1 2