Changer nom onglet vba avec condition

89ric

XLDnaute Junior
Bonjour,

je cherche vainement à faire fonctionner ma macro me permettant de changer le nom de certains onglets d'un classeur excel suivant une liste établie dans une feuille "saisie" mais en cherchant les doublons.
Ma méthode doit fonctionner mais je ne sais pas où ca bug.
Pouvez-vous m'aider?
Merci!

Ci-dessous, le code et en pièce jointe mon fichier:

Sub NomFeuille()

Dim j, k As Integer
On Error Resume Next

For j = 1 To 32
If Not IsEmpty(Sheets("Saisie").Range("B" & j + 2)) Then
For k = j To 31
If Sheets("Saisie").Range("B" & j + 2) = Sheets("Saisie").Range("B" & k + 3) Then
Worksheets(j + 14).Name = Worksheets(j + 14).Range("A2") & Worksheets(j + 14).Range("C2") And Worksheets(k + 15).Name = Worksheets(k + 15).Range("A2") & Worksheets(k + 15).Range("C2")
End If
Next k
Worksheets(j + 14).Name = Worksheets(j + 14).Range("A2")

Else: Worksheets(j + 14).Name = Worksheets("Saisie").Range("B2") & j
End If
Next j




On Error GoTo 0

End Sub
 

Pièces jointes

  • Modèle Notes PP v3.5.zip
    249.8 KB · Affichages: 103
  • Modèle Notes PP v3.5.zip
    249.8 KB · Affichages: 89
  • Modèle Notes PP v3.5.zip
    249.8 KB · Affichages: 95

89ric

XLDnaute Junior
Re : Changer nom onglet vba avec condition

Bonjour, j'ai une liste de noms dans une colonne B dans une feuille "saisie" et autant de feuilles que de noms (feuille de renseignement pour chaque personne).
Je souhaite donner à chaque feuille le nom de la personne concernée mais si il y a deux personnes portant le même nom je souhaite que la feuille porte le nom suivi du prénom (qui se trouve dans la colonne C de la feuille "saisie".
De plus si la cellule est vide, alors le nom de la feuille doit être "Nom" suivi du numéro de ligne correspondant.
Avec ma macro, les feuilles sont bien renommer.
Seul pose problème le fait d'avoir deux noms identiques.
Merci de votre aide!
PS : J'ai joint un fichier dans mon précédent message et la macro porte le nom "Nomfeuille"
 
C

Compte Supprimé 979

Guest
Re : Changer nom onglet vba avec condition

Re,

Essaye ceci ;)
Code:
Sub NomFeuille2()
  Dim NumEleve As Integer
  Dim ShtS As Worksheet
  ' Définir le nom de la feuille de saisie
  Set ShtS = Sheets("Saisie")
  ' En Cas d'erreur on continue
  On Error Resume Next
  ' Pour l'ensemble des élèves
  For NumEleve = 1 To 32
    ' Si la cellule nom est vide
    If IsEmpty(ShtS.Range("B" & 2 + NumEleve)) Then
      ' nommer la feuille : "Nom " + Numéro élève
      Worksheets(14 + NumEleve).Name = "Nom " & Format(NumEleve, "00")
    Else
      ' Nommer la feuille avec le nom de l'élève
      Worksheets(14 + NumEleve).Name = ShtS.Range("B" & 2 + NumEleve)
      ' En cas d'erreur : nom existe déjà
      If Err.Number <> 0 Then
        ' Nommer la feuille avec le nom + le prénom de l'élève
        Worksheets(14 + NumEleve).Name = ShtS.Range("B" & 2 + NumEleve) & " " & ShtS.Range("C" & 2 + NumEleve)
      End If
      ' Remettre à zéro l'erreur au cas ou
      Err.Clear
    End If
  Next NumEleve
  ' Réactiver la gestion d'erreur
  On Error GoTo 0
End Sub

A+
 

89ric

XLDnaute Junior
Re : Changer nom onglet vba avec condition

Ca marche!!!
Merci!!!
Et dire que j'ai passé toute mon après-midi sur un truc qui ne marche pas!
Je n'ai pas tout compris à la macro, mais ce n'est pas grave.
Juste un détail, est-il possible de donner le nom et le prénom aux deux homonymes?
Il ne me donne le nom et le prénom que de la 2° personne.
Merci.
 
C

Compte Supprimé 979

Guest
Re : Changer nom onglet vba avec condition

Re,

Dans ce cas même plus besoin de gestion d'erreur ...
il suffit de compter le nombre de noms identiques
Code:
Sub NomFeuille2()
  Dim NumEleve As Integer, NbHomonymes As Integer
  Dim ShtS As Worksheet
  ' Définir le nom de la feuille de saisie
  Set ShtS = Sheets("Saisie")
  ' En Cas d'erreur on continue
  On Error Resume Next
  ' Pour l'ensemble des élèves
  For NumEleve = 1 To 32
    ' Si la cellule nom est vide
    If IsEmpty(ShtS.Range("B" & 2 + NumEleve)) Then
      ' nommer la feuille : "Nom " + Numéro élève
      Worksheets(14 + NumEleve).Name = "Nom " & Format(NumEleve, "00")
    Else
      ' Compter le nombre de nom identique
      NbHomonymes = 1
      NbHomonymes = Application.WorksheetFunction.CountIf(ShtS.Range("B:B"), ShtS.Range("B" & 2 + NumEleve))
      ' Si il n'existe pas d'autres noms similaires
      If NbHomonymes = 1 Then
        ' Nommer la feuille avec le nom de l'élève
        Worksheets(14 + NumEleve).Name = ShtS.Range("B" & 2 + NumEleve)
      Else
        ' Nommer la feuille avec le nom + le prénom de l'élève
        Worksheets(14 + NumEleve).Name = ShtS.Range("B" & 2 + NumEleve) & " " & ShtS.Range("C" & 2 + NumEleve)
      End If
      ' Remettre à zéro l'erreur au cas ou
      Err.Clear
    End If
  Next NumEleve
  ' Réactiver la gestion d'erreur
  On Error GoTo 0
End Sub

Il faudrait peut-être ajouter un test d'erreur au cas ou nom+prénom soient identiques

A+
 

Statistiques des forums

Discussions
312 287
Messages
2 086 820
Membres
103 394
dernier inscrit
elhamdi