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

[VBA] Tester l'existence d'une feuille dans un autre classeur

5 réponses
Avatar
HD
Bonjour,

Comment tester l'existence d'une feuille dans un classeur sans ouvrir ce
classeur ?

Merci d'avance pour votre aide
--
@+
HD

5 réponses

Avatar
isabelle
bonjour HD,

par exemple :

=SI(ESTERREUR('C:test[AAA.xls]Feuil3'!$A$3);"N'existe pas";"existe")

isabelle

Bonjour,

Comment tester l'existence d'une feuille dans un classeur sans ouvrir ce
classeur ?

Merci d'avance pour votre aide


Avatar
HD
Comment tester l'existence d'une feuille dans
un classeur sans ouvrir ce classeur ?


Plus précisément... Comment à partir d'un classeur savoir si un autre
classeur dispose ou non d'une feuille d'un nom déterminé et ce sans ouvrir
cet autre classeur...


--

@+
HD

Avatar
HD
=SI(ESTERREUR('C:test[AAA.xls]Feuil3'!$A$3);"N'existe pas";"existe")


Le problème est que lors du changement du lien au niveau du nom de la
feuille (en VBA via un Replace) l'on a alors une fenêtre qui s'ouvre nous
précisant que la feuille n'existe pas sur le classeur et qu'il nous faut en
sélectionner une autre... Même en passant par une désactivation du
DisplayAlerts ou du AskToUpdateLinks j'ai toujours la fenêtre qui
s'affiche... alors que je n'en veut pas...

Voici mon bout de code qui change ma cellule D21 où se trouve le lien à
tester... (avant d'avoir à lancer le changement de lien sur un grand nombre
de cellules)

Sub test()
On Error Resume Next
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.AskToUpdateLinks = False
Range("D21").Replace What:="]2007'", Replacement:="]2005'",
LookAt:=xlPart, SearchOrder:=xlByRows
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.AskToUpdateLinks = True
End Sub

Avatar
HD
Je me suis donc résolu à ouvrir le classeur source... Je ne pense pas qu'il
y'ai une autre solution... Voici mon code :


Function TestFeuille(FTest As String) As Boolean
On Error Resume Next
Dim AWkbk As String
Dim FicDest As String
Dim FicDestNom As String

TestFeuille = False
AWkbk = ActiveWorkbook.Name

'Si le classeur source est ouvert
If Workbooks.Count > 1 Then
For Each wkbks In Workbooks
If LCase(wkbks.Name) = "budget.xls" Then
wkbks.Activate
Sheets(FTest).Select
If ActiveSheet.Name = FTest Then
TestFeuille = True
Exit Function
End If
End If
Next
End If

'Si le classeur source n'est pas ouvert
FicDest = Replace(Range("D22").Formula, "='", "")
FicDestNom = Mid(FicDest, InStr(1, FicDest, "[") + 1)
FicDestNom = Left(FicDestNom, InStr(1, FicDestNom, "]") - 1)
FicDest = Left(FicDest, InStr(1, FicDest, "[") - 1)

Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.AskToUpdateLinks = False
Workbooks.Open Filename:=FicDest & FicDestNom
Sheets(FTest).Select
If ActiveSheet.Name = FTest Then TestFeuille = True
ActiveWorkbook.Close
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.AskToUpdateLinks = True
End Function
Avatar
isabelle
bonjour HD,

peut être avec cette approche,

x = Range("C2").FormulaR1C1
x = Right(x, Len(x) - 1)
x = Application.Substitute(x, "Feuil1", "Feuil2")
If IsError(ExecuteExcel4Macro("" & x & "")) Then MsgBox "n'existe pas"


isabelle

=SI(ESTERREUR('C:test[AAA.xls]Feuil3'!$A$3);"N'existe pas";"existe")


Le problème est que lors du changement du lien au niveau du nom de la
feuille (en VBA via un Replace) l'on a alors une fenêtre qui s'ouvre nous
précisant que la feuille n'existe pas sur le classeur et qu'il nous faut en
sélectionner une autre... Même en passant par une désactivation du
DisplayAlerts ou du AskToUpdateLinks j'ai toujours la fenêtre qui
s'affiche... alors que je n'en veut pas...

Voici mon bout de code qui change ma cellule D21 où se trouve le lien à
tester... (avant d'avoir à lancer le changement de lien sur un grand nombre
de cellules)

Sub test()
On Error Resume Next
Application.EnableEvents = False
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Application.AskToUpdateLinks = False
Range("D21").Replace What:="]2007'", Replacement:="]2005'",
LookAt:=xlPart, SearchOrder:=xlByRows
Application.EnableEvents = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.AskToUpdateLinks = True
End Sub