XL 2010 macro et mise a jour cellule

  • Initiateur de la discussion Initiateur de la discussion poipoi
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

poipoi

XLDnaute Impliqué
bonjour le forum
quelqu'un aurait il un bout de solution (ou même complète !!)
dans le fichier joint: je voudrais que chaque changement du contenu des cellules A1 à A3 de feuil1 entraine automatiquement le changement du nom des onglets feuil2, feuil3...
j'ai cette procédure placée dans chaque feuille
VB:
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("a1")) Is Nothing Then
Target.Parent.Name = Target.Value
End If

End Sub

mais elle ne fonctionne que si je reviens sur A1 de chaque feuille pour valider..
oui, je suis un peu brouillon dans mes explications!!
avez-vous une idée.... grand merci
 

Pièces jointes

Bonjour Poipoi,
Si je me réfère à vos explications, seule la feuille1 devrait avoir du code. Or dans votre fichier toutes les feuilles ont leur code sauf Feuille1.
Dans feuille 1 vous devriez avoir :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("a1:a3")) Is Nothing Then
      ... code ....
   End If
End Sub
"... chaque changement du contenu des cellules A1 à A3 de feuil1 entraine automatiquement ..."
 
merci Sylvanu
le fichier sur lequel je voudrais voir fonctionner cette procédure est très lourd (2 MO) car mes capacité en VBA et XL sont proches de 0.
(même zippé il garde ce même poids... si vous avez une astuce)

Ce fichier est à destination de petites associations locales, afin de gérer les recettes lors de manifestations.
C'est au regard de ce qui est proposé sur le forum, de piètre qualité mais c'est suffisant pour nous!!

Donc, pour une manifestation il existe des postes qui génèrent des recettes (ou déficits). Ils ont répertoriés dans la feuille "Répartition" de L4:Q4
et je voudrais que chaque changement de nom de poste, modifie le nom de l'onglet de la feuille correspondante ..
donc le code de la procédure doit pouvoir "s'adapter" à chaque changement !! (oula c'est confus ça!!)
 
J'ai un petit souci :
J'ai une feuille Bar dont le nom est en M4.
Je change Bar en Bistrot. Comment faire pour que le VBA sache à ce moment que c'est la feuille Bar qu'il doit modifier, puisque le mot Bar ne figure plus dans la liste. Il ne peut pas en plus le déduire par les manquants puisque d'autre feuilles sont présentes comme Recap auquel il ne doit pas toucher.
On peut facilement lire tous les noms de feuilles et les mettre en mémoire.
On peut facilement liste L4😛4.
Mais sans une mémorisation préalable, je ne vois pas comment VBA peut décider.
 
Accepteriez vous que les noms soient 1- Buvette, 2-Bar ... dans ce cas ce serait simple, il suffirait que reperer la feuille s'appelant 1-xxx et de remplacer le nom.
Autre solution plus complexe, mettre un module dans Thisworksheet qui mémorise les noms de feuilles déclarées en public. Puis ensuite de faire une recherche.
 
J'ai mis ça dans la feuille répartition :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("L4:P4")) Is Nothing Then ' Intercepte une modification dans L4P4
    Dim Feuille As Worksheet
    NomFeuille = Target.Value                               ' Récupère le nom qui vient d'être changé
    NoFeuille = Left(NomFeuille, 1)                         ' Extrait le premier caractère, soit le numéro
    FeuilleExiste = False
    For Each Feuille In Worksheets                          ' Pour chaque feuille
        If Left(Feuille.Name, 1) = NoFeuille Then           ' Regarde si le premier caractère est bien celui recherché
            Worksheets(Feuille.Name).Name = NomFeuille      ' Si oui, on change le nom de la feuille
            Exit Sub                                        ' Après ça, on sort.
        End If
    Next Feuille
   End If
End Sub
Ca à l'air de marcher. Il faut que les noms dans L4P4 commencent par 1 à 9.
 

Pièces jointes

Re,
Je l'ai testé sur le fichier que je vous ai envoyé, et ça marche. Mais sur le votre ça coince.
Je n'avais pas déclaré les variables et vous avez mis option explicit. D'où l'erreur. A remplacer par :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("L4:Q4")) Is Nothing Then ' Intercepte une modification dans L4P4
    Dim Feuille As Worksheet
    Dim NomFeuille, NoFeuille
    NomFeuille = Target.Value                               ' Récupère le nom qui vient d'être changé
    NoFeuille = Left(NomFeuille, 1)                         ' Extrait le premier caractère, soit le numéro
    For Each Feuille In Worksheets                          ' Pour chaque feuille
        If Left(Feuille.Name, 1) = NoFeuille Then           ' Regarde si le premier caractère est bien celui recherché
            Worksheets(Feuille.Name).Name = NomFeuille      ' Si oui, on change le nom de la feuille
            Exit Sub                                        ' Après ça, on sort.
        End If
    Next Feuille
   End If
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
243
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
479
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
317
Réponses
7
Affichages
163
Réponses
4
Affichages
427
Réponses
14
Affichages
468
Retour