Macro automatique

Résolu
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

  1. 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
    1. 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
    2. @via55Bonsoir,

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

      Cordialement
      0
  2. 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
    1. 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
    2. @Olivier2313Bonjour

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

      Cdlmnt
      0
  3. 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
    1. 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
      1. 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
      2. @Olivier2313Bonsoir

        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