XL 2013 (RESOLU) Fonction tester si onglet existe dans une formule de calcul ?

nunizgb

XLDnaute Junior
Bonjour,

J'ai dans ma formule de calcule besoin de savoir si une feuille existe afin de faire un calcul A et si non un autre calcul B donc voici ce que j'ai mis comme fonction pour FeuilleExiste :
Code:
Function FeuilleExiste(Name) As Boolean
 Dim sht As Worksheet
 For Each sht In Worksheets
  If UCase(sht.Name) = UCase(Name) Then FeuilleExiste = True: Exit Function
 Next
End Function

et dans ma cellule j'ai mis cette formule de calcul :

Code:
=SI(FeuilleExiste(STXT(CELLULE("filename";B1);TROUVE("]";CELLULE("filename";B1))+1;32)-1);SI(JOURSEM(I14;2)=7;SI(MOD="oui";SI((SOMME('2013 (2)'!V533:V536;V7:V14))<LBM;SI(SOMME('2013 (2)'!V533:V536;V7:V14)>(SOMME(LBM;-(SOMME(NB.SI(A7:A14;"CP");NB.SI(A7:A14;"M");NB.SI(A7:A14;"CSS");NB.SI(A7:A14;"JF");NB.SI('2013 (2)'!A533:A536;"CP");NB.SI('2013 (2)'!A533:A536;"M");NB.SI('2013 (2)'!A533:A536;"CSS");NB.SI('2013 (2)'!A533:A536;"JF")))*(LBM/Jours_Ouvrables)));SOMME('2013 (2)'!V533:V536;V7:V14);SOMME(LBM;-(SOMME(NB.SI(A7:A14;"CP");NB.SI(A7:A14;"M");NB.SI(A7:A14;"CSS");NB.SI(A7:A14;"JF");NB.SI('2013 (2)'!A533:A536;"CP");NB.SI('2013 (2)'!A533:A536;"M");NB.SI('2013 (2)'!A533:A536;"CSS");NB.SI('2013 (2)'!A533:A536;"JF")))*(LBM/Jours_Ouvrables)));SOMME('2013 (2)'!V533:V536;V7:V14));SOMME(V7:V14));0);SI(JOURSEM(I14;2)=7;SI(MOD="oui";SI((SOMME(V7:V14))<LBM;SOMME(LBM;-(SOMME(NB.SI(A7:A14;"CP");NB.SI(A7:A14;"MP");NB.SI(A7:A14;"CSS");NB.SI(A7:A14;"JF")))*(LBM/Jours_Ouvrables));SOMME(V7:V14));SOMME(V7:V14))-4;0))

Mais j’obtiens comme résultat ceci #VALEUR

En clair je dois dans ma formule trouver si existe la feuille avant celle qui est active actuellement. Par exemple si je suis sur la feuille 2014 elle doit trouver si la feuille 2013 existe. Si je suis sur la feuille 1999 alors elle doit trouve si la feuille 1998 existe.

Puis je sais que la formule peut être réduire mais je ne sais pas comme avec la formule nb.si.ens ou autre function.

Je vais essaye de mettre un fichier d’exemple mais merci pour votre aide

PS : si je nomme la feuille où se trouve la formule 2012 alors pas d'erreur par contre si je la nomme Model alors oui.
Cette feuille Model sert pour créer de nouveaux onglet par la suite.

PS : J'ai tester la copie et sur la nouvelle feuille la fonction marche par contre comme je puisse dans ma formule mettre cette parte :

