tester l'existence d'une feuille

Blafi

XLDnaute Occasionnel
bonjour le forum et à tous...,

Quelqu'un peut-il me dire comment faire pour tester en vba l'existence d'une feuille dans un classeur :

Je remplis en effet grâce à une macro vba, un classeur en copiant des feuilles depuis un autre classeur.
Tout va bien si une feuille ne portant pas le même nom n'existe pas dans le classeur de destination.
Par contre si une feuille portant le même nom existe, ma macro se plante et j'obtiens une erreur...

Je voudrais faire un truc du genre :
si feuille('Dupont')existe dans classeur2 alors
feuille('dupont') que je veux y copier doit s'appeler feuille('Dupont2')....

Suis-je assez clair ??

Merci de vos solutions et à bientôt.
 
T

Temjeh

Guest
Bonjour

Voici un test (en attendant plus d'info ou au moin ton code au complet) si elle existe la sélectionne sinon la crée

Sub NouvelleFeuille()

Dim Nom_Fichier
Debut:
Nom_Fichier = Application.InputBox(prompt:='*Quelle annéée?*')
If Nom_Fichier = 'Faux' Then Exit Sub
If Nom_Fichier = '' Then
MsgBox 'Entrer un nom'
GoTo Debut
Else
For Each ws In Worksheets
If ws.Name = Nom_Fichier Then
Sheets(Nom_Fichier).Select
Range('A1').Select
GoTo Fin
End If
Next
Sheets('Model').Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Nom_Fichier
Range('A1').Select
End If
Fin:

End Sub

Temjeh
 
B

blafi

Guest
Merci Temjeh pour cette réponse rapide... Voici un extrait de mon code, à l'endroit qui me préoccupe.

La feuille 'relevé d'examen' est déja remplie dans le classeur d'origine par les coordonnées de l'élève et ses notes. Je la copie dans le nouveau classeur (relevés.xls) et je change son nom en lui donnant le nom de la variable Vnom, déja utilisée précédemment dans le code et qui contient le nom de l'éléve.
Malheureusement, si j'ai 2 élèves qui ont le même nom, ma macro refuse de créer une nouvelle feuille Vnom... et c'est là que ça coince... et que j'aurais besoin de l'appeler Vnom & '2' par exemple...

'exporte la feuille dans le classeur relevés et change son nom Sheets('Relevé Examen').Select
Sheets('Relevé Examen').Copy_ Before:=Workbooks('Relevés.xls').Sheets('FIN')
Sheets('Relevé Examen').Select

..... là je veux tester l'existence de la feuille(Vnom)et si elle n'existe pas :

Sheets('Relevé Examen').Name = Vnom

'sinon si elle existe, je veux l'appeler Vnom2

Comment tester si lele existe ??

Merci d'avance
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Blafi, Temjeh,

La fonction personnalisée ci-dessous devrait pouvoir te dépanner :

Sub Traitement()
      '...
      '...
        Sheets('Relevé Examen').Copy Before:=Workbooks('Relevés.xls').Sheets('FIN')
        ActiveSheet.Name = DetermineNomFeuille('Relevés.xls', vNom)
        '...
End Sub

Function DetermineNomFeuille(Classeur As String, NomFeuille As String) As String
'myDearFriend! 22/03/06
Dim F As Worksheet
Dim Test As String
Dim N As Integer
      N = 1
      Test = NomFeuille
      Do
            On Error Resume Next
            Set F = Workbooks(Classeur).Sheets(Test)
            On Error GoTo 0
            If Not F Is Nothing Then
                  N = N + 1
                  Test = NomFeuille & ' (' & CStr(N) & ')'
            Else
                  DetermineNomFeuille = Test
                  Exit Do
            End If
            Set F = Nothing
      Loop
End Function
Cordialement,

Message édité par: myDearFriend!, à: 22/03/2006 21:38
 
B

blafi

Guest
Merci MydearFriend pour ta réponse et ta formule qui devrait résoudre mon problème.
Je vais la tester car elle est certainement meilleure que la solution que j'avais trouvé et qui consistait à tester les noms de chaque feuille dans le nouveau classeur... Ca donnait ça :
.../...

For Each sh In Sheets
If sh.Name = Vnom Then
sh.Name = Vnom & '1'
Sheets('Relevé Examen').Name = Vnom & '2'
ElseIf sh.Name = 'Relevé Examen' Then
sh.Name = Vnom
End If
Next sh

..../....

Ma solution marche bien et consiste à tester pour chaque feuille du classeur si le nom de la feuille est celui de la variable en cours (Dupont par ex) puis à ruser en appelant cette feuille 'Dupont1' et donner à la feuille (Relevé Examen)que je viens d'introduire le nom de 'Dupont2'.
Si la feuille testée n'est pas 'Dupont', alors j'appelle 'relevé' du nom voulu...

A plus et encore merci...
 

Discussions similaires

Réponses
24
Affichages
417

Statistiques des forums

Discussions
312 207
Messages
2 086 246
Membres
103 163
dernier inscrit
Pelaez