Supprimer feuille si existe avec confirmation

  • Initiateur de la discussion Initiateur de la discussion altefqhatre
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

A

altefqhatre

Guest
Bonjour à tous 🙂

Je fais appel à vous car je bloque un peu...

Dans un classeur, j'ai une procédure qui permet de créer une nouvelle feuille récapitulative. Le problème est que si elle existe déjà, ben ça plante.

J'aimerais en fait demander confirmation à l'utilisateur si oui ou non il veut générer cette nouvelle feuille.

En résumé:

1) InputBox dans laquelle l'user saisi un mois (ex: janvier, avril, mai...)
2) Si la feuille n'existe pas, la procédure la crée avec une série d'instructions et de mises en forme
3) Si la feuille existe: MsgBox avec un vbYesNo "Voulez-vous écraser l'existante?"

3a) Case vbYes: Suppression de la feuille en question et création d'une nouvelle
3b Case vbNo: Exit Sub

Le problème est que je n'arrive pas à trouver comment vérifier si la feuille existe :-(

Si quelqu'un a une idée c'est avec grand plaisir que je prends ^^

Merci beaucoup!!!

Bonne soirée 🙂
 
Re : Supprimer feuille si existe avec confirmation

bonjour altefqhatre

fonction feuille_existe

Code:
Function feuille_existe(nom_feuille)
For n = 1 To Sheets.Count
 If Sheets(n).Name = nom_feuille Then
    feuille_existe = True
    Exit Function
 End If
Next n
feuille_existe = False
End Function

Sub essai()
MsgBox (feuille_existe("Feuil1"))
End Sub
 
Re : Supprimer feuille si existe avec confirmation

Bonsoir "Truc en quatre" (Pas possible ces pseudos!!! 😀)
Bonsoir pierrejean et à ceux qui passeront par là.

Une autre façon de faire:

Code:
'Application.DisplayAlerts = False ' Si l'on ne veut pas en être averti
For Each FEUILLE In ThisWorkbook.Worksheets   
    If FEUILLE.Name = "LE NOM DE TA FEUILLE " Then ' 
       FEUILLE.Delete
    End If    
Next
' Application.DisplayAlerts = True ' Remise en place de l'alerte.

Amicalement

Yann
 
Re : Supprimer feuille si existe avec confirmation

Merci pour vos réponses 🙂

Malheureusement je ne maîtrise pas très bien les fonctions en VBA mais j'ai essayé la méthode de pierrejean 🙂

Voilà le code:

Code:
Option Explicit
________________________________________________
Function feuille_existe(nom_feuille)
Dim n As Integer
For n = 1 To Sheets.Count
 If Sheets(n).Name = nom_feuille Then
    feuille_existe = True
    Exit Function
 End If
Next n
feuille_existe = False
End Function
______________________________________________________


Sub Mensuel()


Dim mois As String
Dim feuille As Worksheet
Dim trouvée As Boolean
Dim sm As Long
Dim i As Integer
Dim n As Integer




Application.DisplayAlerts = False




mois = InputBox("Choissisez le mois svp")
                
                
[B]If (feuille_existe("Récap" & mois)) = True Then[/B]
                
                
                
     Select Case MsgBox("La feuille existe déjà. Voulez-vous la remplacer?", vbYesNo)

                
            Case vbYes
                               
                                       
    feuille.Delete
                                       
                         
                                       
                For n = 1 To Sheets.Count
                        If Sheets(n).Name = mois Then
                        trouvée = True
                        
                        
                        Sheets(n).Activate
                        
                        
                Exit For
                End If
                Next n
                
                
                If Not trouvée Then
                        
                        
                        MsgBox "Erreur", vbCritical + vbOKOnly
                
                            
                Exit Sub
                End If
                
                
                Sheets.Add.Move After:=Sheets(Sheets.Count)
                ActiveSheet.Name = "Récap" & Chr(160) & mois
                
                
                Worksheets("Récap exemple").Visible = 1
                
                
                    Sheets("Récap exemple").Select
                    Cells.Select
                    Selection.Copy
                    Sheets("Récap" & Chr(160) & mois).Select
                    ActiveSheet.Paste
                    Selection.Replace What:="exemple", Replacement:=mois, LookAt:=xlPart, _
                        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                        ReplaceFormat:=False
                    Range("A1").Select
                    
                
                For sm = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
                        If Cells(sm, "O").Value = "0" Then
                            Rows(sm).Select
                            Selection.EntireRow.Hidden = True
                        End If
                        
                    Next sm
                  
                
                Worksheets("Récap exemple").Visible = 0
                
                
                With ActiveSheet.PageSetup
                        .PrintTitleRows = ""
                        .PrintTitleColumns = ""
                    End With
                    ActiveSheet.PageSetup.PrintArea = ""
                    With ActiveSheet.PageSetup
                        .LeftHeader = ""
                        .CenterHeader = ""
                        .RightHeader = ""
                        .LeftFooter = ""
                        .CenterFooter = ""
                        .RightFooter = ""
                        .LeftMargin = Application.InchesToPoints(0.787401575)
                        .RightMargin = Application.InchesToPoints(0.787401575)
                        .TopMargin = Application.InchesToPoints(0.984251969)
                        .BottomMargin = Application.InchesToPoints(0.984251969)
                        .HeaderMargin = Application.InchesToPoints(0.4921259845)
                        .FooterMargin = Application.InchesToPoints(0.4921259845)
                        .PrintHeadings = False
                        .PrintGridlines = False
                        .PrintComments = xlPrintNoComments
                        .PrintQuality = 600
                        .CenterHorizontally = False
                        .CenterVertically = False
                        .Orientation = xlLandscape
                        .Draft = False
                        .PaperSize = xlPaperA4
                        .FirstPageNumber = xlAutomatic
                        .Order = xlDownThenOver
                        .BlackAndWhite = False
                        .Zoom = False
                        .FitToPagesWide = 1
                        .FitToPagesTall = 1
                        .PrintErrors = xlPrintErrorsDisplayed
                    End With
                
                
                    MsgBox "Rapport OK", vbInformation + vbOKOnly
                                      
                     
                Case vbNo
                
                Exit Sub
                  
            End Select



[COLOR="Red"]Else[/COLOR]
                

                
                For n = 1 To Sheets.Count
                        If Sheets(n).Name = mois Then
                        trouvée = True
                        
                        
                        Sheets(n).Activate
                        
                        
                Exit For
                End If
                Next n
                
                
                If Not trouvée Then
                        
                        
                        MsgBox "Erreur", vbCritical + vbOKOnly
                
                            
                Exit Sub
                End If
                
                
                Sheets.Add.Move After:=Sheets(Sheets.Count)
                ActiveSheet.Name = "Récap" & Chr(160) & mois
                
                
                Worksheets("Récap exemple").Visible = 1
                
                
                    Sheets("Récap exemple").Select
                    Cells.Select
                    Selection.Copy
                    Sheets("Récap" & Chr(160) & mois).Select
                    ActiveSheet.Paste
                    Selection.Replace What:="exemple", Replacement:=mois, LookAt:=xlPart, _
                        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
                        ReplaceFormat:=False
                    Range("A1").Select
                    
                
                For sm = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
                        If Cells(sm, "O").Value = "0" Then
                            Rows(sm).Select
                            Selection.EntireRow.Hidden = True
                        End If
                        
                    Next sm
                
                
                
                Worksheets("Récap exemple").Visible = 0
                
                
                With ActiveSheet.PageSetup
                        .PrintTitleRows = ""
                        .PrintTitleColumns = ""
                    End With
                    ActiveSheet.PageSetup.PrintArea = ""
                    With ActiveSheet.PageSetup
                        .LeftHeader = ""
                        .CenterHeader = ""
                        .RightHeader = ""
                        .LeftFooter = ""
                        .CenterFooter = ""
                        .RightFooter = ""
                        .LeftMargin = Application.InchesToPoints(0.787401575)
                        .RightMargin = Application.InchesToPoints(0.787401575)
                        .TopMargin = Application.InchesToPoints(0.984251969)
                        .BottomMargin = Application.InchesToPoints(0.984251969)
                        .HeaderMargin = Application.InchesToPoints(0.4921259845)
                        .FooterMargin = Application.InchesToPoints(0.4921259845)
                        .PrintHeadings = False
                        .PrintGridlines = False
                        .PrintComments = xlPrintNoComments
                        .PrintQuality = 600
                        .CenterHorizontally = False
                        .CenterVertically = False
                        .Orientation = xlLandscape
                        .Draft = False
                        .PaperSize = xlPaperA4
                        .FirstPageNumber = xlAutomatic
                        .Order = xlDownThenOver
                        .BlackAndWhite = False
                        .Zoom = False
                        .FitToPagesWide = 1
                        .FitToPagesTall = 1
                        .PrintErrors = xlPrintErrorsDisplayed
                    End With
                
                
                    MsgBox "Rapport OK", vbInformation + vbOKOnly


End If

End Sub

Le problème c'est qu'il aime pas trop la ligne en gras et qu'il passe directement au "Else" (en rouge) même si la feuille existe.

Merci de votre aide en tout cas!
 
Re : Supprimer feuille si existe avec confirmation

bonjour à tous,

c'est normal, une function s'utilise dans une feuille de calcul, pas dans du vba

sinon, le déroulement logique serait :
1. je demande quelle feuille est à créer
2. je boucle (for n = 1 to sheets.count...) sur toutes les feuilles
3. je vérifie que le nom entré en 1. n'existe pas déja
4. si existe, je demande s'il faut supprimer
5. si oui, on supprime et on crée la nouvelle
6. si non, exit sub
7. si la feuille n'existe pas, on la crée

tu as déja tous les instructions VBA dans ton code, elles sont seulement pas placées dans le bon ordre
 
Re : Supprimer feuille si existe avec confirmation

Bonjour ALTF4, Bonjour mutzik,

c'est normal, une function s'utilise dans une feuille de calcul, pas dans du vba

Pas d'accord, on peut trés bien utiliser une Function dans le VBA et/ou dans la feuille de calcul
Je ne vois pas bien pourquoi ça plante, il doit manquer un End If ou un Next à un endroit ou un autre...
 
Re : Supprimer feuille si existe avec confirmation

Re

Mais si Bertrand une fonction personnalisée peut parfaitement etre utilisée en Vba

Voir le fichier joint
pour alterfqhatre

Bien controler cette ligne
Code:
[B]If (feuille_existe("Récap" & mois)) = True Then[/B]

au besoin la faire preceder d'un Msgbox("Récap" & mois ) pour visualiser le nom de la feuille (attention aux espaces)

Edit: Merci Tototiti
 

Pièces jointes

Re : Supprimer feuille si existe avec confirmation

Merci beaucoup Messieurs ça fonctionne parfaitement :-D

J'ai effectivement déclaré la fonction:

Code:
Function feuille_existe(nom_feuille as String)

De plus, comme l'a conseillé pierrejean j'ai placé un MsgBox avant et j'ai remarqué que j'avais oublié de mettre des espaces avec Chr(160)... 😛


Merci bien et bonne matinée!

a+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour