Tester si feuille déjà éxistante? Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'315
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 16 janvier 2015, 16:22

Bonjour à toutes et à tous,
Je voudrai savoir s'il est possible (sans que ce soit une usine à gas :roll: ) de vérifier l'existance d'une feuille?

Dans le code si dessous, je suis obligé d'attendre la fin du mois pour sauvegarder, car si je fais 2 sauvegardes, j'ai une erreur (excel ne peut pas créer 2 fois la même feuille).

Ce que j'aurai souhaité, c'est que si la feuille est déjà présente, soit je l'écrase, soit je la supprime pour ensuite la recréer.

Mon code:
    Private Sub CommandButton1_Click()
    Dim mois As String, x As Date
      Sheets("Modèle").Activate
        ActiveSheet.Copy After:=Sheets(Sheets.Count)
  
       x = Range("H5")                                    'repérer le n° du mois à sauvegarder
     
       ActiveSheet.Name = UCase(Format(x, "mmmm"))     'ex:JANVIER

       ActiveSheet.Shapes("CommandButton1").Select
       Selection.Delete                                     'Effacer le bouton de sauvegarde
     
        mois = ActiveSheet.Name
          
       Sheets("Modèle").Select                              'on revient au modèle après sauvegarde'
       
        MsgBox ("Le mois de " & mois & "" & " est sauvegardé")
    End Sub    
     
Sans abuser de votre gentillesse, si vous pouviez ajouter quelques commentaires afin de comprendre (du moins essayer) :)
Merci pour vos réponses,
Cordialement,
xorsankukai
Modifié en dernier par xorsankukai le 17 janvier 2015, 03:25, modifié 2 fois.
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
F
FINDRH
Membre impliqué
Membre impliqué
Messages : 1'402
Appréciations reçues : 15
Inscrit le : 12 février 2010
Version d'Excel : 2016

Message par FINDRH » 16 janvier 2015, 16:28

Bonjour

Un bout de code qui peut te servir

Vnfeuilc = tonomde feuille

For I = 1 To Sheets.Count
If Sheets(I).Name = Vnfeuilch Then
Application.DisplayAlerts = False
Sheets(Vnfeuilch).Select
ActiveSheet.Delete' suppression de la feuille
Application.DisplayAlerts = True
GoTo 210
Else
End If
Next I

Codialement

FINDRH
Avatar du membre
Cappe Pierre
Membre impliqué
Membre impliqué
Messages : 1'997
Appréciations reçues : 8
Inscrit le : 24 novembre 2012
Version d'Excel : 2010

Message par Cappe Pierre » 16 janvier 2015, 16:44

Bonjour, xorsankukai
Un fichier à tester
Cordialement
Pierrot




resolu_4.jpg
resolu_4.jpg (8.27 Kio) Vu 5113 fois
création onglet feuilles_V2.xlsm
(50.69 Kio) Téléchargé 190 fois
Pierrot
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'315
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 17 janvier 2015, 03:08

Bonjour FINDRH et Cappe Pierre,
Je vous remercie pour vos réponses.
Je vais étudier vos 2 propositions.

Bon week-end,
A bientôt sur le forum.
Cordialement,
xorsankukai
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'554
Appréciations reçues : 174
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 17 janvier 2015, 06:28

Bonjour,
Une fonction perso à, mettre dans un module standard (Module1)
Function WsExist(Nom$) As Boolean
On Error Resume Next
WsExist = Sheets(Nom).Index
End Function
Utilisation :
Sub test()
If WsExist("Feuil1") Then MsgBox "Feuil1 Existe"
End Sub
A+
Question portant sur VBA : Je ne répond pas si la question ne comporte pas le classeur KIVABIEN avec.
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'315
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 17 janvier 2015, 16:07

bonjour galopin01,
Merci pour ton code.
Il répond en partie à mes attentes, car il ne teste que la présence de la feuille, il ne l'écrase pas (ou ne la supprime pas) si elle éxiste déjà.

Je continue à chercher, ça risque de me prendre un peu de temps, mon niveau en VBA est assez faible, mais je n désespère pas, :P
Avec ces 3 réponses, je devrai aboutir à mon résultat.

A bientôt, encore merci à tous.
Cordialement,
xorsankukai
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 6'554
Appréciations reçues : 174
Inscrit le : 18 septembre 2008
Version d'Excel : 2016
Téléchargements : Mes applications

Message par galopin01 » 17 janvier 2015, 16:48

Bonjour,
Remplace ta macro par celle-ci :
Private Sub CommandButton1_Click()
Dim Mois$, o
Application.ScreenUpdating = False
   With Sheets("Modèle")
      Mois = UCase(Format(.Range("H5"), "mmm"))
      On Error Resume Next
      Set o = Sheets(Mois).Index
      If Not o Is Nothing Then
         Application.DisplayAlerts = False
         Worksheets(Mois).Delete
      End If
      .Copy After:=Sheets(Sheets.Count)
   End With
   With ActiveSheet
      .Name = Mois
      .Shapes("CommandButton1").Delete
   End With
Sheets("Modèle").Activate
MsgBox ("Le mois de " & Mois & "" & " est sauvegardé")
End Sub
PS : Inutile de rajouter la macro donnée précédemment.
A+
Question portant sur VBA : Je ne répond pas si la question ne comporte pas le classeur KIVABIEN avec.
Avatar du membre
ThauThème
Passionné d'Excel
Passionné d'Excel
Messages : 4'047
Appréciations reçues : 212
Inscrit le : 19 octobre 2014
Version d'Excel : 2010 FR

Message par ThauThème » 17 janvier 2015, 17:15

Bonjour le fil, bonjour le forum,

Voilà comment je verrais les choses :
Private Sub CommandButton1_Click()
Dim x As String 'déclare la variable x
Dim O As Worksheet 'déclare la variable O (Onglet)

ActiveCell.Select 'enlève le focus au bouton
x = UCase(Format(Range("H5").Value, "mmmm")) 'définit la variable x
On Error GoTo suite 'gestion des erreurs (en cas d'erreur, va à l'étiquette "suite")
Set O = Sheets(x) 'définit l'onglet O (génère une erreur si cet onglet n'existe pas)
Application.DisplayAlerts = False 'masque les message Exel
If MsgBox("l'onglet " & x & " existe déjà ! Voulez-vous le remplacer ?", vbYesNo, "REMPLACEMENT") = vbYes Then 'condition 1 : si "Oui" au message
    O.Delete 'supprime l'onglet O
    GoTo suite 'va à l étiquette "suite"
Else 'si "Non" au message
   If MsgBox("Voulez vous le supprimer ?", vbYesNo, "SUPPRESSION") = vbYes Then 'condition 2 : si "Oui" au second message
        O.Delete 'supprime l'onglet O
    End If 'fin de la condition 2
    Application.DisplayAlerts = True 'affiche les messages d'Excel
    Exit Sub 'sort de la procédure
End If 'fin de la condition 1
suite: 'étiquette
Application.DisplayAlerts = True 'affiche les messages d'Excel
Sheets("Modèle").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Shapes("CommandButton1").Select
Selection.Delete                                     'Effacer le bouton de sauvegarde
ActiveSheet.Name = x     'ex:JANVIER
Sheets("Modèle").Select                              'on revient au modèle après sauvegarde'
MsgBox ("Le mois de " & x & "" & " est sauvegardé")
End Sub
À plus,

ThauTheme


Je suis Charlie
VBA m'éclate, les formules m'ennuient ! Je n'y peux rien c'est comme ça...
Avatar du membre
xorsankukai
Membre impliqué
Membre impliqué
Messages : 2'315
Appréciations reçues : 263
Inscrit le : 7 octobre 2014
Version d'Excel : 2010 FR

Message par xorsankukai » 17 janvier 2015, 18:06

Bonsoir Galopin01 et ThauThème,
Je vous remercie sincèrement pour votre aide! Vos 2 codes fonctionnent à merveille ! :D
Je clôture donc ce post.

Bonne soirée,
A bientôt sur le forum ;;)

Cordialement,
xorsankukai
xorsankukai

La connaissance, c’est partager le savoir qui nous fait grandir.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message