OVH Cloud OVH Cloud

comment connaître le nom d'un onglet?

38 réponses
Avatar
lematou
bonsoir à tous

existe t il un moyen de tester la présence d'un onglet dans un fichier . XLS

merci beaucoup et bonne soirée

Jacks

10 réponses

1 2 3 4
Avatar
Jacky
Bonsoir Pierre.

Je m'incline et me rallie volontiers à ces explications.
Merci.

--
Salutations
JJ

"Pierre Fauconnier" a écrit dans le
message de news:
Salut Jean-Luc...

Tu vas peut-être me trouver chiant, mais tant pis...

Le problème de ta solution, c'est que :
1) Elle sélectionne la feuille Feuil1 pour tester son existence, ce qui
n'est pas très pratique, et peut amener à des confusions dans un code
utilisant des objets de la feuille active.
2) Il n'y a pas que l'inexistence de la feuille qui peut produire une
erreur en cas de .Select. .Select produira également une erreur si la
feuille est masquée, par exemple...

Crois-moi, l'utilisation d'une fonction, comme dans ma réponse au courrier
initial, est la plus simple et la plus sûre des manières de tester une
feuille dans le cadre d'une programmation propre...

Cet avis n'engage que moi, évidemment!

Bonne programmation


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"JLuc" a écrit dans le message de news:

lematou avait soumis l'idée :
bonsoir à tous

existe t il un moyen de tester la présence d'un onglet dans un fichier .
XLS

merci beaucoup et bonne soirée

Jacks


Et çà, sans fonction :

Err = 0 'Pour le cas où il y a eu une erreur avant
On Error Resume Next
Sheet("Feuil1").Select
If Err > 0 Then
Msgbox "La feuille n'existe pas
Else
Msgbox "Déjà présente..."
End If

--
JLuc









Avatar
AV
M'est avis qu'il n'est pas nécessaire (utile) de boucler sur toutes les feuilles
:
Exemples (non limitatifs) :

Function existF(nomF) As Boolean
On Error Resume Next
x = Range(nomF & "!A1")
existF = Err.Number = 0
End Function

Function existF2(nomF) As Boolean
existF2 = Evaluate("iserror(" & nomF & "!A1)")
End Function

AV
Avatar
Pierre Fauconnier
Salut AV,

Je suis chiant....

Si le nom de la feuille comporte un espace, tu auras une erreur alors que la
feuille existe...

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur, et que je trouve plus propre d'utiliser ma
fonction...(Suis-je chiant???). De plus, tu as certainement déjà testé la
multitude de cas où une erreur 1004 est renvoyée. Difficile dès lors de
détecter la cause réelle de l'erreur.


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci

"AV" a écrit dans le message de news:
%
M'est avis qu'il n'est pas nécessaire (utile) de boucler sur toutes les
feuilles :
Exemples (non limitatifs) :

Function existF(nomF) As Boolean
On Error Resume Next
x = Range(nomF & "!A1")
existF = Err.Number = 0
End Function

Function existF2(nomF) As Boolean
existF2 = Evaluate("iserror(" & nomF & "!A1)")
End Function

AV



Avatar
AV
Si le nom de la feuille comporte un espace,


** C'est une très mauvaise habitude ! ;-)

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")


** C'est une bonne correction !

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?

et que je trouve plus propre d'utiliser ma fonction...


** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant de
tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

AV

Avatar
Pierre Fauconnier
Je persiste et signe...

** C'est une très mauvaise habitude !
Personnellement, je ne vois pas pourquoi. De plus, je ne suis pas derrière

les utilisateurs de mes classeurs et s'ils renomment un onglet avec un
espace, je ne peux pas leur interdire...

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?
Justement pour éviter de mal interpréter une erreur et d'en tirer une

conclusion erronée, comme dans ta fonction non corrigée...

** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

Oui, mais en fait, tu fais la même chose, sauf que c'est Excel qui le fait

