XL 2016 Vérifier si une feuille existe sinon la créer..

Pamela_Supermoto

XLDnaute Nouveau
Bonjour à tous,
J'ai besoin d'un petit coup de main svp sur:
Dans mon classeur, j'ai ma première feuille 'CANEVAS'.
A l'aide d'un bouton, j'ouvre un user form qui me demande un numéro de commande et si une feuille existe, il me l'ouvre sinon il la crée en copiant la feuille1 "CANAVAS".

Quel code me conseillez-vous?

merci beaucoup...
 

patricktoulon

XLDnaute Barbatruc
bonjour Pamela_Supermoto

une petite fonction perso a ma façon

elle tient en une seule ligne et te permet de savoir si le sheets existe ou pas
VB:
Function SheetsExist(nom): SheetsExist = TypeName(Evaluate(nom & "!A:B")) = "Range": End Function

et on l'utilise comme dans l'exemple qui suit
on teste le sheets toto :si il existe pas canevas est copié en dernier et la copie est renommée "toto"
si il existe il est tout simplement activé
Code:
Sub test()
    If Not SheetsExist("toto") Then
        Sheets("canevas").Copy After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "toto"
    Else
        Sheets("toto").Activate
    End If
End Sub
;)
 
Dernière édition:

Pamela_Supermoto

XLDnaute Nouveau
bonjour Pamela_Supermoto

une petite fonction perso a ma façon

elle tient en une seule ligne et te permet de savoir si le sheets existe ou pas
VB:
Function SheetsExist(nom): SheetsExist = TypeName(Evaluate(nom & "!A:B")) = "Range": End Function

et on l'utilise comme dans l'exemple qui suit
on teste le sheets toto :si il existe pas canevas est copié en dernier et la copie est renommée "toto"
si il existe il est tout simplement activé
Code:
Sub test()
    If Not SheetsExist("toto") Then
        Sheets("canevas").Copy After:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "toto"
    Else
        Sheets("toto").Activate
    End If
End Sub
;)


Merci pour la réponse,
je dois être blonde!!

Ca plante et ne comprends pas pourquoi:-(
Je joins le fichier met n'y passe pas trop de temps!!
a+
 

Pièces jointes

  • 801802.xlsm
    23.6 KB · Affichages: 6

youky(BJ)

XLDnaute Barbatruc
Bonjour tous,
Un truc que j'utilise aussi.
Bruno
VB:
Private Sub btnValider_Click()
On Error Resume Next ' on gère les erreurs
Sheets(Me.tbxOf.Text).Activate 'on tente d'activer
If Err > 0 Then Sheets("CANEVAS").Copy After:=Sheets(1): ActiveSheet.Name = Me.tbxOf.Text: _
 MsgBox "Le nouveau rapport à bien été créé": Me.tbxOf = ""
'on ferme
    Unload Me
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
tu m’étonne que ça fonctionne pas: tu met une fonction dans une sub toi ??

Private Sub btnValider_Click()

Function SheetsExist(tbxOf): SheetsExist = TypeName(Evaluate(tbxOf & "!A:B")) = "Range": End Function

'Pour créer une nouvelle feuille issu d'un modèle
Sheets("CANEVAS").Select
Sheets("CANEVAS").Copy After:=Sheets(1)
Sheets("CANEVAS (2)").Select
ActiveSheet.Name = Me.tbxOf

'On affiche un message à l'utilisateur que le nouveau rapport à bien été ajoutée
MsgBox "Le nouveau rapport à bien été créé"

'On vide le formulaire pour un prochain calcul
Me.tbxOf = ""

'On ferme automatiquement le Userform
Unload Me

End Sub


si tu avais fait les choses comme je te les ai donné ça aurait fonctionné

youki bonjour oui aussi :
perso j'aime pas le masquage des erreurs mais bon c'est fonctionnel
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @patricktoulon :) et bonne fin de semaine,

elle tient en une seule ligne et te permet de savoir si le sheets existe ou pas
VB:
VB:
Function SheetsExist(nom): SheetsExist = TypeName(Evaluate(nom & "!A:B")) = "Range": End Function

Très très belle instruction.

elle tient en une seule ligne et te permet de savoir si le sheets existe ou pas
Ne faut-il pas remplacer sheet par worksheet pour être tout à fait juste ? ;)
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour mapomme
oui c'est exact

cela dit si j'injectais le nom d'un sheets chart par exemple je déclencherais une erreur donc evaluate me renverrait false
c'est un défaut au quel ne n'ai pas pensé c'est vrai
je vais plancher sur cette question
merci de me l'avoir signalé
 

patricktoulon

XLDnaute Barbatruc
re
ha!!! et ben celle la je l'ai attendu :D:D:D
cette version tu la trouve partout d'ailleurs je l'ai longtemps utilisé jusqu' au jour ou quelqu'un m'a dit tout simplement

et si la cellule est vide ? o_O

c'est pour cela que j’évalue non pas la valeur d'une cellule mais le typename d'une plage de cellule(s)

evaluate renvoie "error" si le sheets n'existe pas donc ="Range" renvoie false


tandis que l'evaluation d'une cellule renverra
  1. error si le sheets n'existe pas
  2. rien si il existe mais que la cellule est vide
  3. la donnée de la cellule si il existe et que la cellule est remplie



je l'attend depuis hier celle la ;););) et j'ai du mal a croire qu'elle vienne de toi Job75

teste
nom="toto"
msgbox evaluate(nom &"!A1)

avec un sheets toto qui existe , quand il n'existe pas , avec la A1 remplie , avec la A1 vide
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Bonjour à tous

Tout d'abord, je m'excuse pour ce qui va suivre ;)
VB:
Function L_existence_précède_l_essence(OCB As String, Optional Dixit As String = "J-P Sartre") As Boolean
L_existence_précède_l_essence = Not WorksheetFunction.IsErr(Evaluate("'" & OCB & "'!A1"))
End Function
Sub test1()
If L_existence_précède_l_essence("Staple1600") Then
MsgBox "J'existe", 1600 + 1047024
Else
MsgBox "Je ne suis pas une feuille, mais je les aime bien (;-))", 1046992 + 1600
End
End If
End Sub
Sub test2()
If L_existence_précède_l_essence("Feuil1") Then
MsgBox "J'existe", 1600 + 1047024
Else
MsgBox "Je ne suis pas une feuille, mais je les aime bien ;-)", 1046992 + 1600
End
End If
End Sub
Mais bon, le week-end est prolongé, alors je m'amuse dans mon VBE ;)

EDITION: Bonjour job75
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
oui c'est exact
mais mon plus gros problème c'est les 3 possibilités
  1. le sheets est de type xlchart l'evaluation renverra "error" mais existe quand même (sheetexist doit etre a true )
  2. l'evaluation donne range l'evaluation renverra "Range"donc existe (sheetexist doit etre a true )
  3. le sheet n'existe pas l'evaluation renverra "error"donc false

sans se passer de on error et sans faire une fonction de 3 kilometre je vois pas comment
 

Discussions similaires

Réponses
4
Affichages
513

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo