VBA - Vérifier si une feuille existe dans un classeur fermé
12 réponses
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
Même si toto est un "nom" local c'est à dire défini comme appartenant à la feuil1, la ligne de code fonctionne très bien
mais je ne crois pas que l'on puisse modifier la ligne de code en remplaçant toto par "Feuil1!toto" si c'est à quoi tu fais référence.
"Alex St-Pierre" a écrit dans le message de news:
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
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
Même si toto est un "nom" local c'est à dire défini comme appartenant à la feuil1,
la ligne de code fonctionne très bien
mais je ne crois pas que l'on puisse modifier la ligne de code en remplaçant
toto par "Feuil1!toto" si c'est à quoi tu fais référence.
"Alex St-Pierre" <AlexStPierre@discussions.microsoft.com> a écrit dans le message de news:
2F99409C-FDFB-48F2-869A-A16D4135B7DD@microsoft.com...
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
"Alex St-Pierre" <AlexStPierre@discussions.microsoft.com> a écrit dans le message de news:
C5C6D728-CC8D-497F-A1E1-6FD0E7CC9DAB@microsoft.com...
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" <AlexStPierre@discussions.microsoft.com> a écrit dans le
message de news: 225D5082-BF09-42D3-B938-EA71F18BA9EA@microsoft.com...
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" <AlexStPierre@discussions.microsoft.com> a écrit dans le
message de news: 5F9EFF13-EA48-4F02-8E61-FF2760109A61@microsoft.com...
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
Même si toto est un "nom" local c'est à dire défini comme appartenant à la feuil1, la ligne de code fonctionne très bien
mais je ne crois pas que l'on puisse modifier la ligne de code en remplaçant toto par "Feuil1!toto" si c'est à quoi tu fais référence.
"Alex St-Pierre" a écrit dans le message de news:
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
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
Alex St-Pierre
Bonjour Michel, Je me sert de ton programme pour ajouter l'ensemble des noms de feuilles à un ListView (en plus de tester si la feuille data existe). Par la suite, l'utilisateur sélectionne les feuilles et en appuyant sur "Exécuter" et les feuilles se copie dans le classeur actif. Sur chacune des feuilles, il y a une information (Sheets("abc").Evaluate("Type") qui est stocké en mémoire. Est-ce que tu si cette variable est accessible via ADODB.Connection? Merci bcp ! -- Alex St-Pierre
"Michel Pierron" wrote:
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
Bonjour Michel,
Je me sert de ton programme pour ajouter l'ensemble des noms de feuilles à
un ListView (en plus de tester si la feuille data existe). Par la suite,
l'utilisateur sélectionne les feuilles et en appuyant sur "Exécuter" et les
feuilles se copie dans le classeur actif. Sur chacune des feuilles, il y a
une information (Sheets("abc").Evaluate("Type") qui est stocké en mémoire.
Est-ce que tu si cette variable est accessible via ADODB.Connection?
Merci bcp !
--
Alex St-Pierre
"Michel Pierron" wrote:
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" <AlexStPierre@discussions.microsoft.com> a écrit dans le
message de news: 5F9EFF13-EA48-4F02-8E61-FF2760109A61@microsoft.com...
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
Bonjour Michel, Je me sert de ton programme pour ajouter l'ensemble des noms de feuilles à un ListView (en plus de tester si la feuille data existe). Par la suite, l'utilisateur sélectionne les feuilles et en appuyant sur "Exécuter" et les feuilles se copie dans le classeur actif. Sur chacune des feuilles, il y a une information (Sheets("abc").Evaluate("Type") qui est stocké en mémoire. Est-ce que tu si cette variable est accessible via ADODB.Connection? Merci bcp ! -- Alex St-Pierre
"Michel Pierron" wrote:
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