Renommer feuille en VBA avec condition

barbenault

XLDnaute Nouveau
Bonjour à tous,

Je fais face à mes limites alors que je cherche à renommer des feuilles d'un classeur, je vous expose mon problème.

Pour commencer, je souhaite renommer les feuilles de mon classeur. Chaque feuille est renommée à partir de la cellule A1.

Voici mon code :

Code:
Option Explicit

Sub RenommeOngletsNomCelluleA1()

    Dim Feuille As Worksheet
    
    For Each Feuille In Worksheets
        Feuille.Name = Feuille.Range("A1").Value
    Next Feuille
    
End Sub

Je recontre un problème dans les deux cas de figures suivants :

- si la cellule A1 d'une feuille est vide, j'ai un message "400" (les autres feuilles sont bien renommées)
- si le nom de la feuille existe déjà

Par conséquent, j'aimerais introduire une condition à l'éxecution de la macro :
- Si A1 <> "" alors la macro s'éxécute
- Si le nom existe déjà message d'erreur " le nom existe déjà"

Pourriez vous m'aider svp?

Merci d'avance

(en pj, le fichier pour tester mon code)
 

Pièces jointes

  • Test.xlsm
    15.7 KB · Affichages: 35
  • Test.xlsm
    15.7 KB · Affichages: 37
  • Test.xlsm
    15.7 KB · Affichages: 33

camarchepas

XLDnaute Barbatruc
Re : Renommer feuille en VBA avec condition

Bonjour ,

Une solution parmi tant d'autre ....

Code:
Sub RenommeOngletsNomCelluleA1()

    Dim Feuille As Worksheet
    
    For Each Feuille In Worksheets
       If Feuille.Range("A1").Value <> "" Then
        On Error Resume Next
          Feuille.Name = Feuille.Range("A1").Value
        On Error GoTo 0
       End If
    Next Feuille
    
End Sub
 

barbenault

XLDnaute Nouveau
Re : Renommer feuille en VBA avec condition

Merci, cela fonctionne, mais avec une limite, le fichier plante si l'utilisateur crée des doublons. Par conséquent, j'ai opté pour une autre solution en deux étapes.

1/ l'utilisateur saisit un nom dans un tableau, dans lequel j'ai bloqué la saisie de doublons avec le code suivant :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Pl As Range 'déclare la variable Pl (Plage) = site

Set Pl = Range("C26:C35") 'définit la plage Pl
If Application.Intersect(Pl, Target) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage Pl, sort de la procédure
If Target.Value = "" Then Exit Sub 'si le cellule est effacée, sort de la procédure
If Application.WorksheetFunction.CountIf(Pl, Target) > 1 Then 'condition : si le nombre d'occurrence de la cellule éditée est supérieur à 1
    MsgBox "The project code you have entered already exists. Please enter another one." 'message
    Target.ClearContents 'efface le contenu de la cellule éditée
    Target.Select 'sélectionne la cellule éditée

End If 'fin de la condition
End Sub

2/ Dans chaque feuille (chaque feuille est donc liée à une celulle spécifique de mon tableau), j'ai saisis le code suivant :

Code:
Private Sub Worksheet_Deactivate()
    Me.Name = Worksheets("Settings").Range("I26").Value
    On Error GoTo 0
End Sub

Ainsi, j'évite la sasie de doublon, et le nom de ma feuille est modifiée à partir d'un tableau (à chaque fois que la feuille est "desactivée).
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia