Se connecter avec
S'enregistrer | Connectez-vous

Excel : donner des noms aux feuilles à partir de cellules de la première feuille

Dernière réponse : dans Programmation
Partagez

Bonjour,
Je suis nouveau sur ce forum bien que j'ai déjà passé pas mal de temps à fouiner en quête d'une réponse à ma question. J'ai notament trouvé le poste "macro créant une feuille et lui donnant le nom d'1 cellule" mais je n'ai pas réussi à l'adpater à mon problème (faut dire que je n'y connais rien en VBA !).
Il s'agit donc de créer une macro qui nomme automatiquement une trentaine de feuilles (déjà crées) à partir des cellules de la première colonne de ma première feuille (feuil1!A2 donne le nom à la 2°feuille, feuil1!A3 à la 3° feuille etc.) .
Les essais que j'ai déjà tentés fonctionnent à ceci près que le nom des feuilles ne s'actualise pas comme je le voudrais. L'idéal serait que ce nom de feuille s'actualise au moment où je valide la saisie ce même nom dans la cellule de la première feuille.
J'espère avoir été assez clair. Si il faut un fichier exemple, je peux vous le faire passer sans problème.
Merci d'avance !
Sylvestre

Un petit extrait de l'aide vba devrait t'aider:

Citation :

Change Event
See AlsoApplies ToExampleSpecificsOccurs when cells on the worksheet are changed by the user or by an external link.

Private Sub Worksheet_Change(ByVal Target As Range)
Target The changed range. Can be more than one cell.

Remarks
This event doesn't occur when cells change during a recalculation. Use the Calculate event to trap a sheet recalculation.

Example
This example changes the color of changed cells to blue.

Private Sub Worksheet_Change(ByVal Target as Range)
Target.Font.ColorIndex = 5
End Sub

Merci pour ta réponse.
Il semblerait que ce soit des changements effectués sur la même feuille, comme dans l'exemple (si mon anglais approximatif ne me trahit pas). Ou pas un lien extérieur mais là je ne vois pas comment faire.
Le code ci-dessous fonctionne mais la validation du nom ne se fait que quand je valide la cellule A1 de la feuille qui change de nom. Or, je voudrais que cette validation se fasse quand la cellule d'une autre feuille est validée :
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  2. If Intersect(Target, Range("A1")) Is Nothing Then: Exit Sub
  3. test = Format(Range("A1"), "dd-mm-yy")
  4. ActiveSheet.Name = test
  5. End Sub

C'est un copier/coller que je n'ai pas réussi à adapter (notament à cause du format dd-mm-yy) qui n'a rien à voir avec mon problème.
Sylvestre

D'après ce que j'ai compris tu as une seule feuille source, il faut donc utiliser la fonction change de cette feuille, puis en fonction de la ligne de "Target" tu change le nom de la feuille cible.

exemple:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Row <= Sheets.Count Then
  3. Sheets(Target.Row).Name = "ce que tu veux " & Target.Value
  4. End If
  5. End Sub

cette fonction doit être déclarée dans l'objet Feuil1 pour toi.
Contenus similaires

Il y a en effet une feuille source. J'ai collé ton code dans le "worsheet -> change" de la feuille source mais ça ne marche pas. Mais je suis pas sûr de m'être bien expliqué alors je joins un exemple. Il s'agit de nommer automatiquement les feuilles à partir des cellules A2, A3 etc. de la feuille SAISIE.

MErci.
Sylvestre
  • zeb a édité ce message

Alors c'est exactement ce que fait mon code ... (sauf que tu peux supprimer "ce que tu veux " et rajouter un filtre sur la colonne).

Tu es sur de l'avoir coller au bon endroit ?

Que ce passe-t'il avec le code que je t'ai donné ?

Essaie de rajouter un
  1. msgbox "salut"

Pour être sur que le code de la macro est bien executer ...

Ca marche ! Merci beaucoup. En fait je pense qu'il y avait deux problèmes :
1) Je n'étais pas passé à la ligne après le Then et il me renvoyait une erreur sur le bloc If (c'est possible ça ?)
2) Je ne savais quoi mettre dans le "Ce que tu veux" :-) J'ai finalement mis Range("A1") et ça marche. D'ailleurs, pour info, pourquoi ça marche vu que j'ai mis Range("A1") alors que ce n'est pas A1 qu'il faut copier ?
Un gand merci à toi drul !
Sylvestre

ça marche parce que range("A1") est vide je suppose.

En fait fallit juste supprimer
  1. "ce que tu veux " &


et ne garder que
  1. Sheets(Target.Row).Name = Target.Value

edit: P.S. attention, ce code ne tiens pas compte de la colonne que tu modifies, je te laisse le soin de rajouter cette condition.

