OVH Cloud OVH Cloud

Onglet - Nom Auto

14 réponses
Avatar
Vader
Bonjour,

J'ai un problème avec le titre de mes onglets : en fait j'utilise le code
suivant pour afficher en auto le nom de l'onglet (cf ci-dessous).

Cependant est-il possible de faire évoluer le texte de l'onglet dès que la
cellule est modifiée (de façon automatique) ?

Pour l'instant pour que l'onglet prenne la valeur de B641 je dois aller
revalider la cellule (F2 + Entrer). Nota : B641 évolue toute seule, par
formule.


Private Sub Worksheet_Change(ByVal Target As Range)
'Nommer la cellule qui donne la valeur à l'onglet
With Me.Range("B1")
If Not (Intersect(.Cells, Target) Is Nothing) Then
Sheet31.Name = .Value
'Attention : si la cellule qui donne la valeur à l'onglet est vide la
ligne ci-dessus renvera une erreur.
End If
End With
End Sub

4 réponses

1 2
Avatar
Vader
Menu déroulant : Alors là ... je parle bien d'une liste, mais je la trouve
étrange, une "liste déroulante" classique (menu outils) est un object, or là
je suis en face d'une cellule (lorsque l'on clic sur elle, alors apparait un
bouton qui donne accès à la liste), de plus, cette "liste" se déplace comme
une cellule !!! D'ailleur je ne trouve pas comment modifier son format ou les
coordonnées de sa base de donnée.

Remarque elle a un super avantage : la cellule prend directement une valeur
texte ... (sur une liste classique, on a un chiffre). Je peut donc faire
prendre directement la valeur de A1 à une cellule, un onglet, ou ...

Par contre, je peut t'assurer que la modif de la liste provoque bien
Wk_change ... je m'en sert dans mon code actuel ...

C'est la modif d'une cellule sans intervention directe (humaine donc ;-) qui
ne déclanche pas Wk_change (Tu es obligé de faire une validation manuelle de
la cellule via F2 + ENTER sur la dite cellule).

