Vérifier si feuille existe
Résolu/Fermé
A voir également:
- Vérifier si feuille existe
- Verifier un lien - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Vérifier si mot de passe piraté - Guide
- Comment supprimer une feuille sur word - Guide
- Excel reporter des données sur une autre feuille avec conditions - Forum Excel
2 réponses
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
15 déc. 2020 à 17:31
15 déc. 2020 à 17:31
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
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
15 déc. 2020 à 21:25
15 déc. 2020 à 21:25
Tu n'aurais pas oublié d'utiliser un else if au lieu de faire deux if
Thibault
>
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
15 déc. 2020 à 21:41
15 déc. 2020 à 21:41
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
Je bloque totalement
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
4 703
>
Thibault
15 déc. 2020 à 22:24
15 déc. 2020 à 22:24
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" ...
Thibault
>
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
15 déc. 2020 à 22:59
15 déc. 2020 à 22:59
Je regarderai demain et je te tiendrai au courant, merci pour les propositions en tout cas.
Thibault
>
jordane45
Messages postés
38289
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 novembre 2024
16 déc. 2020 à 23:00
16 déc. 2020 à 23:00
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