Empecher l'envoie d'une erreur si l'onglet existe déjà
Résolu
Giant
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je cherche à mettre en place un système ou plutôt une sécurité qui m'évite d'avoir une erreur quand je demande à Excel de mettre à jour les valeurs de mes onglets.
Par exemple une macro qui parcourait mon classeur et si elle trouve un onglet qui existe déjà elle ne le recrée pas ( car du coup erreur), et passe à la suite.
Merci d'avance.
Je cherche à mettre en place un système ou plutôt une sécurité qui m'évite d'avoir une erreur quand je demande à Excel de mettre à jour les valeurs de mes onglets.
Par exemple une macro qui parcourait mon classeur et si elle trouve un onglet qui existe déjà elle ne le recrée pas ( car du coup erreur), et passe à la suite.
Sub Macro1()
'--------------------
On Error Resume Next
If IsError(Sheets("P1").Name) Then
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = "P1"
.Activate
Range("A1").Select
End With
End If
On Error GoTo 0
'------------'suite du code
End Sub
Merci d'avance.
Configuration: Windows / Edge 18.17763
A voir également:
- Empecher l'envoie d'une erreur si l'onglet existe déjà
- Rouvrir onglet fermé chrome - Guide
- Instagram une erreur s'est produite ✓ - Forum Instagram
- Onglet disposition excel ✓ - Forum Word
- Une erreur s'est produite instagram ✓ - Forum Instagram
- Excel : l'onglet Création (Outils de tableau) n'apparaît pas ! ✓ - Forum Excel
10 réponses
Bonjour
il te suffit d'appeler la fonction FeuilleExiste depuis la boucle ou tu crées tes feuilles.
Si elle n'existe pas tu crées, si elle existe tu ne fais rien.
Un truc du genre
il te suffit d'appeler la fonction FeuilleExiste depuis la boucle ou tu crées tes feuilles.
Si elle n'existe pas tu crées, si elle existe tu ne fais rien.
Un truc du genre
If FeuilleExiste("Nom de la feuille") = False Then
'code de création
End if
Bonjour,
Déjà, pour éviter de faire des boucles... il existe une fonction un peu plus "optimisée"
Ensuite, pour répondre à ta question de " l'appliquer sur tout le classeur" ... et bien... il suffit d'y faire appel avant de faire l'ajout de ta feuille
Déjà, pour éviter de faire des boucles... il existe une fonction un peu plus "optimisée"
Function FeuilleExiste(NomF As String) As Boolean ' test si la feuille existe On Error Resume Next FeuilleExiste = Not Sheets(NomF) Is Nothing End Function
Ensuite, pour répondre à ta question de " l'appliquer sur tout le classeur" ... et bien... il suffit d'y faire appel avant de faire l'ajout de ta feuille
if FeuilleExiste("P1") = False Then
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = "P1"
.Activate
End With
End if
Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer
Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)
Do While monFichier <> ""
'Ici je crée un onglet pour chaque nom de fichier dans mon dossier
onglet = Split(Split(monFichier, "-")(2), "_")(0)
if FeuilleExiste(onglet) = False Then
wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
end if
monFichier = Dir
Loop
End Sub
Avec la fonction FeuilleExiste de Jordane, que je salue au passage.
Je suis tombé sur ce code en creusant un peu, l'idée serait de l'appliquer pas pour une seule page, mais pour tout un classeur.
Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )
On Error GoTo SiErreur
Dim Feuille As Worksheet
FeuilleExiste = False
For Each Feuille In Worksheets
If UCase(Feuille.Name) = UCase(FeuilleAVerifier) Then
FeuilleExiste = True
Exit Function
End If
Next Feuille
Exit Function
SiErreur:
FeuilleExiste = CVErr(xlErrNA)
End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Merci pour ta réponse. Est ce qu'il est possible de l'activer sur le classeur entier et non une feuille précise ?
Merci d'avance
Merci pour ta réponse. Est ce qu'il est possible de l'activer sur le classeur entier et non une feuille précise ?
Merci d'avance
Voici mon code initial. Merci beaucoup.
Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer
Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)
Do While monFichier <> ""
'Ici je crée un onglet pour chaque nom de fichier dans mon dossier
onglet = Split(Split(monFichier, "-")(2), "_")(0)
wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
monFichier = Dir
Loop
End Sub
J'ai testé comme ci-dessous mais je tombe sur l'erreur "Type d'argument ByRef incompatible sur "onglet" :
If FeuilleExiste(onglet) = False Then
Function FeuilleExiste(NomF As String) As Boolean ' test si la feuille existe
On Error Resume Next
FeuilleExiste = Not Sheets(NomF) Is Nothing
If FeuilleExiste("P1") = False Then
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = "P1"
.Activate
End With
End If
End Function
Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer
Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)
Do While monFichier <> ""
'Ici je cr?e un onglet pour chaque nom de fichier dans mon dossier
onglet = Split(Split(monFichier, "-")(2), "_")(0)
If FeuilleExiste(onglet) = False Then
wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
End If
monFichier = Dir
Loop
End Sub