XL 2010 VBA écraser une feuil de calcul du même nom

spike29

XLDnaute Occasionnel
Bonsoir,

J’ai une macro qui me permet de créer une autre Feuil avec la copie de mon classeur actif.

Cette nouvelle Feuil se nomme avec la date du jour puis le contenu de la cellule W8 de la feuille active

Seul problème, si l’utilisateur a besoin de déclencher une seconde fois la macro pour la même journée cela ne fonctionne pas car j’ai une erreur qui remonte m’indiquant que mon classeur ne peut comporter 2 Feuil avec le même nom.

Que faudrait-il ajouter à mon code pour que ce dernier fasse abstraction de ce problème et puisse venir écraser si besoin la Feuil déjà générer une seconde fois ??

Mon code ci-dessous :

VB:
Sheets("Rapport").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Format(Date, "dd-mm-yy") & " " & Range("W8")
With ActiveSheet
If Range("W8") = "JOUR" Then
.Tab.ColorIndex = 12
ElseIf Range("W8") = "NUIT" Then
.Tab.ColorIndex = 14

End If

End With

Merci d’avance pour votre aide.

Bonne fin de journée
 
Solution
Bonsoir le fil,

Euh, y comme un air de famille, non ? :rolleyes:
Ce que j'ai posté dans le message#4...
Dim nNom$
On Error Resume Next
nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
If Len(nNom) Then
Sheets("Rapport").Copy After:=Sheets(Sheets.Count)
Et ce qu'on peut-lire dans le message#8
Dim nNom$
nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
If Len(nNom) Then
C'est vrai je signe aussi JM (mais c'huis pas du 27)
;)

sousou

XLDnaute Barbatruc
Bonsoir
A main levé....
nfeuil=Format(Date, "dd-mm-yy") & " " & Range("W8")
application.displayalert=false
for each f in sheets
if f.name=nfeuil then f.delete: exit for
next
application.displayalert=true
' et ensuite tu reprends ton code
activesheet.name=nfeuil
.....
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil

Il y a plus d'erreur mais c'est du souci quand même ;)
VB:
Sub copie_Feuille()
Dim nNom$
On Error Resume Next
nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
If Len(nNom) Then
Sheets("Rapport").Copy After:=Sheets(Sheets.Count)
On Error Resume Next
ActiveSheet.Name = nNom
End If
End Sub
 

spike29

XLDnaute Occasionnel
Bonsoir à tous le fil et merci encore pour votre aide !

Merci Staple pour ton code. Avec ce dernier je n'ai plus d'alerte et ma macro poursuit son cours mais lorsque je déclenche une seconde fois ma macro sur la même date et même période de la journée (JOUR / NUIT valeur présente en cellule W8) ça me génère toujours une autre Feuil qui se nomme rapport(2) au lieu de venir écraser comme je le souhaite la précédente Feuil du même nom.
Exemple : 15-12-20 JOUR

En PJ un fichier d'exemple afin de mieux cerner mon besoin.

Merci d'avance pour votre aide et bonne fin de journée à tous :)
 

Pièces jointes

  • TEST1.xlsm
    18.9 KB · Affichages: 14

JM27

XLDnaute Barbatruc
Bonjour
comme cela ?
VB:
Sub copie()
    Dim nNom$
    nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
    If Len(nNom) Then
        On Error Resume Next
            Application.DisplayAlerts = False
            Sheets(nNom).Delete
            Application.DisplayAlerts = True
        On Error GoTo 0
        Sheets("Rapport").Copy After:=Sheets(Sheets.Count)
        ActiveSheet.Name = nNom
    End If
        With ActiveSheet
            If Range("W8") = "JOUR" Then
                .Tab.ColorIndex = 12
                 ElseIf Range("W8") = "NUIT" Then
                 .Tab.ColorIndex = 14
    
            End If
        End With
End Sub
 

Pièces jointes

  • TEST1 (1).xlsm
    19.5 KB · Affichages: 4

spike29

XLDnaute Occasionnel
Bonsoir à tous,

Merci JM pour ton retour, ça fonctionne parfaitement chez moi.
Encore merci à tous pour votre aide et votre réactivité.
@Phil69970

Je lis systématiquement vos messages avec la plus grande attention et les procède aux tests qui vont biens sur mon fichier. Les éléments de réponses présents dans le post2 et post3 ne fonctionnaient pas chez moi.

Bonne fin de journée à tous.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Euh, y comme un air de famille, non ? :rolleyes:
Ce que j'ai posté dans le message#4...
Dim nNom$
On Error Resume Next
nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
If Len(nNom) Then
Sheets("Rapport").Copy After:=Sheets(Sheets.Count)
Et ce qu'on peut-lire dans le message#8
Dim nNom$
nNom = Format(Date, "dd-mm-yy"" """) & Sheets("Rapport").Range("W8")
If Len(nNom) Then
C'est vrai je signe aussi JM (mais c'huis pas du 27)
;)
 

spike29

XLDnaute Occasionnel
Bonsoir le Fil, Bonsoir Staple

Ressemblance plus qu'indéniable je te l'accorde.
Et je me souvient l'avoir testé et ne me demande pas pourquoi hier soir ça ne fonctionnait pas...
J'ai taggé ton post comme solution également car il le mérite amplement et débutant que je suis il ne faut pas exclure une fausse manip de ma part hier soir dans la recopie de ton code.

Encore merci.

Bonne fin de journée
 

Staple1600

XLDnaute Barbatruc
Re

skipe29
C'est gentil mais c'était juste une tite crise d'égotisme
J'avais cru lire
En complétant le code de Staple du message#4, ca donne quoi comme cela?
Ne l'ayant point lu, je m'en trouvais fort bouleversifié, et me voyait mal dormir.
Heureusement tu es revenu dans le fil ;) et désormais rasséréné je vais pouvoir dormir en Option Explicit

PS: Ceci dit le code de JM27 n'a plus ce que j'évoquais ici ;)
Bonsoir Phil69970
C'est pourquoi j'ai utilisé le mot qui commence par un s.
;)

Bonne nuit à tous.
 

Discussions similaires

Réponses
4
Affichages
191

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali