VBA:Excel2007: Renommer une feuille si déjà existante
Résolu
cs_douda06
Messages postés
67
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
A voir également:
- VBA:Excel2007: Renommer une feuille si déjà existante
- Excel compter cellule couleur sans vba - Guide
- Mkdir vba ✓ - Forum VB / VBA
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
1 réponse
Bonjour,
C'est un peu plus complexe que cela.
Tu dois :
Pour cela, tu peux te faire une petite fonction personnalisée avec deux paramètres : le classeur et le nom de la feuille.
Comme point de départ, je te propose la fonction FeuilleExiste de Bbil :
Que l'on peut transformer afin qu'elle retourne un String plutôt qu'un Boolean :
Reste à y ajouter les différentes conditions que je t'ai détaillé plus haut.
L'appel de cette fonction personnalisée se ferait depuis ta procédure principale comme ceci :
C'est un peu plus complexe que cela.
Tu dois :
Vérifier si le nom existe déjà.
- si oui, vérifier que ce nom se termine par une partie numérique,
=> si oui,
* extraire cette partie numérique (qui pourrait avoir plusieurs chiffres ex : ZEE13)
* ajouter 1 à ce nombre
* renommer la feuille
=> si non : ajouter 1 après le nom de la feuille
- si non, renommer simplement la feuille
Pour cela, tu peux te faire une petite fonction personnalisée avec deux paramètres : le classeur et le nom de la feuille.
Comme point de départ, je te propose la fonction FeuilleExiste de Bbil :
Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean On Error Resume Next FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing) End Function
Que l'on peut transformer afin qu'elle retourne un String plutôt qu'un Boolean :
Function RenommeFeuille(wk As Workbook, stFeuille As String) As String On Error Resume Next If Not (wk.Sheets(stFeuille) Is Nothing) Then RenommeFeuille = "Ta feuille existe déjà" Else RenommeFeuille = "Ta feuille n'existe pas encore" End If End Function
Reste à y ajouter les différentes conditions que je t'ai détaillé plus haut.
L'appel de cette fonction personnalisée se ferait depuis ta procédure principale comme ceci :
' Dim AncienNom As String '[ '... '] Sheets(TEMPLATE).Copy After:=Sheets(Sheets.Count) Set nwSh = ActiveSheet 'Ici les noms des feuilles sont attribués depuis la col 5 de la feuille4 AncienNom = ws.Cells(1, 5 + Chx).Value On Error Resume Next nwSh.Name = RenommeFeuille(ThisWorkbook, AncienNom) End Sub
Merci, j'ai testé ton code, mais ça me donne toujours le même résultat :(
J'ai modifié la function RenommeFeuille, en ajoutant un "_" au nom de la feuille s'il existe déjà; mais si j'exécute une deuxième fois ça ne renomme pas la feuille et ça continue à m'afficher les TempM (1) | TempM (2) | TempM (3) .. (parce qu'il copie le même contenu de la feuille TEMPLATE) !
Est ce qu'il faut peut être ajouter l'appel à cette fonction dans une boucle? pour qu'a chaque exécution, la macro attribue les mêmes noms de colonnes aux feuilles (en y ajoutant après un chiffre qui s'incrémente pour chaque exécution ) ? Sinon peux tu me proposer une solution plus appropriée? Merci bcp
Le code donné n'est pas complet, et je l'ai précisé :
.......
Pour rappel :
S'il le faut, je le ferais, mais ça serait cool que tu tentes quelque chose...
alors j'ai ajouté un compteur qui s'incrémente au nom de la feuille :
Function RenommeFeuille(wk As Workbook, stFeuille As String) As String
On Error Resume Next
If Not (wk.Sheets(stFeuille) Is Nothing) Then
RenommeFeuille = stFeuille & Cpt + 1
Else
RenommeFeuille = stFeuille
End If
End Function
Ensuite j'ai ajouté une condition:
If FeuilleExiste = True Then ' LA ça ME DONNE ERREUR "Argument non facultatif"
AncienNom = ws.Cells(1, 5 + Chx).Value
On Error Resume Next
nwSh.Name = RenommeFeuille(ThisWorkbook, AncienNom)
End If
Vérifier que ce nom se termine par une partie numérique (...)= ça je n'ai aucune idée de comment le faire :S