Si tu es satisfait, selectionne une meilleure réponse stp
  • drul a édité ce message

Oups, en effet, je viens de vérifier à l'instant qu'en changeant la valeur d'une autre case, ça change à nouveau le nom :-(
Je crois avoir trouvé : il suffit de rajouter dans la condition du If "And target.column=1". Merci de m'avoir poussé à fouiner ;-) Je continue mes tests et je reviens selctionner "meilleur réponse".
A+
Sylvestre

Bonjour à tous,
Désolé pour tout ce temps passé sans nouvelles de ma part.
Je viens de refaire des tests. Ils sont concluant dans l'ensemble. Il me reste deux problèmes à régler :
1) Si on copie colle des données dans les cases de la première feuille qui sont censées donner le nom aux feuilles suivantes, ces feuilles ne changent pas de nom. Il faut rentrer dans chaque cellule et valider. Y a t'il un moyen que les noms changent juste après le copier/coller ?
2) Si on afface le contenu d'une case de la première feuille qui est censé donné le nom à une autre feuille, y a un bug... Normal puisque le nom d'une feuille ne peut pas être "vide". C'est pas génant plus que ça mais bon, c'est pour améliorer ;-)
Pour finir, je n'ai pas retrouvé le lien "meilleur réponse" pour cloturer ce post. Je l'avais pourtant vu après ton message drul...
Merci pour votre aide.
A+
Sylvestre

Salut, ce soft est pensé pour fonctionner uniquement sur la modification d'une seule ligne a la fois, Lors de ton copier coller, modiefierais-tu plusieures cellules d'un seul coup ?

Pour le point 2, un simple
  1. if target.value <> "" then ...

devrais suffire

Merci ! Le point 2 est en effet résolu maintenant.
Et oui, mon copier coller modifie plusieurs cellule d'un coup ! C'est vrai que j'avais pas été très clair sur ce point ;-)
Sylvestre

Alors tu devrais pouvoir t'en sortir avec un

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. Dim i As Integer
  3. If Target.Column = 1 Then
  4. For i = Target.Row To Target.Rows.Count + Target.Row
  5. Cells(i, 2).Value = Cells(i, 1).Value
  6. Next
  7. End If
  8. End Sub


edit: ceci est un exemple, a toi de l'adapter à tes besoins
  • drul a édité ce message
  • drul a édité ce message

Bon, me revoilà !
Je viens de me repencher sur ton code... Difficile pour un novice comme moi de s'y remettre après une semaine "d'inactivité mentale" :-) La montagne, ça doit rouiller le cerveau. A moins qu'il ne l'était avant ? Sans doute :-( Bref, j'ai du mal à insérer ton code dans le mien. Voici donc ce que j'avais au "départ" :
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If (Target.Row - 1) <= Sheets.Count And Target.Column = 1 And Target.Row <> 1 And Target.Value <> "" Then
  3. Sheets(Target.Row - 1).Name = Target.Value
  4. End If
  5. End Sub

Ceci ayant été possible en bidouillant tes propositions succéssives bien sûr. Je crois comprendre que ton code copie le contenu des cellules de la première colone pour les mettre dans la deuxième. Je suppose que ça permettra de nommer les feuilles après le copier coller. Mais après plusieurs essais, je n'ai pas réussi... Un petit coup de pouce supplémentaire ?
Merci
Sylvestre

l'intérêt de mon code est la boucle, elle te permet d'accéder au contenu de chaque ligne modifiée par ton copier coller, je te laisse le soin d'essayer de l'adapter à ton code. (j'ai pas accès a excel pendant 3 semaines)

Drul n'a pas Excel, mais il a Internet apparemment. Il pourra quand même t'aider.

Remarque, moi aussi, je le peux :

1)
Ouvre un nouveau classeur.
Mets X Y et Z dans les cellules A1 B1 et C1 de la feuille 1.

Mets ce bout de code dans le code de la feuille 1
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. MsgBox Target.Address
  3. End Sub


Sélectionne les cellules A1 à C1.
Copie ces cellules dans le presse-papier
Positionne-toi sur la cellule I8 de ta feuille 1.
Colle ce qu'il y a dans le presses-papier.

Qu'observes-tu ?

2)
Va lire l'aide sur For Each dans l'aide d'Excel.

3)
Trouve un rapport entre 1) et 2).


Et voilà, bonnes vacances !

Bonjour
Ce sujet m'a énormément aidé pour avancer dans une problème identique sur excel.
Sauf que moi, je fais un manip identique pour des classes, dans une école, donc pour gagner du temps, j'ai besoin de faire un copier-coller des listes sur ma première feuille. Est-ce possible ? Si oui, pouvez-vous me dire comment faire ? Je ne connais pratiquement pas le VBA.

Merci beaucoup.
Posez votre question