VBA:Excel2007: Renommer une feuille si déjà existante
Résolu/Fermé
cs_douda06
Messages postés
67
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
1 avril 2015
-
Modifié par pijaku le 23/07/2014 à 08:44
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 juil. 2014 à 15:26
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 23 juil. 2014 à 15:26
A voir également:
- VBA:Excel2007: Renommer une feuille si déjà existante
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Vba range avec variable ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba dépassement de capacité ✓ - Forum Excel
1 réponse
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
23 juil. 2014 à 08:43
23 juil. 2014 à 08:43
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
23 juil. 2014 à 12:28
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
23 juil. 2014 à 12:32
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...
23 juil. 2014 à 12:50
23 juil. 2014 à 13:18
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
23 juil. 2014 à 13:20