Autres Tester l'existence d'une feuille

botanicus

XLDnaute Nouveau
Bonjour,
Dans un projet, je coince sur un point de détail qui me paraissait assez simple a priori.
(Précision : je suis sur Excel 2003 et sous Windows 10)

Dans une macro lancée par un formulaire, je dois ouvrir un fichier Excel à traiter, mais ce fichier doit avoir une feuille particulière. Je n'arrive pas à vérifier l'existence de cette feuille pour valider le fichier choisi.

Voici mon code :

VB:
Dim Fichier As Variant

Public Sub OuvrirFichier()
' Ouvre un fichier et vérifie l'existence d'une feuille "Résultat"

    Fichier = Application.GetOpenFilename("(*.xls), *.xls")
    If Fichier = "Faux" Then
        Exit Sub
    End If
    
    On Error Resume Next
    If Fichier <> "" Then
        Workbooks.Open (Fichier)
        If FeuilleExiste("Résultat", (Fichier)) Then
            Sheets("Résultat").Select
            Range("A2").Activate
        Else
            rep = MsgBox("Le fichier choisi n'a pas de feuille 'Résultat' ; recommencer", vbOKOnly)
            Fichier = ""
            Exit Sub
        End If
    End If
    
End Sub

Function FeuilleExiste(NomFeuille As String, Classeur As Workbook) As Boolean
' Vérifie l'existence d'une feuille "NomFeuille" dans le classeur "Classeur"

  Dim Feuille As Worksheet
 
  For Each Feuille In Classeur.Worksheets
    If Feuille.Name = NomFeuille Then
      FeuilleExiste = True
      Exit For
    End If
  Next Feuille
 
  FeuilleExiste = False '(facultatif)
End Function

Il n'y a pas d'erreur de compilation mais la fonction FeuilleExiste n'est même pas exécutée (j'ai mis des points d'arrêt) ! Puis le programme continue après le if FeuilleExiste comme si la fonction était ignorée, sans message d'erreur. J'ai beau lire et relire mon code, je ne trouve pas l'erreur (c'est peut-être tout bête mais je sèche !).... Merci pour votre aide.

@+
Pierre
 

patricktoulon

XLDnaute Barbatruc
bonsoir
VB:
Dim Fichier As Variant

Public Sub OuvrirFichier()
' Ouvre un fichier et vérifie l'existence d'une feuille "Résultat"
Dim WkB As Workbook
    Fichier = Application.GetOpenFilename("(*.xls;*.xlsm), *.xls;*.xlsm")
    If Fichier = False Then Exit Sub
   Set WkB = Workbooks.Open(Fichier)
    If FeuilleExiste("Résultat", WkB) Then
        Sheets("Résultat").Select
        Range("A2").Activate
    Else
        rep = MsgBox("Le fichier choisi n'a pas de feuille 'Résultat' ; recommencer", vbOKOnly)
        WkB.Close
    End If
End Sub

Function FeuilleExiste(NomFeuille As String, Classeur As Workbook) As Boolean
' Vérifie l'existence d'une feuille "NomFeuille" dans le classeur "Classeur"
    Dim Feuille As Worksheet
    For Each Feuille In Classeur.Worksheets
        If Feuille.Name = NomFeuille Then FeuilleExiste = True: Exit Function
    Next Feuille
End Function
 

ChTi160

XLDnaute Barbatruc
Re
Bonsoir Jean-Marcel
constatation :
VB:
Public Function FeuilleExiste(NomFeuille As String, Classeur As Workbook) As Boolean
' Vérifie l'existence d'une feuille "NomFeuille" dans le classeur "Classeur"
  Dim Feuille As Worksheet 
  For Each Feuille In Classeur.Worksheets
    If Feuille.Name = NomFeuille Then
      FeuilleExiste = True
      Exit For 'ici on sort de la Boucle pas de la function donc on va vers "FeuilleExiste = False"
    End If
  Next Feuille 
  FeuilleExiste = False '(facultatif) 'Ici c'est la valeur donnée à la Fonction (à supprimer)
End Function
cette function renverra toujours False
Bonne fin de Soirée
Jean marie
 

kiki29

XLDnaute Barbatruc
Salut, et 2 de plus .....
VB:
Function FeuilleExiste(sFeuille As String) As Boolean
    FeuilleExiste = Evaluate("ISREF('" & sFeuille & "'!A1)")
End Function

Function FeuilleExiste(sClasseur As String, sFeuille As String) As Boolean
Dim v As Variant
    v = Evaluate("ISREF('[" & sClasseur & "]" & sFeuille & "'!A1)")
    FeuilleExiste = IIf(IsError(v), False, v)
End Function
 

ChTi160

XLDnaute Barbatruc
Re
ce que j'ai testé!
Code:
Dim Fichier As Variant
Dim WkB As Workbook
Public Sub OuvrirFichier()
' Ouvre un fichier et vérifie l'existence d'une feuille "Résultat"

    Fichier = Application.GetOpenFilename("(*.xlsm), *.xls")
    If Fichier = "Faux" Then
        Exit Sub
    End If
   
    On Error Resume Next
    If Fichier <> "" Then
      Set WkB = Workbooks.Open(Fichier)
        If FeuilleExiste("Résultat", WkB) Then
            Sheets("Résultat").Select
            Range("A2").Activate
        Else
            rep = MsgBox("Le fichier choisi n'a pas de feuille 'Résultat' ; recommencer", vbOKOnly)
            Fichier = ""
            Exit Sub
        End If
    End If
   
End Sub

Public Function FeuilleExiste(NomFeuille As String, Classeur As Workbook) As Boolean
' Vérifie l'existence d'une feuille "NomFeuille" dans le classeur "Classeur"
      FeuilleExiste = False
  Dim Feuille As Worksheet
  For Each Feuille In Classeur.Worksheets
    If Feuille.Name = NomFeuille Then
      FeuilleExiste = True
      Exit For    
    End If
  Next Feuille
End Function
edit
OUPsss Patrick : je n'avais pas vu 1mm entre le #2 et le #3
jean marie
 

botanicus

XLDnaute Nouveau
Merci à tous pour vous être penchés sur mon problème !

J'ai corrigé mes erreurs avec la première solution proposée (merci patricktoulon) ; en fait, il y avait 2 erreurs :
- Ma variable Fichier n'était pas considérée comme un "Workbook". J'ai donc adopté le "Set WkB = Workbooks.Open(Fichier)".
- Dans la fonction FeuilleExiste() j'avais terminé mon résultat True par Exit For au lieu de Exit Function.

Après ces corrections cette étape fonctionne. Encore merci ! Je peux continuer mon développement (comparaison de 2 fichiers évolutifs de plus de 1800 lignes de données)

Peut-être à bientôt, je suis très loin d'être excellant en Excel !
 

Statistiques des forums

Discussions
312 103
Messages
2 085 306
Membres
102 859
dernier inscrit
Diallokass