Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : fin de macro si feuille existe déjà...

6 réponses
Avatar
Domi
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom variable
(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la feuille
créee existe déja (2 lancements consécutifs de la macros par exemple)...
Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers fin
dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le contenu de la
cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne conserver
que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi

6 réponses

Avatar
Joel
Bonsoir,

le plus efficace (maisira sur fin si une autre cause empêche la création de
la feuille

Sub Text()
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
On Error GoTo fin
ActiveSheet.Name = Worksheets("TEST").[A1]
On Error GoTo 0
'Supprime de la nouvelle feuille crée toutes les formules pour ne conserver
'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

Exit Sub

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:endk%
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom variable
(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la
feuille

créee existe déja (2 lancements consécutifs de la macros par exemple)...
Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers fin
dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le contenu de
la

cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi





Avatar
Domi
J'avais pensé à cette solution mais elle ne me plait pas beaucoup, je
préférerais plutôt être sûr que le pb vient bien d'un nom de feuille déjà
existant...

Merci tout de même
Domi

"Joel" a écrit dans le message de
news:cc1ibe$6ef$
Bonsoir,

le plus efficace (maisira sur fin si une autre cause empêche la création
de

la feuille

Sub Text()
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
On Error GoTo fin
ActiveSheet.Name = Worksheets("TEST").[A1]
On Error GoTo 0
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

Exit Sub

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:endk%
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom variable
(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la
feuille

créee existe déja (2 lancements consécutifs de la macros par exemple)...
Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers fin
dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le contenu de
la

cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi









Avatar
Hervé
Salut Domi,
Essai ces bouts de code pour voir si ils te conviennent :

Sub Test1()
Dim Fe As Worksheet
If [A1] = "" Then Exit Sub
On Error Resume Next
Set Fe = Worksheets([A1].Value)
If Err.Number = 0 Then
MsgBox "Impossible, " _
& "la feuille existe déjà avec ce n° !"
Exit Sub
End If
On Error GoTo 0
'ici ton code si la feuille n'existe pas...
Set Fe = Nothing
End Sub

Sub Test2()
Dim Fe As Worksheet
If [A1] = "" Then Exit Sub
For Each Fe In Worksheets
If Fe.Name = [A1].Value Then
MsgBox "Impossible, " _
& "la feuille existe déjà avec ce n° !"
Exit Sub
End If
Next Fe
'ici ton code si la feuille n'existe pas...
Set Fe = Nothing
End Sub

Hervé.

"Domi" a écrit dans le message news:
endk#
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom variable
(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la
feuille

créee existe déja (2 lancements consécutifs de la macros par exemple)...
Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers fin
dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le contenu de
la

cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi





Avatar
Joel
Re-

voici donc la solution alternative :

Sub Test()

Dim oSheet As Worksheet
Dim DejaLa As Boolean
DejaLa = False
For Each oSheet In Worksheets
If oSheet.Name = Worksheets("TEST").Range("A1").Value Then
DejaLa = True
Exit For
End If
Next
If DejaLa Then
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Else
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne conserver
'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With
End If
End Sub


--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:
J'avais pensé à cette solution mais elle ne me plait pas beaucoup, je
préférerais plutôt être sûr que le pb vient bien d'un nom de feuille déjà
existant...

Merci tout de même
Domi

"Joel" a écrit dans le message de
news:cc1ibe$6ef$
Bonsoir,

le plus efficace (maisira sur fin si une autre cause empêche la création
de

la feuille

Sub Text()
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
On Error GoTo fin
ActiveSheet.Name = Worksheets("TEST").[A1]
On Error GoTo 0
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

Exit Sub

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:endk%
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom
variable



(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la
feuille

créee existe déja (2 lancements consécutifs de la macros par
exemple)...



Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers
fin



dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le contenu
de



la
cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi













Avatar
Domi
Solution testée et approuvée ;o))
Merci
Domi

"Joel" a écrit dans le message de
news:cc1m68$gfj$
Re-

voici donc la solution alternative :

Sub Test()

Dim oSheet As Worksheet
Dim DejaLa As Boolean
DejaLa = False
For Each oSheet In Worksheets
If oSheet.Name = Worksheets("TEST").Range("A1").Value Then
DejaLa = True
Exit For
End If
Next
If DejaLa Then
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Else
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With
End If
End Sub


--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:
J'avais pensé à cette solution mais elle ne me plait pas beaucoup, je
préférerais plutôt être sûr que le pb vient bien d'un nom de feuille
déjà


existant...

Merci tout de même
Domi

"Joel" a écrit dans le message de
news:cc1ibe$6ef$
Bonsoir,

le plus efficace (maisira sur fin si une autre cause empêche la
création



de
la feuille

Sub Text()
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
On Error GoTo fin
ActiveSheet.Name = Worksheets("TEST").[A1]
On Error GoTo 0
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

Exit Sub

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:endk%
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom
variable



(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si la
feuille

créee existe déja (2 lancements consécutifs de la macros par
exemple)...



Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer vers
fin



dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le
contenu




de
la
cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi

















Avatar
Joel
Certe, mais comme l'a si bien fait remarqué Hervé, il est bon de s'assurer
que A1 n'est pas vide ;-)

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:
Solution testée et approuvée ;o))
Merci
Domi

"Joel" a écrit dans le message de
news:cc1m68$gfj$
Re-

voici donc la solution alternative :

Sub Test()

Dim oSheet As Worksheet
Dim DejaLa As Boolean
DejaLa = False
For Each oSheet In Worksheets
If oSheet.Name = Worksheets("TEST").Range("A1").Value Then
DejaLa = True
Exit For
End If
Next
If DejaLa Then
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Else
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With
End If
End Sub


--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:
J'avais pensé à cette solution mais elle ne me plait pas beaucoup, je
préférerais plutôt être sûr que le pb vient bien d'un nom de feuille
déjà


existant...

Merci tout de même
Domi

"Joel" a écrit dans le message de
news:cc1ibe$6ef$
Bonsoir,

le plus efficace (maisira sur fin si une autre cause empêche la
création



de
la feuille

Sub Text()
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
On Error GoTo fin
ActiveSheet.Name = Worksheets("TEST").[A1]
On Error GoTo 0
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

'que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

Exit Sub

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
End Sub




--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Domi" a écrit dans le message de
news:endk%
Bonsoir,

Je voudrais faire une copie de feuille en lui attribuant un nom
variable



(contenu de la cellule A1)
J'ai réussi à bidouiller ce petit bout de code mais ça coince si
la





feuille
créee existe déja (2 lancements consécutifs de la macros par
exemple)...



Quelqu'un pourrait-il compléter ma macro de façon à me renvoyer
vers





fin
dans ce cas.

'Crée une copie de la feuille TEST en lui donnant pour nom le
contenu




de
la
cellule A1
Sheets("TEST").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = Worksheets("TEST").[A1]
'Supprime de la nouvelle feuille crée toutes les formules pour ne
conserver

que les valeurs
With ThisWorkbook.ActiveSheet.UsedRange
.Value2 = .Value2
End With

fin:
MsgBox "Impossible, la feuille existe déjà avec ce n° !"

End Sub

Merci
Domi