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 FunctionMerci 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 NomFeuillepareil 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).Namesi 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 ioù 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 ice 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