Vérifier si feuille existe

Résolu
Bonjour,

Ma demande est simple, mais je bloque sur la syntaxe.
J'ai une feuille qui est stockée dans une variable : "FICHER1", et j'aimerais vérifier si elle existe, j'ai donc tenté :
If Sheets(FICHIER1) = True Then

Je n'ai rien trouvé qui fonctionne, à part
ActiveSheet.Name = FICHIER1
mais ce n'est pas ce que je souhaite.

Merci d'avance.
Configuration: Windows / Edge 18.17763

2 réponses

  1. Modérateur
    Bonjour,

    Tu pourrais, par exemple, utiliser une fonction du genre
    Function FExist(NomF As String) As Boolean ' test si la feuille existe
       Application.ScreenUpdating = False
       On Error Resume Next
       FExist = Not Sheets(NomF) Is Nothing
       Application.ScreenUpdating = True
    End Function 
    

    et donc, dans ton code, ensuite, faire
     if FExist(FICHIER1) Then 
          
    

    1. Parfait ! Merci beaucoup cependant j'ai un souci qui persiste si vous pouvez m'aider je vous en serai vraiment reconnaissant mais sinon tant pis. Je vous explique :

      J'ai deux onglets avec du contenu. La macro au lancement crée deux nouveaux onglets qui sont un peu un miroir avec un mélange des deux valeurs. Le souci c'est que la copie fonctionne pour un des onglets mais pas pour les deux. Mon souci doit venir de mon If mais je ne trouve pas de bonne solution.

      Voici mon code :
      
      Sub test()
          Dim i As Integer, j As Integer, k As Integer, m As Integer, Feuille_X As String, Feuille_Y As String, Ligne_vide As Integer
          Dim Ligne_du_haut As Integer, Ligne_du_bas As Integer, Nombre_de_lignes As Integer, Nombre_de_colonnes As Byte
          
          Dim Fichier1 As String
          Dim Fichier2 As String
          Dim Fichier3 As String
          Dim Fichier4 As String
          
          Application.ScreenUpdating = False
          Fichier1 = InputBox("Indiquez votre 1er Fichier ? Homog?n?iser", "Fichier1")
          Fichier2 = InputBox("Indiquez votre 2nd Fichier ? Homog?n?iser", "Fichier2")
          Fichier3 = Fichier1 & "post"
          Sheets.Add After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Select
          Sheets(Sheets.Count).Name = Fichier3
          
          Worksheets(Fichier1).Range("A1:AZ128").Copy
          ActiveSheet.Paste Destination:=Worksheets(Fichier3).Range("A1:AZ128")
          
          Fichier4 = Fichier2 & "post"
          Sheets.Add After:=Sheets(Sheets.Count)
          Sheets(Sheets.Count).Select
          Sheets(Sheets.Count).Name = Fichier4
          
          Worksheets(Fichier2).Range("A1:AZ128").Copy
          ActiveSheet.Paste Destination:=Worksheets(Fichier4).Range("A1:AZ128")
          
      
          With ActiveSheet
              Range("A2:Z" & Rows.Count).ClearContents
              Range("A2:Z" & Rows.Count).Interior.Pattern = xlNone
              
              If FExist(Fichier3) Then
                  Feuille_X = Fichier1
                  Feuille_Y = Fichier2
              End If
              If FExist(Fichier4) Then
                  Feuille_X = Fichier2
                  Feuille_Y = Fichier1
              End If
      
      'la suite n'est pas vraiment nécessaire au souci. Puisqu'avec cette position de If c'est toujours le second If qui prime :
      If FExist(Fichier4) Then
                  Feuille_X = Fichier2
                  Feuille_Y = Fichier1
              End If
      
      1. Modérateur
        Tu n'aurais pas oublié d'utiliser un else if au lieu de faire deux if
      2. @jordane45Malheureusement non, le souci reste le même ce n'est pas un souci de double conditions, mais plutôt que la condition n'est pas prise en charge je dirai…
        Je bloque totalement
      3. Modérateur
        @Thibault

        la condition n'est pas prise en charge je dirai…

        Laquelle .. celle la ?
         If FExist(Fichier4) Then
               Feuille_X = Fichier2
              Feuille_Y = Fichier1
        End If
        

        Tu as essayé de mettre un point d'arrêt et/ou d'éxécuter le code en mode pas à pas pour savoir ce que valent tes variables ??
        Je serai curieux de savoir ce que contient "réellement" ta variable Fichier4 ....

        Et puis, le nom de tes feuilles... vérifie que tu as bien la même écriture ( minuscules/majuscules et éventuels espaces avant ou après le nom de la feuille )
        Tout ça peut joueur ....
        Par exemple .... "Jordane " n'est pas identique à "Jordane" ni à "jordaNe" ...
      4. @jordane45Je regarderai demain et je te tiendrai au courant, merci pour les propositions en tout cas.
      5. @jordane45Bonsoir,

        J'ai tenté différente option et rien ni fait, pourtant Fichier3 et Fichier4 renvoie bien le nom des feuilles Excel, donc je ne comprends vraiment pas…

        Voici mon code complet , je commence vraiment à désespérer

        Sub zazda()
            Dim i As Integer, j As Integer, k As Integer, m As Integer, Feuille_X As String, Feuille_Y As String, Ligne_vide As Integer
            Dim Ligne_du_haut As Integer, Ligne_du_bas As Integer, Nombre_de_lignes As Integer, Nombre_de_colonnes As Byte
            
            Dim Fichier1 As String
            Dim Fichier2 As String
            Dim Fichier3 As String
            Dim Fichier4 As String
            
            Application.ScreenUpdating = False
            Fichier1 = InputBox("Indiquez votre 1er Fichier ? Homog?n?iser", "Fichier1")
            Fichier2 = InputBox("Indiquez votre 2nd Fichier ? Homog?n?iser", "Fichier2")
            Fichier3 = Fichier1 & "post"
            Sheets.Add After:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Select
            Sheets(Sheets.Count).Name = Fichier3
            
            Worksheets(Fichier1).Range("A1:AZ128").Copy
            ActiveSheet.Paste Destination:=Worksheets(Fichier3).Range("A1:AZ128")
            
            Fichier4 = Fichier2 & "post"
            Sheets.Add After:=Sheets(Sheets.Count)
            Sheets(Sheets.Count).Select
            Sheets(Sheets.Count).Name = Fichier4
            
            Worksheets(Fichier2).Range("A1:AZ128").Copy
            ActiveSheet.Paste Destination:=Worksheets(Fichier4).Range("A1:AZ128")
            
        
            With ActiveSheet
                Range("A2:Z" & Rows.Count).ClearContents
                Range("A2:Z" & Rows.Count).Interior.Pattern = xlNone
                
                If FExist(Fichier3) Then
                    Feuille_X = Fichier1
                    Feuille_Y = Fichier2
                End If
                If FExist(Fichier4) Then
                    Feuille_X = Fichier2
                    Feuille_Y = Fichier1
                End If
                MsgBox (Fichier3)
                
                Nombre_de_colonnes = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
                Sheets(Feuille_X).Range("A2:Z" & Sheets(Feuille_X).Range("A" & Rows.Count).End(xlUp).Row).Copy .Range("A2")
                Ligne_vide = .Range("A" & Rows.Count).End(xlUp).Row + 1
                Sheets(Feuille_Y).Range("A2:a" & Sheets(Feuille_Y).Range("A" & Rows.Count).End(xlUp).Row).Copy .Range("A" & Ligne_vide)
                With .Range(.Cells(Ligne_vide, 1), .Cells(.Range("A" & Rows.Count).End(xlUp).Row, Nombre_de_colonnes)).Interior
                    .ThemeColor = xlThemeColorAccent2
                    .TintAndShade = 0.8
                End With
                For i = .Range("A" & Rows.Count).End(xlUp).Row To Ligne_vide Step -1
                    On Error Resume Next
                    j = Application.WorksheetFunction.Match(.Range("A" & i), .Range("A2:A" & Ligne_vide - 1), 0)
                        If j > 0 Then .Rows(i).Delete
                    j = 0
                Next i
                .Range("A1:Z" & Rows.Count).Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
                
                .Range("B2").Activate
                
        Retour:
                
                Do Until ActiveCell.Offset(1, 0) = ""
                    ActiveCell.Offset(1, 0).Activate
                Loop
                Ligne_du_haut = ActiveCell.Row
                ActiveCell.Offset(1, 0).Activate
                Do Until ActiveCell.Offset <> ""
                    If ActiveCell.Offset(1, -1) = "" Then Exit Sub
                    ActiveCell.Offset(1, 0).Activate
                Loop
                Ligne_du_bas = ActiveCell.Row
                
                For k = 2 To Nombre_de_colonnes
                    For m = Ligne_du_haut + 1 To Ligne_du_bas - 1
                        Cells(m, k) = Round(Cells(Ligne_du_haut, k) + ((Cells(Ligne_du_bas, k) - Cells(Ligne_du_haut, k)) / (Cells(Ligne_du_bas, 1) - Cells(Ligne_du_haut, 1))) * (Cells(m, 1) - Cells(Ligne_du_haut, 1)), 3)
                    Next m
                Next k
                
                Range("B" & Ligne_du_bas).Activate
                GoTo Retour
                
            End With ' ActiveSheet
            
        End Sub