Vérifier si feuille existe
Résolu
Thibault
-
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é :
Je n'ai rien trouvé qui fonctionne, à part
Merci d'avance.
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 = FICHIER1mais ce n'est pas ce que je souhaite.
Merci d'avance.
Configuration: Windows / Edge 18.17763
A voir également:
- Vérifier si feuille existe
- Verifier compatibilite windows 11 - Guide
- Vérifier si mot de passe piraté - Guide
- Bruler feuille de laurier - Guide
- Vérifier si une phrase est correcte - Accueil - Google
- Feuille diddl la plus rare ✓ - Forum Graphisme
2 réponses
Bonjour,
Tu pourrais, par exemple, utiliser une fonction du genre
et donc, dans ton code, ensuite, faire
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
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 :
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
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" ...
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
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