Renommer une Feuille à nom variable
Bonjour,
je dois modifier le fichier pour faire le relevé d'eau de ma copropriété (56 CP)
il comprote 1 feuille de résumé qui contien les infos des CP
suivi de 56 feuilles à envoyer au CP concerné
depuis la feuille 1, je renome les 56 feuilles suivantes
la feuille persso de Mr TOTO se nome TOTO
et doit se renomé TATA le jour ou Mr TOTO vent son appart à Mme TATA ...
(le but final etant de vérouiller le fichier une fois tout automatisé
afin que des doigts inexpérimentés ne puissent faire d'érreurs)
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 10 To 65 'i = nom de feuille commences à la 10ème ligne et fini a la 65éme
a = i - 8 ' la 1ere feuille est la feuille 2 (10-8=2)
nom = Cells(i, 5) 'le nom de feuille est à la ligne i, 4ème colonne
If Not Intersect(Target, Cells(i, 5)) Is Nothing Then
Sheets(a).Name = nom
End If
Next
End Subtout vas bien tant que je ne change pas l'ordre des feuille
j'ai tester :
Sheets(a).Name = nom
et
Worksheets(a).Name = nom
qui fonctionent tout les deux de la même manière
une seconde solution est pourtant possible
Private Sub Worksheet_Change(ByVal Target As Range)
Colone = 5
If Not Intersect(Target, Range("e10")) Is Nothing Then
Feuil1.Name = Target
End If
If Not Intersect(Target, Range("e11")) Is Nothing Then
Feuil2.Name = Target
End If
If Not Intersect(Target, Range("e12")) Is Nothing Then
Feuil3.Name = Target
End If
If Not Intersect(Target, Range("E13")) Is Nothing Then
Feuil4.Name = Target
End Ifmais je ne parvien pas a la mettre dans une boucle For/Next
(une boucle pour 2 raisons)
(1 c plus rapide)
(2 c plus simple a modifier)
mon souci est que je ne sais pas écrir qqc dans le style :
Feuil(a).Name = Target
Feuil"a".Name = Target
Feuil[a].Name = Target
Feuil{a}.Name = Target
Merci de votre aide ...
Bonjour
Pourquoi joindre un fichier :
Sur la charte du Forum
https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html
Point 6 : • Pensez à joindre un fichier pour faciliter la compréhension du problème et augmenter les chances de vous faire aider (taille limite : 300ko, n'hésitez pas à compresser vos fichiers).
Cordialement
oui au détaille prés que le fichier dépasse la taille autorisé
et surtout, qu'il contien des données sensible sur les CP concerné
Bonjour,
une proposition.
Pour un déménagement tous les 3 ans ça vaut vraiment le coup ?
eric
Bonjour Eric,
Merci pour ta solution
elle fonctione sur mon fichier final
ce n'est pas mais pas du tout ce à quoi je m'attendais
je penssais trouvé une ligne de renomage toute simple avec ma variable
mon idée première étant d'appelé les feuilles avec leurs nom dit "" interne "" (Feuiln avec n = 1 à 56)
la seule chose qui me gene est que je ne comprend pas ton code :-/
mais bon ....
reste maintenant à protégé les onglets car si on modifi le nom à la main la macro ne fonctione plus
en revanche, chapeau pour les gardes fous en cas d'erreur
encore merci @toi
Le principe :
si tu modifies un nom sur la feuille j'enregistre ce nom dans tmp et j'annule ta modification pour récupérer le nom actuel.
Après les contrôles que tu as vu la feuille est renommée si c'est faisable et ta modif rerstaurée.
Bien sûr si tu renommes directement la feuille on ne le voit pas. C'est sans doute ce que tu devrait garder comme fonctionnement vu le peu de fois où cette action va arriver.
eric
effectivement, je viens de relir le code à la lumière de ce que tu m'a dis
on vas dir que j'en entrevois les grandes lignes
mais que ca dépasse de pas mal mes compétances
il y a en effect de fortes chances pour que cela reste tel quel
mais ... ne sait on jamais ...
si quelqu'un me trouvais la solution a la quelle je pence
je vais donc pacienter un peut avant de mettre ce sujet résolu
en attendan je vais chercher commen protégé les onglets cotre le renomage direct
je crois avoir déja vu ca quelque part sur le net
encore merci pour ta participarion
le schmilblik avance ...
Toi même tu as dit
tout vas bien tant que je ne change pas l'ordre des feuille
C'est pourquoi j'ai fait autrement. Sinon tu le fais directement en te basant sur l'index de la feuille.
sauf si t utilise le nom interne des feuilles
If Not Intersect(Target, Range("D10")) Is Nothing Then
Feuil1.Name = Target
End If
j'ai essayer ca fonctione
sauf que c'est tres long à écrire
et dificilement modifiable en séri
(en cas de modif de la feuille source )
d'ou mon idée d'utiliser une variable
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 10 To 65 'i = nom de feuille commences à la 10ème ligne et fini a la 65éme
a = i - 8 ' la 1ere feuille est la feuille 2 (10-8=2)
nom = Cells(i, 5) 'le nom de feuille est à la ligne i, 4ème colonne
If Not Intersect(Target, Cells(i, 5)) Is Nothing Then
Sheets(a).Name = nom
Feuil(a).Name = nom
End If
Next
End Sub
je me répond a moi même
en voyant les 2 codes l'un audessu de l'autre,
il m'est apparu une simplification évidente :
Private Sub Worksheet_Change(ByVal Target As Range)
For i = 10 To 65 'i = nom de feuille commences à la 10ème ligne et fini a la 65éme
a = i - 8 ' la 1ere feuille est la feuille 2 (10-8=2)
nom = Cells(i, 5) 'le nom de feuille est à la ligne i, 4ème colonne
If Not Intersect(Target, Cells(i, 5)) Is Nothing Then
Feuil(a).Name = nom Target
End If
Next