Vérifier si feuille existe

Résolu
Thibault -  
 Thibault -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. Thibault
     
    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
    
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Tu n'aurais pas oublié d'utiliser un else if au lieu de faire deux if
      0
    2. Thibault > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Malheureusement 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
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > 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" ...
      0
    4. Thibault > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Je regarderai demain et je te tiendrai au courant, merci pour les propositions en tout cas.
      0
    5. Thibault > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Bonsoir,

      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
      
      0