Nom de feuille

Le
Michel
Bonjour,

excel 2007

Si j'ajoute une feuille à un classeur elle prend le nom de feuilxx,
4 si le classeur est neuf.
mais si je delete cette feuille "feuil4" et que j'ajoute à nouveau une
feuille elle est appelée "feuil5" si je la détruit la suivante feuil6
. alors qu'il n'y a toujours que 4 feuilles

Question: est il possible de faire en sorte que la nouvelle feuille se
nomme feuil4 et non pas feuilxx, en gros réinitialiser le compteur

j'espère avoir été clair

Merci de l'aide

M.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FFO
Le #18928441
Salut Michel
Je crains que la réinitialisation du compteur ne soit pas possible sans
refermer et réouvrir Excel

Tu peux pour contourner la difficulté créer une Macro d'ajout de feuilles
avec ce code :

Sheets.Add.Name = "Feuil" & Sheets.Count + 1

Attention de ne pas avoir de trou dans la séquence de numérotation exemple :
3 feuilles existantes sans la Feuil1
Ce qui donnerait les Onglets : Feuil2, Feuil3, Feuil4
La macro avec ces 3 feuilles chercherait à créer la Feuil4 déjà existante ce
qui engendrerait un Bug

Fais des essais et dis moi !!!!!
MichDenis
Le #18928561
| en gros réinitialiser le compteur

Il te suffit de fermer Excel et de le rouvrir à nouveau.
C'est vrai, ce n'est pas très pratique !

Mais si cela t'intéresse, tu peux ajouter ce type de macro
dans le ThisWorkbook de ton classeur :

Ceci s'occupe seulement du nom de l'onglet de la feuille
mais il serait possible de faire quelque chose de similaire
pour traiter de la propriété "Name" de l'objet "Feuille
apparaissant dans la fenêtre de l'édition de code.

'----------------------------------------
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim F As Worksheet, A As Integer, Tong()
Dim Nom As String, Nb As Integer, X As Variant
With ThisWorkbook
Nb = .Worksheets.Count
ReDim Tong(1 To Nb)
For Each F In .Worksheets
If UCase(F.Name) <> UCase("Feuil4") Then
A = A + 1
Tong(A) = F.Name
End If
Next
For A = 1 To Nb
Nom = "Feuil" & A
X = Application.Match(Nom, Tong, 0)
If IsError(X) Then
Sh.Name = Nom
Exit For
End If
Next
End With
End Sub
'----------------------------------------
Michel
Le #18929361
Le 18/03/2009, MichDenis a supposé :

Merci à vous deux (FFO et Michdenis)

C'est bon pour les feuilles, me reste plus que le nom des feuilles dans
le code VBA à comprendre (codename)

M.
MichDenis
Le #18929681
La procédure qui suit nomme l'onglet de la feuille ajoutée
en utilisant l'abréviation Feuil suivi du plus petit index disponible
Il en va de même pour la Propriété Name de l'objet Feuille
dans la fenêtre VBA.

Il est à noter que l'index de l'onglet de la feuille et celui
de la propriété name peut être différent au gré des ajouts
et suppression de feuille. Pour que l'index soit le même, il
faudrait réarranger la macro un peu !

'---------------------------------------
Private Sub Workbook_NewSheet(ByVal Sh As Object)

Dim F As Worksheet, A As Integer, Tong(), Tobj()
Dim Nom As String, Nb As Integer, X As Variant
With ThisWorkbook
Nb = .Worksheets.Count
ReDim Tong(1 To Nb)
ReDim Tobj(1 To Nb)
For Each F In .Worksheets
If UCase(F.Name) <> UCase(Sh.Name) Then
A = A + 1
Tong(A) = F.Name
Tobj(A) = F.CodeName
End If
Next
For A = 1 To Nb
Nom = "Feuil" & A
X = Application.Match(Nom, Tong, 0)
If IsError(X) Then
Sh.Name = Nom
For b = 1 To Nb
Nom = "Feuil" & b
y = Application.Match(Nom, Tobj, 0)
If IsError(y) Then
ThisWorkbook.VBProject.VBComponents(Sh.CodeName).Name = Nom
Exit Sub
End If
Next
End If
Next
End With

End Sub
'---------------------------------------



"Michel"
Le 18/03/2009, MichDenis a supposé :

Merci à vous deux (FFO et Michdenis)

C'est bon pour les feuilles, me reste plus que le nom des feuilles dans
le code VBA à comprendre (codename)

M.
Michel
Le #18932931
MichDenis a exprimé avec précision :

Merci pour l'explication,
j'ai trouvé ( pas assez au top VBA pour le faire moi même) un bout de
code sympa.

For Each ws In ActiveWorkbook.Worksheets
ws.Parent.VBProject.VBComponents(ws.CodeName).Properties("_CodeName") =
"Feuil" & i + 1
i = i + 1
Next ws
M.
Publicité
Poster une réponse
Anonyme