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

2 réponses

1 2
Avatar
MichDenis
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

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
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







1 2