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".
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
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
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
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é
re
ha!!! et ben celle la je l'ai attendu 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 ?
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
error si le sheets n'existe pas
rien si il existe mais que la cellule est vide
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
re
a oui !!!pardon
la version que l'on choppe partout
c'est Evaluate(nom & "!A1")
mille excuse
je planche sur la colle que m'a posé mapomme et elle est coton sans gestion d'erreur"on error ..."
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