Bonsoir tous,
J'ai saisi la macro suivante: Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
ThisWorkbook.ActiveSheet.Name = Range("B2")
End If
End Sub
Elle fonctionne bien mais si après avoir entré une valeur dans la cellule je la supprime, la macro se "coince" je dois l'arrêter et le nom précédemment saisi dans la cellule reste comme nom de feuille.
Une idée ? un correctif est il possible ?
Merci
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Bonjour, pepeye66, le Forum,
Peut-être ainsi :
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin
ActiveSheet.Name = Range("b2").Value
Exit Sub
fin:
MsgBox "Compléter la cellule b2."
End Sub
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Bonsoir Pepeye66.
Il est normal que la macro coince.
En effet tu supprimes la valeur qui est censée devenir le nom de la feuille.
Tu peux remédier à ce problème avec une condition ou une gestion d'erreur, comme je te le propose.
En effet en passant à la suite de la procédure en cas d'erreur, tu éviteras également les messages si tu utilises des caractères inappropriés.
Edit: Bonsoir DoubleZero
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
On Error Resume Next
ThisWorkbook.ActiveSheet.Name = Range("B2")
End If
End Sub
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Re-bonjour,
Une autre possibilité, si la cellule b2 devait être vide...
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mem As String
mem = ActiveSheet.Name
If Range("b2").Value <> "" Then
ActiveSheet.Name = Range("b2").Value
Else
ActiveSheet.Name = mem
End If
End Sub
Une autre possibilité, si la cellule b2 devait être vide...
Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim mem As String
mem = ActiveSheet.Name
If Range("b2").Value <> "" Then
ActiveSheet.Name = Range("b2").Value
Else
ActiveSheet.Name = mem
End If
End Sub
Oui, c'est çà ! En effet la cellule B2 n'est pas obligée d'être remplie (auquel cas la feuille porte un N° d'ordre) et par ailleurs il faut pouvoir effacer/modifier la valeur de la cellule B2 si besoin.
Donc ta dernière proposition fonctionne à merveille -> MERCI
@ thebenoit59: Merci pour ta proposition même si je ne l'ai pas testée celle de DoubleZero me convenant.
Merci à vous deux, c'est super de trouver de l'aide si vite et si valable.
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
OUPS ! j'ai encore un problème que je n'avais pas remarqué:
Si je saisi une valeur dans la cellule B2 et puis que je l'efface, cette valeur reste affichée dans le nom de la feuille.
Alors que je voudrais que la dite feuille récupère le N° d'ordre qu'elle avait au départ...
Est ce possible ?
Merci
PS: @ thebenoit59: Ta proposition fonctionne aussi avec le même aléa que ci dessus.
... Si je saisi une valeur dans la cellule B2 et puis que je l'efface, cette valeur reste affichée dans le nom de la feuille.
Alors que je voudrais que la dite feuille récupère le N° d'ordre qu'elle avait au départ...
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Je m'explique:
J'ai un classeur avec (entr'autre) 50 feuilles nommées de 1 à 50 - toutes ces feuilles identiques et sont pré-agencées.
imaginons que l'on remplisse la feuille "1" et que l'on rentre un nom dans la cellule B2: avec ta proposition cette entrée en B2 remplace bien le nom de la feuille en le remplaçant par la saisie en B2.
Mais, si l'on efface la saisie en B2 (par exemple pour remettre la feuille dans le circuit) eh bien le nom qui avait été saisi en B2 reste comme nom de feuille; alors que je voudrais que le nom de la feuille redevienne "1"
Mais, est ce possible ?
Merci
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
OK, je vais me contenter de ta proposition qui fonctionne bien et sera suffisante pour la généralité des cas.
Les quelques fois où il faudra "régénérer" la feuille et lui redonner son aspect initial et sa numérotation initiale je le ferai manuellement
ou bien je rentrerai le N° dans la cellule B2...Ce qui sera certainement la meilleures solution.
Merci beaucoup pour tes réponses et le temps que tu y as consacré.
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$B$2" Then Me.Name = IIf(.Value > "", .Value, Me.CodeName)
End With
End Sub
Variante : utiliser la propriété Index au lieu de CodeName …
_______________________________________________________________________________
Merci de cliquer sur J'aime ce post en bas à gauche de chaque message ayant aidé …
_______________________________________________________________________________ Je suis Paris, Charlie, Bruxelles, …
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address = "$B$2" Then Me.Name = IIf(.Value > "", .Value, Me.CodeName)
End With
End Sub
Variante : utiliser la propriété Index au lieu de CodeName …
_______________________________________________________________________________
Merci de cliquer sur J'aime ce post en bas à gauche de chaque message ayant aidé …
_______________________________________________________________________________ Je suis Paris, Charlie, Bruxelles, …
Merci pour cette réponse "nocturne"
C'est pas mal mais ça ne me convient pas car par cette macro quand on efface la saisie de la cellule B2 la feuille retrouve sa "numérotation générique" et non pas le nom (un N°) que je lui avais affecté (à cause du fait que d'autres feuilles cachées existent et que donc la numérotation générique des feuilles ne va plus de 1 à 50 mais de "feuille5" à "feuille55": ce qui laisse supposer que d'autres feuilles invisibles existent et cela risque de perturber les utilisateurs néophytes)
J'ai une proposition à faire:
Dans le coin droit de chacune des 50 feuilles en cellule AH1 je saisis sur chaque feuille son N°
Peut on alors alterner par une macro le nom de la feuille ainsi: Si B2 est vide alors nom de feuille = AH1 si B2 n'est pas vide alors nom de feuille = B2 (et si j'efface B2 nom de feuille revient à AH1)
Qu'en pensez vous ? pouvez vous m'aider dans ce sens ?
Merci,
pepeye
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Bonjour Pepeye, le fil.
Le soucis est qu'enregistrer une variable contenant l'ancien nom de ta feuille n'est pas aisée, en effet les variables n'ont pas une durée de vie infinie.
Le mieux serait de stocker dans une feuille la liste des noms de feuilles, et ainsi pouvoir récupérer l'ancien nom.
Edit: Je n'avais pas lu ton message jusqu'au bout.
Oui tu peux faire ça.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
On Error GoTo Suite
ThisWorkbook.ActiveSheet.Name = Range("B2")
End If
Exit Sub
Suite:
ThisWorkbook.ActiveSheet.Name = Range("AH1")
End Sub
Re : Attribuer à feuille excel le contenu d'une cellule de cette feuille
Bonjour et merci de ta réponse.
Mais justement, l'ancien nom de feuille (celui qui doit revenir à la feuille si elle n'est pas/plus utilisée càd si la cellule B2 n'est pas remplie ou effacée) est noté "en dur" dans la cellule AH1 (protégée) de chaque feuille, ce n'est pas une variable.
PS: je n'avais pas vu ta modif, je vais essayer ta proposition?
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
On Error GoTo Suite
ThisWorkbook.ActiveSheet.Name = Range("B2")
End If
Exit Sub
Suite:
ThisWorkbook.ActiveSheet.Name = Range("AH1")
End Sub