pour toi dans son code compilé. Pour détecter qu'il y a une erreur, il doit,
d'une façon ou d'une autre, passer en revue sa collection de feuilles pour
s'apercevoir que la feuille n'existe pas et renvoyer une erreur.

Moi, mais c'est un avis tout à fait personnel, je préfère ma solution.

Chacun la sienne, et les lecteurs de nos messages trancheront... pour eux!

Bonne soirée


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"AV" a écrit dans le message de news:

Si le nom de la feuille comporte un espace,


** C'est une très mauvaise habitude ! ;-)

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")


** C'est une bonne correction !

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?

et que je trouve plus propre d'utiliser ma fonction...


** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

AV







Avatar
Pierre Fauconnier
De plus, si tu as une feuille graphique qui contient le nom que tu testes,
tu auras aussi une erreur alors que la feuille existe.

Avec ceci
Function FeuilleExiste(Nomfeuille As String) As Boolean
Dim Feuille As Object

For Each Feuille In Sheets
If UCase(Feuille.Name) = UCase(Nomfeuille) Then
FeuilleExiste = True
Set Feuille = Nothing
Exit Function
End If
Next
End Function

ma fonction est générique, me semble-t-'il...


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"AV" a écrit dans le message de news:

Si le nom de la feuille comporte un espace,


** C'est une très mauvaise habitude ! ;-)

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")


** C'est une bonne correction !

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?

et que je trouve plus propre d'utiliser ma fonction...


** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

AV







Avatar
Jacky
Bonsoir a vous deux

Aller j'ose.....

Pour vous départager, utilisé mon code.......
;-)))))
Très très basic , dans les deux sens du terme, mais fonctionne et sans
"Resume" et je crois sans erreur.

bon, bon , je rentre chez moi ;o)
--
Salutations
JJ

"Pierre Fauconnier" a écrit dans le
message de news:
Je persiste et signe...

** C'est une très mauvaise habitude !
Personnellement, je ne vois pas pourquoi. De plus, je ne suis pas derrière

les utilisateurs de mes classeurs et s'ils renomment un onglet avec un
espace, je ne peux pas leur interdire...

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?
Justement pour éviter de mal interpréter une erreur et d'en tirer une

conclusion erronée, comme dans ta fonction non corrigée...

** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

Oui, mais en fait, tu fais la même chose, sauf que c'est Excel qui le fait

pour toi dans son code compilé. Pour détecter qu'il y a une erreur, il
doit, d'une façon ou d'une autre, passer en revue sa collection de
feuilles pour s'apercevoir que la feuille n'existe pas et renvoyer une
erreur.

Moi, mais c'est un avis tout à fait personnel, je préfère ma solution.

Chacun la sienne, et les lecteurs de nos messages trancheront... pour eux!

Bonne soirée


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"AV" a écrit dans le message de news:

Si le nom de la feuille comporte un espace,


** C'est une très mauvaise habitude ! ;-)

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")


** C'est une bonne correction !

C'est pourquoi j'évite de tester des erreurs car il faut alors tester le
numéro de l'erreur,


** Pourquoi donc ?

et que je trouve plus propre d'utiliser ma fonction...


** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

AV











Avatar
dm
Pour une question de propreté, moi j'obterais pour :
;-))

