Dupliquer une feuille
a
Bonjour,
Je suis en train d'écrire un code VBA pour dupliquer une feuille. Le code que j'ai écrit est le suivant :
Sub DupliquerFeuilleTURPE1()
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim wsSummary As Worksheet
Dim newSheetName As String
Dim userInput As String
Dim typeFeuille As String
Dim derniereColonneRose As Range
Dim nouvelleColonne As Range
Dim i As Long
Dim suffix As Integer
' Demander à l'utilisateur de choisir le type de feuille
typeFeuille = InputBox("Veuillez choisir le type de feuille (HTA ou BT) :", "Choisir le type de feuille")
' Vérifier si l'utilisateur a entré un type valide
If typeFeuille <> "HTA" And typeFeuille <> "BT" Then
MsgBox "Type de feuille invalide. La feuille ne sera pas dupliquée.", vbExclamation
Exit Sub
End If
' Définir la feuille source en fonction du type choisi
If typeFeuille = "HTA" Then
Set wsSource = ThisWorkbook.Sheets("HTA-C1,C2,C3")
ElseIf typeFeuille = "BT" Then
Set wsSource = ThisWorkbook.Sheets("BT>36 kV C4")
End If
' Demander à l'utilisateur de renommer la nouvelle feuille
userInput = InputBox("Veuillez entrer un nom pour la nouvelle feuille TURPE :", "Renommer la feuille")
' Vérifier si l'utilisateur a entré un nom
If Trim(userInput) = "" Then
MsgBox "Aucun nom n'a été entré. La feuille ne sera pas dupliquée.", vbExclamation
Exit Sub
End If
' Déterminer un nom unique pour la nouvelle feuille
newSheetName = typeFeuille & "-" & Trim(userInput)
suffix = 1
On Error Resume Next
Do While Not wsDestination Is Nothing
newSheetName = newSheetName & "_1"
Set wsDestination = ThisWorkbook.Sheets(newSheetName)
Loop
On Error GoTo 0
' Dupliquer la feuille
wsSource.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
Set wsDestination = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
wsDestination.Name = newSheetName
' Nom de la feuille où la colonne sera ajoutée
Set wsSummary = ThisWorkbook.Sheets("Feuil8")
' Trouver la prochaine colonne vide dans la feuille existante
For i = 8 To wsSummary.Columns.Count ' Commence à H et va jusqu'à la dernière colonne
If wsSummary.Columns(i).Interior.Color = RGB(255, 192, 203) Then ' Couleur rose
Set derniereColonneRose = wsSummary.Columns(i)
End If
Next i
' Insérer après la colonne H si aucune colonne rose trouvée, sinon après la dernière colonne rose
If derniereColonneRose Is Nothing Then
Set nouvelleColonne = wsSummary.Columns("I")
Else
Set nouvelleColonne = derniereColonneRose.Offset(0, 1)
End If
' Insérer la nouvelle colonne
nouvelleColonne.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
' Colorer la nouvelle colonne en rose
nouvelleColonne.Offset(0, -1).Interior.Color = RGB(255, 192, 203) ' Couleur rose
' Ajouter des bordures sur les côtés gauche et droit de la nouvelle colonne
With nouvelleColonne.Offset(0, -1).Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlack
End With
With nouvelleColonne.Offset(0, -1).Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlack
End With
' Ajouter des bordures fines entre les autres lignes
With nouvelleColonne.Offset(0, -1).Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(192, 192, 192)
End With
With nouvelleColonne.Offset(0, -1).Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = RGB(192, 192, 192)
End With
' Ajouter une bordure en dessous de la première ligne uniquement
With nouvelleColonne.Offset(0, -1).Cells(1, 1).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.Color = vbBlack
End With
' Ajouter le nom de la nouvelle feuille dans la première cellule de la nouvelle colonne
nouvelleColonne.Offset(0, -1).Cells(1, 1).Value = newSheetName
' Lier la plage A8:A70 de la nouvelle feuille TURPE à la nouvelle colonne dans la feuille existante
For i = 8 To 70
nouvelleColonne.Offset(0, -1).Cells(i, 1).Formula = "='" & newSheetName & "'!A" & i
Next i
' Afficher un message à l'utilisateur
MsgBox "La feuille TURPE a été dupliquée et renommée en '" & newSheetName & "'."
End SubAvec ce code, j'arrive à dupliquer ma feuille mais je ne comprends pourquoi j'ai ces messages d'erreurs alors que je n'ai pas de feuille de ce nom, et que la feuille que je renomme n'est pas de ce nom :
Cette boîte se présente plusieurs fois, mais le mot "bilan" change en un autre mot.
Ainsi sauriez-vous me dire comment améliorer mon code et me dire ce qui ne va pas ?
a
Solution trouvée : ajouter le code suivant permet de gérer l'erreur.
Dim memoDA as boolean
'Au début de la procédure
memoDA = application.DisplayAlerts
'Avant de faire ta copie de feuille
application.DisplayAlerts = False
'Suite de ton code...
'Puis tu remets DisplayAlerts en place
Application.DisplayAlerts = memoDA