XL 2010 macro et mise a jour cellule

poipoi

XLDnaute Occasionnel
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

  • abc.xlsm
    18.6 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
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 ..."
 

poipoi

XLDnaute Occasionnel
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!!)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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:p4.
Mais sans une mémorisation préalable, je ne vois pas comment VBA peut décider.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Copie de Recettes des caisses_Marché 2020-1-1(essai).xlsm
    455.2 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 148
Membres
103 131
dernier inscrit
diaz.evelyne17