Macro automatique

Résolu
Olivier2313 Messages postés 30 Statut Membre -  
Olivier2313 Messages postés 30 Statut Membre -
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. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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. Olivier2313 Messages postés 30 Statut Membre 2
       
      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
      1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Olivier2313 Messages postés 30 Statut Membre
         
        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
  2. Olivier2313 Messages postés 30 Statut Membre 2
     
    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
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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. Olivier2313 Messages postés 30 Statut Membre 2
       
      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
      1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759 > Olivier2313 Messages postés 30 Statut Membre
         
        Bonjour

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

        Cdlmnt
        0
  4. Olivier2313 Messages postés 30 Statut Membre 2
     
    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. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      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
      1. Olivier2313 Messages postés 30 Statut Membre 2 > via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention  
         
        Bonsoir,

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

        Cordialement
        0