Macro automatique

Résolu/Fermé
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 - 14 janv. 2015 à 14:59
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 - 17 janv. 2015 à 19:12
Bonjour,

J'ai fais une macro qui me permet de nommer mes feuilles en fonction d'une cellule.
Je souhaiterai maintenant qu'elles se renomment automatiquement lors d'un changement de la cellule.

Merci d'avance.

4 réponses

via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
15 janv. 2015 à 01:18
Bonsoir

En supposant les noms des onglets dans la colonne B de Feuil1

Dans le Worksheet de la Feuil 1 mettre la macro suivante (à adapter à ton fichier :

Public ancien As String
' AU CHANGEMENT DE SELECTION d'une cellule de la feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' gestion erreur (selection plusieurs cellules par ex)
On Error Resume Next
' si pas en colonne B sortie
If Target.Column <> 2 Then Exit Sub
' recupere la valeur existant dans la cellule
ancien = Target.Value
End Sub

'A L'ENTREE D'UNE VALEUR dans une cellule 
Private Sub Worksheet_Change(ByVal Target As Range)
' si pas en colonne B sortie
If Target.Column <> 2 Then Exit Sub
' recupere valeur qui vient d'être entrée dans cellule
nouveau = Target.Value
'boucle sur toutes les feuilles du classeur
For n = 1 To Sheets.Count
' remplace ancien nom par le nouveau 
If Sheets(n).Name = ancien Then Sheets(n).Name = nouveau
Next
' vide la variable ancien
ancien = ""
End Sub



Cdlmnt
0
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 2
15 janv. 2015 à 20:57
Bonsoir,
J'ai rentré votre formule, mais cela ne fonctionne pas.
J'ai un message d'erreur "erreur de compilation : Etiquette non définie" et il me souligne la première ligne Private Sub Worksheet_SelectionChange(ByVal Target As Range).

Cordialement.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738 > Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017
15 janv. 2015 à 22:09
Bonsoir

Tu as sans doute d'autres macros dans le même classeur avec Option Explicit qui demande de déclarer toutes les variables et comme dans ma macro je n'ai déclaré que la variable ancien pas la variable nouveau ! Le titre de la macro qui dysfonctionne est surligné c'est normal mais l'endroit précis du dysfonctionnement doit l'être aussi en l'occurrence le mot nouveau pour indiquer où est la variable non définie

Rajoutes en tête de macro la ligne
Public nouveau As String

Si ça ne fonctionne toujours pas , regarder dans la macro ce qui est souligné d'autres lorsque survient l'erreur

Cdlmnt
0
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 2
16 janv. 2015 à 19:00
Bonsoir,
Tout d'abord merci de prendre du temps pour m'aider.
Cela ne fonctionne toujours pas, j'ai essayé mais en vain.
J'ai bien rajouté la ligne comme indiqué et là il ne m'indique pas de message d'erreur et ne me souligne rien.
Je ne comprends pas.

Ma macro est Sub Feuilles()
Sheets (2).Name = Range ("Articles!D2".Value
ainsi de suite (j'ai 30 feuilles)
Ensuite j'ai rentré ta macro.

Encore merci.

Coridalement.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
16 janv. 2015 à 19:47
Bonsoir Olivier

Si je comprends bien tu nommes des 30 feuilles d'après les valeurs contenues dans 30 cellules de la feuille Articles ? (Au passage si le nom pour la feuille 2 est en D2, le nom pour la feuille 3 est en D3 etc tu peux raccourcir ta macro de 30 lignes par une boucle For Next qui incrémentera une valeur n qui dans une seule ligne attribue à la bonne feuille le bon nom Sheets (n).Name = Range ("Articles!D" & n).Value )

Ensuite tu voudrais que chaque fois que tu changes un nom dans ta feuille Articles le nom de la feuille correspondante soit changé automatiquement ?

Donc ma macro correspond bien à ce que tu cherches mais il faut bien :
- d'une part que le n° corresponde bien à la colonne où sont tes données dans les 2 lignes If Target.Column <> 2 Then Exit Sub j'avais mis 2 comme exemple pour la colonne B mais toi si tes données sont dans la colonne D c'est 4 qu'il faut mettre
- d'autre part il faut bien mettre la macro non pas à la suite de la tienne qui doit être dans un Module mais dans le worksheet de la feuille Articles, dans l'editeur VBA selectionner la feuille Articles dans l'arborescence à gauche par double clic, coller la macro dans la page vierge de droite

Si ça ne fonctionne toujours pas post une exemple allégé et anonymé de ton fichier sur c joint.com et reviens m'indiquer le lien fourni, je regarderai ça

Cdlmnt


0
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 2
17 janv. 2015 à 13:35
Bonjour,

Je n'y arrive toujours pas, j'ai bien suivi toutes les instructions mais cela ne fonctionne pas, je me casse la tête.
Comme demandé je post le lien de mon projet.
https://www.cjoint.com/?3ArnNuOKHhc

Cordialement.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738 > Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017
17 janv. 2015 à 18:01
Bonjour

Le lien ne fonctionne pas, peux tu retelecharger le fichier et m'indiquer le nouveau lien ?
Dans l'attente

Cdlmnt
0
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 2
17 janv. 2015 à 17:53
Bonjour,

J'ai oublié peut être d'être plus explicite, ce que je souhaiterai s'est que les noms des feuilles correspondent aux cellules de D2 à AG2.

Cordialement.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
17 janv. 2015 à 18:10
Re

Bon alors pas d'affolement, normal que ma macro ne fonctionne pas elle est prévue pour des valeurs sur une même colonne et d'après ton dernier message tes valeurs sont sur la même ligne !
Il faut donc adapter les macros en ce sens :

Public ancien As String
Public nouveau As String
' AU CHANGEMENT DE SELECTION d'une cellule de la feuille
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' gestion erreur (selection plusieurs cellules par ex)
On Error Resume Next
' si pas en colonne B sortie
If Not Intersect(Target, Range("D2:AG2")) Is Nothing Then
' recupere la valeur existant dans la cellule
ancien = Target.Value
End If
End Sub

'A L'ENTREE D'UNE VALEUR dans une cellule
Private Sub Worksheet_Change(ByVal Target As Range)
' si pas en colonne B sortie
If Not Intersect(Target, Range("D2:AG2")) Is Nothing Then
' recupere valeur qui vient d'être entrée dans cellule
nouveau = Target.Value
'boucle sur toutes les feuilles du classeur
For n = 1 To Sheets.Count
' remplace ancien nom par le nouveau
If Sheets(n).Name = ancien Then Sheets(n).Name = nouveau
Next
End If
' vide la variable ancien
ancien = ""
End Sub


Cdlmnt
0
Olivier2313 Messages postés 29 Date d'inscription dimanche 11 janvier 2015 Statut Membre Dernière intervention 17 novembre 2017 2 > via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024
17 janv. 2015 à 19:12
Bonsoir,

Yes perfect.
Cela fonctionne maintenant, vraiment un grand merci pour tout.

Cordialement
0