Exemple :
Si je modifie A1 (je rentre le n° d'une scte, ex 000) ... B1 est modifiée en
auto via sa formule (ex : scte XX1). Là le code marche l'onglet prends la
valeur de B1 ... (l'onglet va s'appeller XX1) Yeap !!! VIctoire !!!

Par contre si l'utilisateur voit que la valeur B1 est fausse (en gros le nom
de sa scte est faux dans le listing - il va modifier le dit listing (remplace
XX1 par XX2) ... la fonction vlook qui va donner B1 voit la liste se modifier
et réagi ... op !!! B1 se modifie et là problème l'onglet reste sur la valeur
B1=XX1. SAUF si je fais un F2+ENTER sur B1.

Pour résoudre la chose, il faudrait donc tester les modifications de la
cellule B1 ... moi je vois ça sous la forme suivante : tu stock B1 dans une
variable et si la variable se modifie le code qui donne le nom de l'onglet
s'execute. Prb : Est-il possible de tester en continu une modif de cellule ?
Une boucle non-stop ?




Sinon,

"michdenis" wrote:


J'ai modifié B1 par A1

Par menu déroulant en A1 , tu veux dire "Une liste" de la commande "Validation"

Semble-t-il que sur certaines versions d'excel, la mise à jour d'une liste de validation ne provoque pas l'événement
Worksheet_Change ... Est-ce le cas pour ta version ? Quelle est ta version d'excel ?

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("A1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:
OK.

B1¶41

B641=vlook(....) recherche d'une valeur "texte" dans une base donnée.
Le critère de recherche de vlook provient de A1 (menu déroulant - que
l'utilisateur est obligé de selectionner (n° de sa scte).

En gros ça donne :
A1 : n° de la scte
B1 : Nom scte

NB : Je suis en Excel US. Je ne sais pas comment s'appelle pas fonction en
v. FR

Alors normalement l'utilisateur ne touche pas à la valeur B1 ... sauf si le
nom est erroné ou qu'il y a une procédure particulière chez lui (là il va
modifier le nom dans le listing Vlook, B1 se modifie en auto, mais pas
l'onglet) ... donc si je ne teste pas B1 ... je loupe la modif. (Et de là à
verifier les 70 titres de feuille ... dur).

"michdenis" wrote:

Et ta fonction (celle qui met à jour B1) est déclenchée de quelle façon ?


Salutations!


"Vader" a écrit dans le message de news:
beh à vrai dire ... B1 est modifiée par une fonction.

Et comme je ne veux pas que l'utilisateur final puisse la modifiée, l'onglet
doit pouvoir detecter son changement tout seul pour se mettre à jour.

Nota : C'est pour cela que j'ai contourné le prb en demandant au code de
modifié le nom de l'onglet dès la modif de A1 ... seulement la valeur à aller
chercher est bien en B1 ...
Petit prb, si B1 est modifiée plusieurs fois et que A1 ne change pas ... je
suis planté ! C'est pour cela que je ne veux faire intervenir le test que sur
B1 et pas une autre cellule.

"michdenis" wrote:

Si tu modifies la valeur en B1, le nom de l'onglet de cette feuille devrait changer.


Comment modifies-tu la valeur que contient la cellule B1 ?


Salutations!



"Vader" a écrit dans le message de news:
Je viens de tester, mais je reste au même point : je dois aller valider la
cellule pour que l'onglet change de nom.

J'ai l'impression que le code ne fais que tester la validité du nom ...

Je cherche un code qui detecte le changement de valeur d'une cellule.

Dans le genre : on stock dans une variable la valeur de la cellule B1 à
l'ouverture de la feuille et à chaque changement, le code lance une mise à
jour de la valeur de l'onglet.

A savoir si un tel test est possible ... là.


"michdenis" wrote:

Bonjour Vader,

Dans le code module de ta feuille où B1 est modifié, copie le code suivant :

'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("B1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:

Bonjour,

J'ai un problème avec le titre de mes onglets : en fait j'utilise le code
suivant pour afficher en auto le nom de l'onglet (cf ci-dessous).

Cependant est-il possible de faire évoluer le texte de l'onglet dès que la
cellule est modifiée (de façon automatique) ?

Pour l'instant pour que l'onglet prenne la valeur de B641 je dois aller
revalider la cellule (F2 + Entrer). Nota : B641 évolue toute seule, par
formule.


Private Sub Worksheet_Change(ByVal Target As Range)
'Nommer la cellule qui donne la valeur à l'onglet
With Me.Range("B1")
If Not (Intersect(.Cells, Target) Is Nothing) Then
Sheet31.Name = .Value
'Attention : si la cellule qui donne la valeur à l'onglet est vide la
ligne ci-dessus renvera une erreur.
End If
End With
End Sub























Avatar
michdenis
Bonjour Vader,

Voici une façon de faire... et prend bien soin de lire les informations
accompagnant chaque procédure !


Dans la feuille où est ta cellule A1 et B1, copie cette procédure
dans son module feuille
'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A1").Address = Target.Address Then
MettreAJourNomFeuille Me.Name
End If

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


En prenant pour acquis que le tableau des données dont se sert ta formule
dans la cellule B1 est dans une autre feuille, copie cette procédure dans
la feuille module de ton tableau où se retrouve ta table des données.

Attention : -A-
dans cette procédure le mot "Plage" fait référence à une plage nommée
que tu auras défini et qui englobe ton tableau des données
Attention : -B-
VBComponents("Feuil1") Feuil1 refère au nom de l'objet "Feuille où est
ta formule en B1 que tu peux visualiser dans la fenêtre VBE
(visual basic editor), ce n'est pas le nom de l'onglet de la feuille

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim N As String
If Not Intersect(Range("Plage"), Target) Is Nothing Then
N = Sheets(Worksheets(ThisWorkbook.VBProject. _
VBComponents("Feuil1").Properties("Index")).Name).Name
MettreAJourNomFeuille N
End If

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

Dans un module standard, copie cette procédure :

'---------------------------------------
Sub MettreAJourNomFeuille(NomFeuille As String)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")

With Worksheets(NomFeuille)
If .Range("B1") <> "" Then
For Each arr In S
If InStr(1, .Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & .Range("B1").Address(0, 0)
Exit Sub
End If
Next
End If
End With

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



Salutations!





"Vader" a écrit dans le message de news:
Menu déroulant : Alors là ... je parle bien d'une liste, mais je la trouve
étrange, une "liste déroulante" classique (menu outils) est un object, or là
je suis en face d'une cellule (lorsque l'on clic sur elle, alors apparait un
bouton qui donne accès à la liste), de plus, cette "liste" se déplace comme
une cellule !!! D'ailleur je ne trouve pas comment modifier son format ou les
coordonnées de sa base de donnée.

Remarque elle a un super avantage : la cellule prend directement une valeur
texte ... (sur une liste classique, on a un chiffre). Je peut donc faire
prendre directement la valeur de A1 à une cellule, un onglet, ou ...

Par contre, je peut t'assurer que la modif de la liste provoque bien
Wk_change ... je m'en sert dans mon code actuel ...

C'est la modif d'une cellule sans intervention directe (humaine donc ;-) qui
ne déclanche pas Wk_change (Tu es obligé de faire une validation manuelle de
la cellule via F2 + ENTER sur la dite cellule).

Exemple :
Si je modifie A1 (je rentre le n° d'une scte, ex 000) ... B1 est modifiée en
auto via sa formule (ex : scte XX1). Là le code marche l'onglet prends la
valeur de B1 ... (l'onglet va s'appeller XX1) Yeap !!! VIctoire !!!

Par contre si l'utilisateur voit que la valeur B1 est fausse (en gros le nom
de sa scte est faux dans le listing - il va modifier le dit listing (remplace
XX1 par XX2) ... la fonction vlook qui va donner B1 voit la liste se modifier
et réagi ... op !!! B1 se modifie et là problème l'onglet reste sur la valeur
B1=XX1. SAUF si je fais un F2+ENTER sur B1.

Pour résoudre la chose, il faudrait donc tester les modifications de la
cellule B1 ... moi je vois ça sous la forme suivante : tu stock B1 dans une
variable et si la variable se modifie le code qui donne le nom de l'onglet
s'execute. Prb : Est-il possible de tester en continu une modif de cellule ?
Une boucle non-stop ?




Sinon,

"michdenis" wrote:


J'ai modifié B1 par A1

Par menu déroulant en A1 , tu veux dire "Une liste" de la commande "Validation"

Semble-t-il que sur certaines versions d'excel, la mise à jour d'une liste de validation ne provoque pas l'événement
Worksheet_Change ... Est-ce le cas pour ta version ? Quelle est ta version d'excel ?

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("A1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:
OK.

B1¶41

B641=vlook(....) recherche d'une valeur "texte" dans une base donnée.
Le critère de recherche de vlook provient de A1 (menu déroulant - que
l'utilisateur est obligé de selectionner (n° de sa scte).

En gros ça donne :
A1 : n° de la scte
B1 : Nom scte

NB : Je suis en Excel US. Je ne sais pas comment s'appelle pas fonction en
v. FR

Alors normalement l'utilisateur ne touche pas à la valeur B1 ... sauf si le
nom est erroné ou qu'il y a une procédure particulière chez lui (là il va
modifier le nom dans le listing Vlook, B1 se modifie en auto, mais pas
l'onglet) ... donc si je ne teste pas B1 ... je loupe la modif. (Et de là à
verifier les 70 titres de feuille ... dur).

"michdenis" wrote:

Et ta fonction (celle qui met à jour B1) est déclenchée de quelle façon ?


Salutations!


"Vader" a écrit dans le message de news:
beh à vrai dire ... B1 est modifiée par une fonction.

Et comme je ne veux pas que l'utilisateur final puisse la modifiée, l'onglet
doit pouvoir detecter son changement tout seul pour se mettre à jour.

Nota : C'est pour cela que j'ai contourné le prb en demandant au code de
modifié le nom de l'onglet dès la modif de A1 ... seulement la valeur à aller
chercher est bien en B1 ...
Petit prb, si B1 est modifiée plusieurs fois et que A1 ne change pas ... je
suis planté ! C'est pour cela que je ne veux faire intervenir le test que sur
B1 et pas une autre cellule.

"michdenis" wrote:

Si tu modifies la valeur en B1, le nom de l'onglet de cette feuille devrait changer.


Comment modifies-tu la valeur que contient la cellule B1 ?


Salutations!



"Vader" a écrit dans le message de news:

Je viens de tester, mais je reste au même point : je dois aller valider la
cellule pour que l'onglet change de nom.

J'ai l'impression que le code ne fais que tester la validité du nom ...

Je cherche un code qui detecte le changement de valeur d'une cellule.

Dans le genre : on stock dans une variable la valeur de la cellule B1 à
l'ouverture de la feuille et à chaque changement, le code lance une mise à
jour de la valeur de l'onglet.

A savoir si un tel test est possible ... là.


"michdenis" wrote:

Bonjour Vader,

Dans le code module de ta feuille où B1 est modifié, copie le code suivant :

'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("B1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:

Bonjour,

J'ai un problème avec le titre de mes onglets : en fait j'utilise le code
suivant pour afficher en auto le nom de l'onglet (cf ci-dessous).

Cependant est-il possible de faire évoluer le texte de l'onglet dès que la
cellule est modifiée (de façon automatique) ?

Pour l'instant pour que l'onglet prenne la valeur de B641 je dois aller
revalider la cellule (F2 + Entrer). Nota : B641 évolue toute seule, par
formule.


Private Sub Worksheet_Change(ByVal Target As Range)
'Nommer la cellule qui donne la valeur à l'onglet
With Me.Range("B1")
If Not (Intersect(.Cells, Target) Is Nothing) Then
Sheet31.Name = .Value
'Attention : si la cellule qui donne la valeur à l'onglet est vide la
ligne ci-dessus renvera une erreur.
End If
End With
End Sub























Avatar
Vader
Oufff !

Alors là tu te surpasse. J'essaye ça dès que j'ai le temps.

Merci,

Vad'

"michdenis" wrote:

Bonjour Vader,

Voici une façon de faire... et prend bien soin de lire les informations
accompagnant chaque procédure !


Dans la feuille où est ta cellule A1 et B1, copie cette procédure
dans son module feuille
'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A1").Address = Target.Address Then
MettreAJourNomFeuille Me.Name
End If

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


En prenant pour acquis que le tableau des données dont se sert ta formule
dans la cellule B1 est dans une autre feuille, copie cette procédure dans
la feuille module de ton tableau où se retrouve ta table des données.

Attention : -A-
dans cette procédure le mot "Plage" fait référence à une plage nommée
que tu auras défini et qui englobe ton tableau des données
Attention : -B-
VBComponents("Feuil1") Feuil1 refère au nom de l'objet "Feuille où est
ta formule en B1 que tu peux visualiser dans la fenêtre VBE
(visual basic editor), ce n'est pas le nom de l'onglet de la feuille

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim N As String
If Not Intersect(Range("Plage"), Target) Is Nothing Then
N = Sheets(Worksheets(ThisWorkbook.VBProject. _
VBComponents("Feuil1").Properties("Index")).Name).Name
MettreAJourNomFeuille N
End If

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

Dans un module standard, copie cette procédure :

'---------------------------------------
Sub MettreAJourNomFeuille(NomFeuille As String)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")

With Worksheets(NomFeuille)
If .Range("B1") <> "" Then
For Each arr In S
If InStr(1, .Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & .Range("B1").Address(0, 0)
Exit Sub
End If
Next
End If
End With

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



Salutations!





"Vader" a écrit dans le message de news:
Menu déroulant : Alors là ... je parle bien d'une liste, mais je la trouve
étrange, une "liste déroulante" classique (menu outils) est un object, or là
je suis en face d'une cellule (lorsque l'on clic sur elle, alors apparait un
bouton qui donne accès à la liste), de plus, cette "liste" se déplace comme
une cellule !!! D'ailleur je ne trouve pas comment modifier son format ou les
coordonnées de sa base de donnée.

Remarque elle a un super avantage : la cellule prend directement une valeur
texte ... (sur une liste classique, on a un chiffre). Je peut donc faire
prendre directement la valeur de A1 à une cellule, un onglet, ou ...

Par contre, je peut t'assurer que la modif de la liste provoque bien
Wk_change ... je m'en sert dans mon code actuel ...

C'est la modif d'une cellule sans intervention directe (humaine donc ;-) qui
ne déclanche pas Wk_change (Tu es obligé de faire une validation manuelle de
la cellule via F2 + ENTER sur la dite cellule).

Exemple :
Si je modifie A1 (je rentre le n° d'une scte, ex 000) ... B1 est modifiée en
auto via sa formule (ex : scte XX1). Là le code marche l'onglet prends la
valeur de B1 ... (l'onglet va s'appeller XX1) Yeap !!! VIctoire !!!

Par contre si l'utilisateur voit que la valeur B1 est fausse (en gros le nom
de sa scte est faux dans le listing - il va modifier le dit listing (remplace
XX1 par XX2) ... la fonction vlook qui va donner B1 voit la liste se modifier
et réagi ... op !!! B1 se modifie et là problème l'onglet reste sur la valeur
B1=XX1. SAUF si je fais un F2+ENTER sur B1.

Pour résoudre la chose, il faudrait donc tester les modifications de la
cellule B1 ... moi je vois ça sous la forme suivante : tu stock B1 dans une
variable et si la variable se modifie le code qui donne le nom de l'onglet
s'execute. Prb : Est-il possible de tester en continu une modif de cellule ?
Une boucle non-stop ?




Sinon,

"michdenis" wrote:


J'ai modifié B1 par A1

Par menu déroulant en A1 , tu veux dire "Une liste" de la commande "Validation"

Semble-t-il que sur certaines versions d'excel, la mise à jour d'une liste de validation ne provoque pas l'événement
Worksheet_Change ... Est-ce le cas pour ta version ? Quelle est ta version d'excel ?

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("A1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:
OK.

B1¶41

B641=vlook(....) recherche d'une valeur "texte" dans une base donnée.
Le critère de recherche de vlook provient de A1 (menu déroulant - que
l'utilisateur est obligé de selectionner (n° de sa scte).

En gros ça donne :
A1 : n° de la scte
B1 : Nom scte

NB : Je suis en Excel US. Je ne sais pas comment s'appelle pas fonction en
v. FR

Alors normalement l'utilisateur ne touche pas à la valeur B1 ... sauf si le
nom est erroné ou qu'il y a une procédure particulière chez lui (là il va
modifier le nom dans le listing Vlook, B1 se modifie en auto, mais pas
l'onglet) ... donc si je ne teste pas B1 ... je loupe la modif. (Et de là à
verifier les 70 titres de feuille ... dur).

"michdenis" wrote:

Et ta fonction (celle qui met à jour B1) est déclenchée de quelle façon ?


Salutations!


"Vader" a écrit dans le message de news:
beh à vrai dire ... B1 est modifiée par une fonction.

Et comme je ne veux pas que l'utilisateur final puisse la modifiée, l'onglet
doit pouvoir detecter son changement tout seul pour se mettre à jour.

Nota : C'est pour cela que j'ai contourné le prb en demandant au code de
modifié le nom de l'onglet dès la modif de A1 ... seulement la valeur à aller
chercher est bien en B1 ...
Petit prb, si B1 est modifiée plusieurs fois et que A1 ne change pas ... je
suis planté ! C'est pour cela que je ne veux faire intervenir le test que sur
B1 et pas une autre cellule.

"michdenis" wrote:

Si tu modifies la valeur en B1, le nom de l'onglet de cette feuille devrait changer.


Comment modifies-tu la valeur que contient la cellule B1 ?


Salutations!



"Vader" a écrit dans le message de news:

Je viens de tester, mais je reste au même point : je dois aller valider la
cellule pour que l'onglet change de nom.

J'ai l'impression que le code ne fais que tester la validité du nom ...

Je cherche un code qui detecte le changement de valeur d'une cellule.

Dans le genre : on stock dans une variable la valeur de la cellule B1 à
l'ouverture de la feuille et à chaque changement, le code lance une mise à
jour de la valeur de l'onglet.

A savoir si un tel test est possible ... là.


"michdenis" wrote:

Bonjour Vader,

Dans le code module de ta feuille où B1 est modifié, copie le code suivant :

'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("B1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:

Bonjour,

J'ai un problème avec le titre de mes onglets : en fait j'utilise le code
suivant pour afficher en auto le nom de l'onglet (cf ci-dessous).

Cependant est-il possible de faire évoluer le texte de l'onglet dès que la
cellule est modifiée (de façon automatique) ?

Pour l'instant pour que l'onglet prenne la valeur de B641 je dois aller
revalider la cellule (F2 + Entrer). Nota : B641 évolue toute seule, par
formule.


Private Sub Worksheet_Change(ByVal Target As Range)
'Nommer la cellule qui donne la valeur à l'onglet
With Me.Range("B1")
If Not (Intersect(.Cells, Target) Is Nothing) Then
Sheet31.Name = .Value
'Attention : si la cellule qui donne la valeur à l'onglet est vide la
ligne ci-dessus renvera une erreur.
End If
End With
End Sub

























Avatar
Vader
Beh non ... :-(

Et là je comprends rien de rien ... bon c'est pas grave, on s'arrete là j'ai
réussi à créer une macro qui me donne le résultat voulu et j'ai quelque peu
modifier la feuille pour que ça colle bien ...

J'ai tout inversé ... maintenant on selectionne le Nom de scte (et plus le
n°) ... comme ça, si le nom est erroné ils vont le modif dans la liste et
pour que la modif soit visible dans la selection, ils doivent reselectionner
leur Nom de scte ... du coup à chaque modif il y a revalidation et le code
marche ...

En tout cas merci pour ton aide.

Vad'
"Vader" wrote:

Oufff !

Alors là tu te surpasse. J'essaye ça dès que j'ai le temps.

Merci,

Vad'

"michdenis" wrote:

Bonjour Vader,

Voici une façon de faire... et prend bien soin de lire les informations
accompagnant chaque procédure !


Dans la feuille où est ta cellule A1 et B1, copie cette procédure
dans son module feuille
'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("A1").Address = Target.Address Then
MettreAJourNomFeuille Me.Name
End If

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


En prenant pour acquis que le tableau des données dont se sert ta formule
dans la cellule B1 est dans une autre feuille, copie cette procédure dans
la feuille module de ton tableau où se retrouve ta table des données.

Attention : -A-
dans cette procédure le mot "Plage" fait référence à une plage nommée
que tu auras défini et qui englobe ton tableau des données
Attention : -B-
VBComponents("Feuil1") Feuil1 refère au nom de l'objet "Feuille où est
ta formule en B1 que tu peux visualiser dans la fenêtre VBE
(visual basic editor), ce n'est pas le nom de l'onglet de la feuille

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim N As String
If Not Intersect(Range("Plage"), Target) Is Nothing Then
N = Sheets(Worksheets(ThisWorkbook.VBProject. _
VBComponents("Feuil1").Properties("Index")).Name).Name
MettreAJourNomFeuille N
End If

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

Dans un module standard, copie cette procédure :

'---------------------------------------
Sub MettreAJourNomFeuille(NomFeuille As String)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")

With Worksheets(NomFeuille)
If .Range("B1") <> "" Then
For Each arr In S
If InStr(1, .Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & .Range("B1").Address(0, 0)
Exit Sub
End If
Next
End If
End With

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



Salutations!





"Vader" a écrit dans le message de news:
Menu déroulant : Alors là ... je parle bien d'une liste, mais je la trouve
étrange, une "liste déroulante" classique (menu outils) est un object, or là
je suis en face d'une cellule (lorsque l'on clic sur elle, alors apparait un
bouton qui donne accès à la liste), de plus, cette "liste" se déplace comme
une cellule !!! D'ailleur je ne trouve pas comment modifier son format ou les
coordonnées de sa base de donnée.

Remarque elle a un super avantage : la cellule prend directement une valeur
texte ... (sur une liste classique, on a un chiffre). Je peut donc faire
prendre directement la valeur de A1 à une cellule, un onglet, ou ...

Par contre, je peut t'assurer que la modif de la liste provoque bien
Wk_change ... je m'en sert dans mon code actuel ...

C'est la modif d'une cellule sans intervention directe (humaine donc ;-) qui
ne déclanche pas Wk_change (Tu es obligé de faire une validation manuelle de
la cellule via F2 + ENTER sur la dite cellule).

Exemple :
Si je modifie A1 (je rentre le n° d'une scte, ex 000) ... B1 est modifiée en
auto via sa formule (ex : scte XX1). Là le code marche l'onglet prends la
valeur de B1 ... (l'onglet va s'appeller XX1) Yeap !!! VIctoire !!!

Par contre si l'utilisateur voit que la valeur B1 est fausse (en gros le nom
de sa scte est faux dans le listing - il va modifier le dit listing (remplace
XX1 par XX2) ... la fonction vlook qui va donner B1 voit la liste se modifier
et réagi ... op !!! B1 se modifie et là problème l'onglet reste sur la valeur
B1=XX1. SAUF si je fais un F2+ENTER sur B1.

Pour résoudre la chose, il faudrait donc tester les modifications de la
cellule B1 ... moi je vois ça sous la forme suivante : tu stock B1 dans une
variable et si la variable se modifie le code qui donne le nom de l'onglet
s'execute. Prb : Est-il possible de tester en continu une modif de cellule ?
Une boucle non-stop ?




Sinon,

"michdenis" wrote:


J'ai modifié B1 par A1

Par menu déroulant en A1 , tu veux dire "Une liste" de la commande "Validation"

Semble-t-il que sur certaines versions d'excel, la mise à jour d'une liste de validation ne provoque pas l'événement
Worksheet_Change ... Est-ce le cas pour ta version ? Quelle est ta version d'excel ?

'------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("A1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:
OK.

B1¶41

B641=vlook(....) recherche d'une valeur "texte" dans une base donnée.
Le critère de recherche de vlook provient de A1 (menu déroulant - que
l'utilisateur est obligé de selectionner (n° de sa scte).

En gros ça donne :
A1 : n° de la scte
B1 : Nom scte

NB : Je suis en Excel US. Je ne sais pas comment s'appelle pas fonction en
v. FR

Alors normalement l'utilisateur ne touche pas à la valeur B1 ... sauf si le
nom est erroné ou qu'il y a une procédure particulière chez lui (là il va
modifier le nom dans le listing Vlook, B1 se modifie en auto, mais pas
l'onglet) ... donc si je ne teste pas B1 ... je loupe la modif. (Et de là à
verifier les 70 titres de feuille ... dur).

"michdenis" wrote:

Et ta fonction (celle qui met à jour B1) est déclenchée de quelle façon ?


Salutations!


"Vader" a écrit dans le message de news:
beh à vrai dire ... B1 est modifiée par une fonction.

Et comme je ne veux pas que l'utilisateur final puisse la modifiée, l'onglet
doit pouvoir detecter son changement tout seul pour se mettre à jour.

Nota : C'est pour cela que j'ai contourné le prb en demandant au code de
modifié le nom de l'onglet dès la modif de A1 ... seulement la valeur à aller
chercher est bien en B1 ...
Petit prb, si B1 est modifiée plusieurs fois et que A1 ne change pas ... je
suis planté ! C'est pour cela que je ne veux faire intervenir le test que sur
B1 et pas une autre cellule.

"michdenis" wrote:

Si tu modifies la valeur en B1, le nom de l'onglet de cette feuille devrait changer.


Comment modifies-tu la valeur que contient la cellule B1 ?


Salutations!



"Vader" a écrit dans le message de news:

Je viens de tester, mais je reste au même point : je dois aller valider la
cellule pour que l'onglet change de nom.

J'ai l'impression que le code ne fais que tester la validité du nom ...

Je cherche un code qui detecte le changement de valeur d'une cellule.

Dans le genre : on stock dans une variable la valeur de la cellule B1 à
l'ouverture de la feuille et à chaque changement, le code lance une mise à
jour de la valeur de l'onglet.

A savoir si un tel test est possible ... là.


"michdenis" wrote:

Bonjour Vader,

Dans le code module de ta feuille où B1 est modifié, copie le code suivant :

'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

Dim S As Variant
S = Array("[", "*", "?", ":", "/", "", "]")
If Range("B1").Address = Target.Address Then
If Range("B1") <> "" Then
For Each arr In S
If InStr(1, Range("B1"), arr, vbTextCompare) <> 0 Then
MsgBox "impossible de renommer feuille : " & _
"à cause de ce caractère : " & arr & _
" présent en " & Range("B1").Address(0, 0)
Exit Sub
End If
Next
Me.Name = Range("B1")
End If
End If

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


Salutations!




"Vader" a écrit dans le message de news:

Bonjour,

J'ai un problème avec le titre de mes onglets : en fait j'utilise le code
suivant pour afficher en auto le nom de l'onglet (cf ci-dessous).

Cependant est-il possible de faire évoluer le texte de l'onglet dès que la
cellule est modifiée (de façon automatique) ?

Pour l'instant pour que l'onglet prenne la valeur de B641 je dois aller
revalider la cellule (F2 + Entrer). Nota : B641 évolue toute seule, par
formule.


Private Sub Worksheet_Change(ByVal Target As Range)
'Nommer la cellule qui donne la valeur à l'onglet
With Me.Range("B1")
If Not (Intersect(.Cells, Target) Is Nothing) Then
Sheet31.Name = .Value
'Attention : si la cellule qui donne la valeur à l'onglet est vide la
ligne ci-dessus renvera une erreur.
End If
End With
End Sub

















1 2