Savoir si une feuille existe

Bonjour à tous, j'ai réaliser une application qui permet à partir d'un seul fichier de traiter plusieurs fichiers dans un même dossier. Cependant lorsque que j'ouvre un fichier je voudrai savoir si il y a une feuille qui a le nom de la phase. Si oui je lui applique mes macros sinon je passe à un autre fichier.

Voila ma prog:

Sub ACTIVATION_MACRO()

Dim Montab As Variant

Dim I As Variant

Chemin = "C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\" 'Avec \ à la fin

Fichier = Dir("C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\*.xlsx*")

I = -1

Do While Fichier <> "" 'boucle permettant de savoir le nombre de fichiers PROJET

I = I + 1

Fichier = Dir

Loop

ReDim Montab(I) ' Dimensionnement du tableau

Fichier = Dir("C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\*.xlsx*") 'Etant donné que j'ai déja une fonction Dir dans mon programme

' je dois mettre les valeurs dans un tabeau

I = 0

Do While Fichier <> ""

Montab(I) = Fichier

Fichier = Dir

I = I + 1

Loop

For I = 0 To UBound(Montab)

MOIS = ""

ANNEE = ""

PHASE = ActiveSheet.Cells(3, 4)

MOIS = ActiveSheet.Cells(4, 4)

ANNEE = ActiveSheet.Cells(5, 4)

RECHERCHE_MOIS

RECHERCHE_ANNEE

Fichier = Montab(I)

' MsgBox Fichier

Workbooks.Open Filename:="C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\" + Fichier, UpdateLinks:=0

' C 'est ici que j'aimerai savoir si il y a une feuille PHASE qui existe

PROJET = numero_projet

EXTRACTION_SAP

EXTRACTION_CONTRAT

EXTRACTION_PREVISIONNEL

ActiveWindow.Close True

Next I

MsgBox ("Mise à jour réussie pour la phase " + PHASE + " en " + MOIS + " " + ANNEE)

End Sub

Salut,

voici la ligne de code à insérer dans ton programme

If ShTest("PHASE") = True Then MsgBox "La feuille PHASE existe." Else MsgBox "La feuille PHASE n'existe pas."

et voici la fonction à coller à la suite de ton programme :

Function ShTest(aa As String) As Boolean
On Error Resume Next
ShTest = Sheets(aa).Name <> ""
On Error GoTo 0
End Function

Merci tu es un chef!! ça marche impécable!!

j'ai encore une petite question sur le traitement des feuilles. Donc dans un fichier j'ai 6 feuilles:

- la premiére se nomme PR001

- la deuxiéme "PR001-Graph_Budget"

- la troisiéme "PR001-Graph_MO"

- la 4 éme "IN001"

- la 5éme "IN001- Graph_Budget"

- la 6éme "IN001-Graph_MO"

je voudrais savoir s'il est possible de récupérer tout d'abord le nom de la prémiére feuille pour l'affecter à la variable PHASE= PR001 et ainsi lui affecter mes extractions puis récupérer le nom de la feuille 4 "IN001" pour faire aussi les extractions avec la variable PHASE= IN001???


voici mon code:

Sub ACTIVATION_MACRO()

Dim Montab As Variant

Dim I As Variant

Chemin = "C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\" 'Avec \ à la fin

Fichier = Dir("C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\*.xlsx*")

I = -1

Do While Fichier <> "" 'boucle permettant de savoir le nombre de fichiers PROJET

I = I + 1

Fichier = Dir

Loop

ReDim Montab(I) ' Dimensionnement du tableau

Fichier = Dir("C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\*.xlsx*") 'Etant donné que j'ai déja une fonction Dir dans mon programme

' je dois mettre les valeurs dans un tabeau

I = 0

Do While Fichier <> ""

Montab(I) = Fichier

Fichier = Dir

I = I + 1

Loop

For I = 0 To UBound(Montab)

MOIS = ""

ANNEE = ""

MOIS = ActiveSheet.Cells(4, 4)

ANNEE = ActiveSheet.Cells(5, 4)

RECHERCHE_MOIS

RECHERCHE_ANNEE

Fichier = Montab(I)

' MsgBox Fichier

Workbooks.Open Filename:="C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\" + Fichier, UpdateLinks:=0

PHASE = ActiveSheet.Cells(3, 4) ' j'aimerai réussir à récupérer les noms des feuilles en 5 caractéres

If ShTest(PHASE) = True Then

' ' MsgBox "La feuille PHASE existe."

Sheets(PHASE).Select

PROJET = numero_projet

EXTRACTION_SAP

EXTRACTION_CONTRAT

EXTRACTION_PREVISIONNEL

Else: ' MsgBox "La feuille PHASE n'existe pas."

ActiveWindow.Close True

End If

Next I

MsgBox ("Mise à jour réussie pour la phase " + PHASE + " en " + MOIS + " " + ANNEE)

End Sub

Antoine53100 a écrit :

je voudrais savoir s'il est possible de récupérer tout d'abord le nom de la prémiére feuille pour l'affecter à la variable PHASE= PR001 et ainsi lui affecter mes extractions puis récupérer le nom de la feuille 4 "IN001" pour faire aussi les extractions avec la variable PHASE= IN001???

Tu utilises PHASE comme nom de variable et comme nom de feuille dans le même programme ?

je te suggère de ne pas utiliser 2 fois le même mot pour éviter toute confusion dans la lecture du code... pour le codeur et peut être aussi pour le programme.

pour récupérer le nom de la feuille PR001:

dim NomFeuille as String
NomFeuille = Sheets("PR001").Name
MsgBox NomFeuille

pareil pour IN001

En faite j'ai plusieurs fichiers:

- 3 fichiers sources où je vais extraire des données pour les mettre dans le fichier projet concerné

- des fichiers projets: fichier que je créé à l'aide d'un fichier modéle que je renomme par le nom du projet (ex: XXX_suivi_BE.xlsx). Puis je renomme les feuilles par leurs phases (ex: IN001, PR001,PR002,IN002).

- 1 fichier mise à jour ou je met le programme. Ce fichier me permet d'aller chercher et d'ouvrir un par un tous les fichiers projets et de leur affecter toutes mes extractions. Pour fonctionner, le programme a besoin qu'on lui indique la valeur de la variable PHASE et de la variable PROJET. La valeur de la variable PROJET est le début de la chaine de caractères du nom de mon fichier projet que mon programme ouvre (ça marche avec la fonction LEFT). Ce que je veux c'est lorsqu'il ouvre le fichier projet, que la variable PHASE prenne le nom de la feuille1(PR001); toutes mes extractions se font avec cette valeur là et une fois fini je voudrai que la variable PHASE prenne la valeur de la feuille3 (IN001);

Ensuite faire ça pour chaque fichier projet

je sais pas si je suis clair..???

si tu veux enregistrer le nom de la première feuille de ton classeur dans la variable myVar

myVar = Sheets(1).Name

si tu veux créer une boucle pour toutes les feuilles de ton classeur

For i = 1 To Sheets.Count
myVar = Sheets(i).Name
'le reste de ton code
next i

où Sheets.Count représente le nombre total de feuilles dans ton classeur

merci bcp pr ton aide cependant chaque feuille "PHASE" est succédé de deux feuilles de graph et il peut y avoir 2,3,ou 4 phases par fichier projet.

donc tu penses que le mieux serait de faire une boucle pour compter le nombre de feuilles. Ensuite prendre le nom de la feuille 1 , de la feuille 4 puis une feuille sur trois. Penses tu que je puisse recupérer le nom des feuilles ayant 5 caractères???

dans mon prog, j'ai :

Workbooks.Open Filename:="C:\Users\9589573\Documents\Projet SUIVI DES COUTS\fichiers_PROJETS\" + Fichier, UpdateLinks:=0 'ouverture du fichier projet en cours

For i = 1 To Sheets.Count

myVar = Sheets(i).Name

if myvar= 5carctéres then PHASE=myvar ' je sais pas le programmer

'le reste de mon code

else

End If

next i

s'il y a des feuilles que tu ne souhaites pas prendre en compte dan ta boucle, alors tu peux le faire de la façon suivante :

For i = 1 to Sheets.Count
if Sheets(i).Name= "PR001" or Sheets(i).Name = "IN001" etc... then
'reste du code
end if
next i

ce code sélectionne les feuilles qui devront être traitées et ignorera les autres

oui oui mais il peut y avoir des nouvelles phases de créer et elles ne seront pas dans le programme mais je sais qu'elle seront créer comme les autres en 5caractères...Pas possible de récupérer le nom de la feuille suivant le nombre de caractère??

cependant je te remercie beaucoup pour le tps que tu passe à m'aider

Tu peux, peut être considérer le cas inverse, lancer le code si le nom de tes feuilles est différent de ceux listés

For i = 1 to Sheets.Count
if Sheets(i).Name<> "Graph1" or Sheets(i).Name <> "Graph2" etc... then
'reste du code
end if
next i
Rechercher des sujets similaires à "savoir feuille existe"