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

sylvestre81

Nouveau membre
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
 

drul

Obscur pro du hardware
Staff
Un petit extrait de l'aide vba devrait t'aider:

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
 

sylvestre81

Nouveau membre
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 :
CSS:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then: Exit Sub
test = Format(Range("A1"), "dd-mm-yy")
ActiveSheet.Name = test
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
 

drul

Obscur pro du hardware
Staff
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:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row <= Sheets.Count Then
    Sheets(Target.Row).Name = "ce que tu veux " & Target.Value
End If
End Sub
cette fonction doit être déclarée dans l'objet Feuil1 pour toi.
 

sylvestre81

Nouveau membre
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.
Vous devez être connecté pour voir les images.

MErci.
Sylvestre
 

drul

Obscur pro du hardware
Staff
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
Code:
msgbox "salut"
Pour être sur que le code de la macro est bien executer ...
 

sylvestre81

Nouveau membre
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
 

drul

Obscur pro du hardware
Staff
ça marche parce que range("A1") est vide je suppose.

En fait fallit juste supprimer
Code:
"ce que tu veux " &

et ne garder que
Code:
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
 

sylvestre81

Nouveau membre
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
 

sylvestre81

Nouveau membre
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
 

drul

Obscur pro du hardware
Staff
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
Code:
if target.value <> "" then ...
devrais suffire
 

sylvestre81

Nouveau membre
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
 

drul

Obscur pro du hardware
Staff
Alors tu devrais pouvoir t'en sortir avec un

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  Dim i As Integer
  If Target.Column = 1 Then
    For i = Target.Row To Target.Rows.Count + Target.Row
      Cells(i, 2).Value = Cells(i, 1).Value
    Next
  End If
End Sub

edit: ceci est un exemple, a toi de l'adapter à tes besoins
 

sylvestre81

Nouveau membre
Merci ! Pas le temps de tester tout ça aujourd'hui (je pars en vacances). RDv dans une semaine pour le verdict final !!
Merci encore.
Sylvestre
 

sylvestre81

Nouveau membre
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" :
C++:
Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Row - 1) <= Sheets.Count And Target.Column = 1 And Target.Row <> 1 And Target.Value <> "" Then
        Sheets(Target.Row - 1).Name = Target.Value
    End If
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
 

drul

Obscur pro du hardware
Staff
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)
 

sylvestre81

Nouveau membre
Oui bonnes vacances à drull. Zeb tu vas pouvoir le remplacer alors ? :) Parceque malgré toute ma bonne volonté, je crois que j'ai atteint mes limites :(
 

zeb

Modérateur
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
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox Target.Address
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 !
 

informacyde

Nouveau membre
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.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 059
Membres
1 586 285
Dernier membre
LeFront
Partager cette page
Haut