SI((SOMME('2013 (2)'!V533:V536;V7:V14) pour avoir toujours la la feuille avant et si pas de feuille alors ne pas affiche erreur si la feuille avant ce n'est pas numérique. En clair si je suis sur la feuille 2013 alors ce devrai être 2012. Si je suis sur la feuille 2014 elle doit trouver 2013 automatiquement. Actuellement je change manuellement ce nombre.
 
Dernière modification par un modérateur:

nunizgb

XLDnaute Junior
Re : Fonction tester si onglet existe dans une formule de calcul ?

Bonjour

sans exemple difficile mais pour tester si feuille existe

= si(esterreur(feuil6!A1; xxxxx; xxxxx)

Merci je vais essaye ceci mais finalement la fonction FeuilleEXiste marche bien c'est dans ma function de calcul avec SI je doit entre manuellement l'info de la feuille et je cherche que cela se fait automatiquement.
 

eriiic

XLDnaute Barbatruc
Re : Fonction tester si onglet existe dans une formule de calcul ?

Bonjour,

tant qu'à faire une fonction pourquoi ne pas faire celle-ci :
En clair je dois dans ma formule trouver si existe la feuille avant celle qui est active actuellement. Par exemple si je suis sur la feuille 2014 elle doit trouver si la feuille 2013 existe. Si je suis sur la feuille 1999 alors elle doit trouve si la feuille 1998 existe.
?
Code:
Function existeAnPrec()    
    Dim nomF
    If Application.ThisCell.Parent.Name <> ActiveSheet.Name Then Exit Function
    nomF = CStr(CLng(Application.ThisCell.Parent.Name - 1))
    existeAnPrec = False
    On Error Resume Next
    existeAnPrec= Sheets(nomF).Index
End Function
Retourne le n° d'index de la feuille ou FAUX.
eric
 

nunizgb

XLDnaute Junior
Re : Fonction tester si onglet existe dans une formule de calcul ?

Bonjour,

tant qu'à faire une fonction pourquoi ne pas faire celle-ci :
?
Code:
Function existeAnPrec()    
    Dim nomF
    If Application.ThisCell.Parent.Name <> ActiveSheet.Name Then Exit Function
    nomF = CStr(CLng(Application.ThisCell.Parent.Name - 1))
    existeAnPrec = False
    On Error Resume Next
    existeAnPrec= Sheets(nomF).Index
End Function
Retourne le n° d'index de la feuille ou FAUX.
eric

Bonjour eriiiic

Merci pour le code par cotre comment je doit l'utiliser ?

En clair car elle n'a pas d'argument or si dans la fonction on peut le nom d'onglet actuelle -1, ce sera idéal. Comme cela si l'onglet est 1985 dans la fonction on aurait 1985-1 et donc si 1984 existe alors la fonction SI() calcul manière A et sinon de la manière B

Si je met ceci dans la fonction :

Code:
=existeAnPrec(2012)
alors j'ai une erreur #valeur

Si je met ceci :
Code:
=existeAnPrec()
et que l'onglet actuel est 2014 la réponse est 9 et non 2013

Mais merci pour ton aide
 
Dernière modification par un modérateur:

ERIC S

XLDnaute Barbatruc
Re : Fonction tester si onglet existe dans une formule de calcul ?

Re

à voir si cela te convient et à adapter

en C2 : =REMPLACER(CELLULE("nomfichier");1;TROUVE("]";CELLULE("nomfichier"));"") te donne le nom de la feuille
en E2 : =SOMME(C6:C10)+SIERREUR(SOMME(INDIRECT( "'" & C2-1 & "'!C6:C10"));0)
 

JCGL

XLDnaute Barbatruc
Re : Fonction tester si onglet existe dans une formule de calcul ?

Bonjour à tous,
Salut aux amis,

Peux-tu essayer en E6 de chaque onglet :
Code:
=SIERREUR(SOMME(INDIRECT(STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)-1
&"!C6:C10"))+SOMME(C6:C10);SOMME(C6:C10))

A+ à tous
 

eriiic

XLDnaute Barbatruc
Re : Fonction tester si onglet existe dans une formule de calcul ?

Merci pour le code par cotre comment je doit l'utiliser ?
Je pensais que tu voulais une fonction feuille.
Dans une cellule mettre =existeAnPrec()
Si =FAUX (ou 0) la feuille n'existe pas

Sinon :
Code:
Sub test()
    Dim nomF
    nomF = "2013"
    If existSheet(CStr(CLng(nomF - 1))) Then
        MsgBox "la feuille " & CStr(CLng(nomF - 1)) & " existe."
    End If
End Sub


Function existSheet(nomFeuille As String) As Long
    On Error Resume Next
    existSheet = Sheets(nomFeuille).Index
End Function
eric
 
Dernière édition:

nunizgb

XLDnaute Junior
Re : Fonction tester si onglet existe dans une formule de calcul ?

Bonjour à tous,
Salut aux amis,

Peux-tu essayer en E6 de chaque onglet :
Code:
=SIERREUR(SOMME(INDIRECT(STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)-1
&"!C6:C10"))+SOMME(C6:C10);SOMME(C6:C10))


A+ à tous

Merci JCGL oui le code marche impeccablement par contre comment je puisse ajouter les conditions faire la somme si ou nb si si dans la colonne A de la feuille active et celle n-1. Je vais essaye de faire un fichier exemple pour faire plus clair.

Exemple compte nb de celulles dans la colonne A qui ont pour texte M,MP puis faire la somme 24-resultat et cela pour la feuille actuelle et celle qui précédé. En clair je nbe sais pas comment mettre cela dans cette partie du code :

Code:
SOMME(INDIRECT(STXT(CELLULE("filename";A1);TROUVE("]";CELLULE("filename";A1))+1;32)-1
&"!C6:C10"))+SOMME(C6:C10)

Merci pour vos aide
 

nunizgb

XLDnaute Junior
Re : Fonction tester si onglet existe dans une formule de calcul ?

Je pensais que tu voulais une fonction feuille.
Dans une cellule mettre =existeAnPrec()
Si =FAUX (ou 0) la feuille n'existe pas

Sinon :
Code:
Sub test()
    Dim nomF
    nomF = "2013"
    If existSheet(CStr(CLng(nomF - 1))) Then
        MsgBox "la feuille " & CStr(CLng(nomF - 1)) & " existe."
    End If
End Sub


Function existSheet(nomFeuille As String) As Long
    On Error Resume Next
    existSheet = Sheets(nomFeuille).Index
End Function
eric

Merci je vais essaye cela mais avec le code donner par JCGL j'arrive presque à la fin
 

ERIC S

XLDnaute Barbatruc
Re : Fonction tester si onglet existe dans une formule de calcul ?

Re

a ta place, pour me simplifier la vie :

je ferais mes calculs pour la feuille, par exemple en colonne H (sur toutes les feuilles)
ensuite, en I je vais chercher les calculs du J de la feuille précédente (si elle existe grâce à SIERREEUR), sinon 0

en J c'est soit H +J

après, si tu veux, tu peux masquer les colonnes qui te chagrinent
 

nunizgb

XLDnaute Junior
Re : Fonction tester si onglet existe dans une formule de calcul ?

Re

a ta place, pour me simplifier la vie :

je ferais mes calculs pour la feuille, par exemple en colonne H (sur toutes les feuilles)
ensuite, en I je vais chercher les calculs du J de la feuille précédente (si elle existe grâce à SIERREEUR), sinon 0

en J c'est soit H +J

après, si tu veux, tu peux masquer les colonnes qui te chagrinent

Merci je vais essayer cela en fait j'ai déjà écrire m'a formule et elle donne le résultat correct mais elle est trop long donc j'essaye de la simplifier mais je vais regarde de ajouter colonne en plus puis de les cacher comme j'ai fait déjà pour d'autres calcul

Merci pour aide
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 273
Membres
103 168
dernier inscrit
isidore33