XL 2016 insertion d'un control sur l'existence des feuilles

christ77000

XLDnaute Occasionnel
Bonsoir à tous je débute en VBA et je n'arrive pas à insérer un contrôle sur l'existence des feuilles dans ce code. Si un utilisateur clic plusieurs fois sur le bouton de création de feuille ca bloque. Merci pour votre aide.

PS c'est mon premier post.

Sub Creation_IT6_par_nom()
Dim DerLig As Long, i As Integer
DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For i = DerLig To 29 Step -1
Sheets("IT6").Copy after:=Feuil2
ActiveSheet.Name = Feuil2.Cells(i, 4)
Next i
Application.ScreenUpdating = True
End Sub
 
Solution
Bonsoir

Avec une fonction en plus
(plus ou moins le même principe que patricktoulon)
VB:
Sub Creation_IT6_par_nom()
Dim DerLig As Long, i As Integer
DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For i = DerLig To 29 Step -1
If Not Existe(Feuil2.Cells(i, 4).Text) Then
Sheets("IT6").Copy after:=Feuil2
ActiveSheet.Name = Feuil2.Cells(i, 4)
End If
Next i
End Sub
Function Existe(sName As String) As Boolean
Existe = Evaluate("ISREF('" & sName & "'!A1)")
End Function

patricktoulon

XLDnaute Barbatruc
Bonsoir
VB:
Sub Creation_IT6_par_nom()
    Dim DerLig As Long, i As Integer
    DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row
    Application.ScreenUpdating = False
    For i = DerLig To 29 Step -1
        If TypeName(Evaluate("='[" & ThisWorkbook.Name & "]" & Feuil2.Cells(i, 4) & "'!A:A")) <> "Range" Then
            Sheets("IT6").Copy after:=Feuil2
            ActiveSheet.Name = Feuil2.Cells(i, 4)
        End If
    Next i
    Application.ScreenUpdating = True
End Sub
 

Staple1600

XLDnaute Barbatruc
Bonsoir

Avec une fonction en plus
(plus ou moins le même principe que patricktoulon)
VB:
Sub Creation_IT6_par_nom()
Dim DerLig As Long, i As Integer
DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
For i = DerLig To 29 Step -1
If Not Existe(Feuil2.Cells(i, 4).Text) Then
Sheets("IT6").Copy after:=Feuil2
ActiveSheet.Name = Feuil2.Cells(i, 4)
End If
Next i
End Sub
Function Existe(sName As String) As Boolean
Existe = Evaluate("ISREF('" & sName & "'!A1)")
End Function
 

patricktoulon

XLDnaute Barbatruc
re
non Staple1600
tu test si A1 de la supposé feuille est isREF C'EST PAS BON
si elle est NA ou même vide etc...

je test le typename =range c'est sans appel soit la range existe et donc la feuille aussi soit elle n'existe pas et donc la feuille non plus
 

Phil69970

XLDnaute Barbatruc
Bonjour Chrst77000, bonjour le forum

Je te propose ceci :
Ce code n'est pas de moi mais je m'en sers pour tester la présence de feuilles.

VB:
Function WsExist(Nom$) As Boolean

On Error Resume Next
    WsExist = Sheets(Nom).Index
    
End Function

Sub Creation_IT6_par_nom()

Dim DerLig As Long, i As Integer
DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row

Application.ScreenUpdating = False

If WsExist("IT6") Then              'Test si la feuille existe
    MsgBox "IT6 existe"             'Le message est optionel
    'Ton code ici si la feuille existe
    For i = DerLig To 29 Step -1
        Sheets("IT6").Copy after:=Feuil2
        ActiveSheet.Name = Feuil2.Cells(i, 4)
    Next i
    
Else
    MsgBox "IT6 n'existe pas"       'Le message est optionel
    'Ton code ici si la feuille n'existe pas
   
End If

Application.ScreenUpdating = True

End Sub

Cordialement
 

christ77000

XLDnaute Occasionnel
Bonjour Chrst77000, bonjour le forum

Je te propose ceci :
Ce code n'est pas de moi mais je m'en sers pour tester la présence de feuilles.

VB:
Function WsExist(Nom$) As Boolean

On Error Resume Next
    WsExist = Sheets(Nom).Index
   
End Function

Sub Creation_IT6_par_nom()

Dim DerLig As Long, i As Integer
DerLig = Feuil2.Range("D" & Rows.Count).End(xlUp).Row

Application.ScreenUpdating = False

If WsExist("IT6") Then              'Test si la feuille existe
    MsgBox "IT6 existe"             'Le message est optionel
    'Ton code ici si la feuille existe
    For i = DerLig To 29 Step -1
        Sheets("IT6").Copy after:=Feuil2
        ActiveSheet.Name = Feuil2.Cells(i, 4)
    Next i
   
Else
    MsgBox "IT6 n'existe pas"       'Le message est optionel
    'Ton code ici si la feuille n'existe pas
  
End If

Application.ScreenUpdating = True

End Sub

Cordialement
Bonsoir merci pour ton aide la feuille IT6 existe obligatoirement car c'est le modèle vierge. Ce sont les copies de cette feuille que je voulais contrôler si elles étaient déjà créées
 

fanch55

XLDnaute Barbatruc
Salut à tous,
Et s'il y a un onglet de type "Chart" ayant le même nom que dans la liste , que se passe t-il ?

pour tester l'existence d'une feuille :
 

Phil69970

XLDnaute Barbatruc
Bonjour Hervé, bonjour le forum

Le code il vient d'ici :


1584999358290.png

Cordialement
 

Discussions similaires

Réponses
7
Affichages
329
Réponses
16
Affichages
1 K

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87