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

Le
HD
Bonjour,

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

Merci d'avance pour votre aide
--
@+
HD
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #5067911
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


HD
Le #5067901
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

HD
Le #5067881
=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

HD
Le #5067781
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
isabelle
Le #5067761
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





Publicité
Poster une réponse
Anonyme