'-------------------------
Function FeuilExist(Wk as workbook, Nom As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Wk.Worksheets(Nom)
If Err = 0 Then FeuilExist = True
End Function
'-------------------------
Sub test()
MsgBox FeuilExist("toto toto")
End Sub
'-------------------------

ET POUR PLUS DE PRÉCISIONS :
'-------------------------
Sub test()
MsgBox FeuilExist(ThisWorkbook, "toto toto")
End Sub
'-------------------------
Function FeuilExist(Wk As Workbook, Nom As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Wk.Worksheets(Nom)
If Err = 0 Then FeuilExist = True
End Function
'-------------------------








"lematou" a écrit dans le message de news:

bonsoir à tous

existe t il un moyen de tester la présence d'un onglet dans un fichier . XLS

merci beaucoup et bonne soirée

Jacks
Avatar
dm
Problème de copier coller, la première fonction
pourrait se lire comme suit, Évidemment, un problème
est soulevé si plus d'un classeur est ouvert et que le
nom de la feuille testée est présente dans au moins
un classeur... il faudrait alors préciser le classeur ....!

'-------------------------
Sub test()
MsgBox FeuilExist("toto toto")
End Sub
'-------------------------

'-------------------------
Function FeuilExist(Nom As String) As Boolean
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Worksheets(Nom)
If Err = 0 Then FeuilExist = True
End Function
Avatar
Pierre Fauconnier
Salut

Joute intéressante, en tout cas pour moi

Je rappelle que dans ton cas, tu testes une feuille en la sélectionnant, ce
qui peut être gênant pour la suite du code

Imaginons un cas, d'école donc tordu...

Tu veux copier A1 de la feuille active dans la cellule B2 d'une feuille
Feuil3
Range("a1").copy destination:=worksheets("feuil3").range("b2")

Maintenant, tu veux le faire uniquement si la feuille Feuil2 existe. Avec
ton code, tu copieras A1 de Feuil2 !!! Et pour éviter cela, tu devras
retenir, dans une variable, le nom de la feuille active pour pouvoir la
réactiver après ton test... :-(((((

Si AV considère que boucler sur toutes les feuilles n'est pas propre, je
suppose qu'il sera d'accord pour dire que ton code, question propreté...
:-))

Bonne soirée


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin ( proverbe
zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci



"Jacky" a écrit dans le message de news:

Bonsoir a vous deux

Aller j'ose.....

Pour vous départager, utilisé mon code.......
;-)))))
Très très basic , dans les deux sens du terme, mais fonctionne et sans
"Resume" et je crois sans erreur.

bon, bon , je rentre chez moi ;o)
--
Salutations
JJ

"Pierre Fauconnier" a écrit dans le
message de news:
Je persiste et signe...

** C'est une très mauvaise habitude !
Personnellement, je ne vois pas pourquoi. De plus, je ne suis pas

derrière les utilisateurs de mes classeurs et s'ils renomment un onglet
avec un espace, je ne peux pas leur interdire...

C'est pourquoi j'évite de tester des erreurs car il faut alors tester
le numéro de l'erreur,


** Pourquoi donc ?
Justement pour éviter de mal interpréter une erreur et d'en tirer une

conclusion erronée, comme dans ta fonction non corrigée...

** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

Oui, mais en fait, tu fais la même chose, sauf que c'est Excel qui le

fait pour toi dans son code compilé. Pour détecter qu'il y a une erreur,
il doit, d'une façon ou d'une autre, passer en revue sa collection de
feuilles pour s'apercevoir que la feuille n'existe pas et renvoyer une
erreur.

Moi, mais c'est un avis tout à fait personnel, je préfère ma solution.

Chacun la sienne, et les lecteurs de nos messages trancheront... pour
eux!

Bonne soirée


--
Pierre Fauconnier () (Skype:
pierre_fauconnier)
"Le bonheur n'est pas au bout du chemin. Le bonheur EST le chemin (
proverbe zen )
Remplacez nospam.nospam par pfi.be pour répondre. Merci


"AV" a écrit dans le message de news:

Si le nom de la feuille comporte un espace,


** C'est une très mauvaise habitude ! ;-)

il faudrait alors écrire
x = Range("'" & nomF & "'!A1")


** C'est une bonne correction !

C'est pourquoi j'évite de tester des erreurs car il faut alors tester
le numéro de l'erreur,


** Pourquoi donc ?

et que je trouve plus propre d'utiliser ma fonction...


** Ben s'il y a un grand nombre de feuilles, en bouclant, tu fais autant
de tests logiques qu'il y a de feuilles, donc....
Vous avez dit "propreté" ? ;-)

AV















1 2 3 4