IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Vérifier si feuille existe avec variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut Vérifier si feuille existe avec variable
    Bonjour,

    J'espère que vous allez bien.


    Je travaille actuellement sur un panneau de performance industrielle. Chaque jour, une nouvelle feuille est générée qui reprend les performances du jour précédent (avec la condition des jours ouverts).
    Actuellement, j'ai réussi à faire le code suivant qui me permet de gérer les weekends (afin de reprendre les valeurs du vendredi). Mon problème est le suivant : je voudrai empêcher de créer une feuille excel si celle-ci existe déjà. Or je ne vois pas comment procéder avec la manipulation des dates dans le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Application.ScreenUpdating = False 
     
    Select Case Weekday(Date, vbMonday) 
        Case 7: JourOuvrablePrecedent = Date - 2 
            Sheets("Panneau vierge").Copy After:=Worksheets(Worksheets.Count()) 
            ActiveSheet.Name = Format(Date - 2, "dd-mm") 
            Range("AA2") = Format(Date - 2, "dd-mmm") 
     
        Case 1: JourOuvrablePrecedent = Date - 3 
            Sheets("Panneau vierge").Copy After:=Worksheets(Worksheets.Count()) 
            ActiveSheet.Name = Format(Date - 3, "dd-mm") 
            Range("AA2") = Format(Date - 3, "dd-mmm") 
            Nomfeuille = ActiveSheet.Name 
     
        Case Else: JourOuvrablePrecedent = Date - 1 
            Sheets("Panneau vierge").Copy After:=Worksheets(Worksheets.Count()) 
            ActiveSheet.Name = Format(Date - 1, "dd-mm") 
            Range("AA2") = Format(Date - 1, "dd-mmm") 
            Nomfeuille = ActiveSheet.Name 
    End Select
     
    'il y a encore du code derrière mais cela ne concerne plus le problème
    Pour information, mes feuilles sont sous le format suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Test = Format(Date , "dd-mm")
    Test = "03-05"
    J'ai consulté de nombreux forum mais je ne vois pas comment transposer ce que je vois à mon problème.

    Merci par avance pour vos retours.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par xaviou99 Voir le message
    Bonjour,

    Essayez cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    Function OngletValide(ByVal FichierAModifier As Workbook, ByVal NomDeLOnglet As String) As Boolean
     
    Dim ShACreer As Worksheet
     
        OngletValide = True
        For Each ShACreer In FichierAModifier.Sheets
            If ShACreer.Name = NomDeLOnglet Then
               OngletValide = False
               Exit For
            End If
        Next ShACreer
     
    End Function
     
     
    Sub EssaiOngletValide()
     
        If OngletValide(ActiveWorkbook, "03-05") = False Then Exit Sub 'MsgBox "Cet onglet existe déjà !", vbCritical
     
    End Sub

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Autre solution à partir de votre code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub New_Sheet()
        Dim Ref As Long
        Application.ScreenUpdating = False
        Select Case Weekday(Date, vbMonday)
            Case 7: JourOuvrablePrecedent = Date - 2
                Ref = 2
            Case 1: JourOuvrablePrecedent = Date - 3
                Ref = 3
            Case Else: JourOuvrablePrecedent = Date - 1
                Ref = 1
        End Select
        For i = 1 To Sheets.Count
            If Sheets(i).Name = Format(Date - Ref, "dd-mm") Then Exit Sub
        Next i
        Sheets("Panneau vierge").Copy After:=Worksheets(Worksheets.Count())
        ActiveSheet.Name = Format(Date - Ref, "dd-mm")
        Range("AA2") = Format(Date - Ref, "dd-mmm")
        Nomfeuille = ActiveSheet.Name
    End Sub
    Cdlt

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub New_Sheet()
        Dim Ref As Long
        Application.ScreenUpdating = False
        Select Case Weekday(Date, vbMonday)
            Case 7: JourOuvrablePrecedent = Date - 2
                Ref = 2
            Case 1: JourOuvrablePrecedent = Date - 3
                Ref = 3
            Case Else: JourOuvrablePrecedent = Date - 1
                Ref = 1
        End Select
        For i = 1 To Sheets.Count
            If Sheets(i).Name = Format(Date - Ref, "dd-mm") Then Exit Sub
        Next i
        Sheets("Panneau vierge").Copy After:=Worksheets(Worksheets.Count())
        ActiveSheet.Name = Format(Date - Ref, "dd-mm")
        Range("AA2") = Format(Date - Ref, "dd-mmm")
        Nomfeuille = ActiveSheet.Name
    End Sub
    Bonjour,

    J'aime bien coder une première fois de façon lourde pour ne rien oublier puis j'épure à mon deuxième passage. Vous m'avez devancé donc je vous en remercie (ce sera toujours du travail en moins ).

    Bonne fin de dimanche.

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    Function OngletValide(ByVal FichierAModifier As Workbook, ByVal NomDeLOnglet As String) As Boolean
     
    Dim ShACreer As Worksheet
     
        OngletValide = True
        For Each ShACreer In FichierAModifier.Sheets
            If ShACreer.Name = NomDeLOnglet Then
               OngletValide = False
               Exit For
            End If
        Next ShACreer
     
    End Function
     
     
    Sub EssaiOngletValide()
     
        If OngletValide(ActiveWorkbook, "03-05") = False Then Exit Sub 'MsgBox "Cet onglet existe déjà !", vbCritical
     
    End Sub

    Bonjour,

    Merci pour cette réponse si rapide qui va pouvoir me faire avancer dans mon projet.
    Je viens de l'adapter et cela fonctionne parfaitement.

    Bonne fin de journée.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici une proposition parmi d'autres
    La fonction IsSheetExist renvoie True ou False en fonction de la présence ou non de la feuille dont le nom est passé dans l'argument SheetName , le second argument est facultatif, il repséente l'objet Workbook dans lequel la recherche de la feuille doit être effectuée (par défaut, c'est le classeur actif)

    Basée sur une boucle qui parcoure l'ensemble des feuilles présentes dans le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function IsSheetExist(SheetName As String, Optional oWorkbook As Workbook) As Boolean
      Dim flag As Boolean
      Dim Count As Integer
      If oWorkbook Is Nothing Then Set oWorkbook = ActiveWorkbook
      With oWorkbook
        While (Not flag) And (Count < .Sheets.Count)
         Count = Count + 1
         flag = (SheetName = .Sheets(Count).Name)
        Wend
      End With
      IsSheetExist = flag
    End Function
    Que l'on invoque par exemple comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TestIsSheetExist()
      Const cSheetName As String = "Sites"  ' Nom de la feuille
      MsgBox "La feuille nommée [" & cSheetName & IIf(IsSheetExist(cSheetName), "] Existe", "] N'existe pas")
    End Sub
    ou en précisant le classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TestIsSheetExist()
      Const cSheetName As String = "Sites"  ' Nom de la feuille
      MsgBox "La feuille nommée [" & cSheetName & IIf(IsSheetExist(cSheetName, ThisWorkbook), "] Existe", "] N'existe pas")
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. feuille avec variable
    Par manouk dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/02/2009, 16h41
  2. Vérifier l'existence du variable de session
    Par BradPitt dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 20/10/2008, 12h29
  3. Vérifier qu'une base existe avec un script unix
    Par ibhow dans le forum Débuter
    Réponses: 1
    Dernier message: 23/09/2008, 17h59
  4. Vérifier l'existence une variable
    Par mr_samurai dans le forum MATLAB
    Réponses: 2
    Dernier message: 06/03/2008, 18h46
  5. Copie de Feuille_Renommer avec "bis" si feuille existe déjà
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/01/2008, 11h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo