XL 2016 Renommer une feuille en fonction d'une cellule d'autre feuille

Nando71

XLDnaute Nouveau
Bonjour

Je bloque sur le renommage automatique des feuilles dans certaines conditions. Petite explication mon classeur comporte initialement 3 onglets Tableau de bord, Synthèse et Feuille Type. Dès que je rempli la col C et enter de la feuille Synthèse une feuille est créer et ainsi de suite.

Mon problème est le suivant je n’arrive pas à renommer les feuilles en fonction de certaines cellules de la feuille TB. Je souhaite renommer les feuilles correspondantes dès que j’insère une date dans les cellules E9 à E39 du TB. Le nom de l’onglet doit faire référence aux cellules A2 et A3 de ce même onglet.

Merci pour vos solutions
 

Pièces jointes

  • Décompte.xlsm
    152.4 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Nando,
Lorsque vous faites Call Creer_Supprimer(Target) c'est la valeur de la cellule target qui est utilisée, non son adresse.
Dans la PJ j'ai fait au niveau de Worksheet_Change :
VB:
Call Creer_Supprimer(Target.Address)
Puis au niveau de Creer_Supprimer :
Code:
Sub Creer_Supprimer(Adresse)
puis
Set Valeur = Sheets("Synthèse").Range(Adresse)
De cette façon Valeur représente une adresse, et non une valeur.

Cela donne quand même une erreur sur Numérodematricule = Valeur.Offset(0, 9) car Numérodematricule est déclaré comme Long alors que la valeur remontée est "Numérodematricule", donc une chaine.
je ne suis pas sur que c'est ce que vous vouliez faire.
Vous voulez copier la cellule de la ligne 4, on celle d'en dessous ?
Ca je vous laisse faire, vous irez beaucoup plus vite que moi.

( A noter que la macro doit pouvoir être optimisée, si j'ai bien compris avec :
VB:
Sub Creer_Supprimer_ESSAI(Adresse)
  Dim Nom As String, dl As Long, C As Long, valeur As Range
  Set valeur = Sheets("Synthèse").Range(Adresse)
  Nom = valeur.Offset(0, -2)
  If FeuilleExiste(Nom) And valeur = "" Then
    Application.DisplayAlerts = False
    Sheets(Nom).Delete
    Application.DisplayAlerts = True
  Else
    If Not FeuilleExiste(Nom) Then
      Sheets("Feuille Type").Copy After:=Sheets(Sheets.Count)
      Sheets(Sheets.Count).Name = Nom
      dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1
      For C = 1 To 48
            Sheets(Nom).Cells(dl, C) = valeur.Offset(0, C - 3)
      Next L
    End If
  End If
End Sub
car toutes les colonnes se suivent tant en lecture qu'en écriture.
J'ai mis ça dans Essai et est appelée Creer_Supprimer_ESSAI )
 

Pièces jointes

  • Décompte (1).xlsm
    145.6 KB · Affichages: 5
Dernière édition:

Nando71

XLDnaute Nouveau
Bonjour Nando,
Lorsque vous faites Call Creer_Supprimer(Target) c'est la valeur de la cellule target qui est utilisée, non son adresse.
Dans la PJ j'ai fait au niveau de Worksheet_Change :
VB:
Call Creer_Supprimer(Target.Address)
Puis au niveau de Creer_Supprimer :
Code:
Sub Creer_Supprimer(Adresse)
puis
Set Valeur = Sheets("Synthèse").Range(Adresse)
De cette façon Valeur représente une adresse, et non une valeur.

Cela donne quand même une erreur sur Numérodematricule = Valeur.Offset(0, 9) car Numérodematricule est déclaré comme Long alors que la valeur remontée est "Numérodematricule", donc une chaine.
je ne suis pas sur que c'est ce que vous vouliez faire.
Vous voulez copier la cellule de la ligne 4, on celle d'en dessous ?
Ca je vous laisse faire, vous irez beaucoup plus vite que moi.

( A noter que la macro doit pouvoir être optimisée, si j'ai bien compris avec :
VB:
Sub Creer_Supprimer_ESSAI(Adresse)
  Dim Nom As String, dl As Long, C As Long, valeur As Range
  Set valeur = Sheets("Synthèse").Range(Adresse)
  Nom = valeur.Offset(0, -2)
  If FeuilleExiste(Nom) And valeur = "" Then
    Application.DisplayAlerts = False
    Sheets(Nom).Delete
    Application.DisplayAlerts = True
  Else
    If Not FeuilleExiste(Nom) Then
      Sheets("Feuille Type").Copy After:=Sheets(Sheets.Count)
      Sheets(Sheets.Count).Name = Nom
      dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1
      For C = 1 To 48
            Sheets(Nom).Cells(dl, C) = valeur.Offset(0, C - 3)
      Next L
    End If
  End If
End Sub
car toutes les colonnes se suivent tant en lecture qu'en écriture.
J'ai mis ça dans Essai et est appelée Creer_Supprimer_ESSAI )
Bonjour Merci pour votre aide mais malheureusement cela ne fonctionne pas. En entrant une date dans la cellule E9 (par exemple) cela ne modifie pas le nom de la feuille créer. Les valeurs des cellules à reporter sont celle de cette même feuille (Concaténer A2 &A3)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En A2 vous mettez, avec dl=2 au début
Code:
 Sheets(Nom).Range("A" & dl).Value = Nom
Or "Nom" n'est pas référencé dans 'Tableau de bord'!C9:E39 donc RechercheV donne #N/A.

Ensuite vous faites un :
VB:
 dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1
Avec Nom = la feuille crée, et il n'y a rien en colonne BZ.

Désolé, je ne comprends rien.
J'espère qu'un autre contributeur qui passerait par ici sera plus perspicace.
 

Nando71

XLDnaute Nouveau
En A2 vous mettez, avec dl=2 au début
Code:
 Sheets(Nom).Range("A" & dl).Value = Nom
Or "Nom" n'est pas référencé dans 'Tableau de bord'!C9:E39 donc RechercheV donne #N/A.

Ensuite vous faites un :
VB:
 dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1
Avec Nom = la feuille crée, et il n'y a rien en colonne BZ.

Désolé, je ne comprends rien.
J'espère qu'un autre contributeur qui passerait par ici sera plus perspicace.
Je pense que le plus simple serait de tester mon tableau, en insérant un 1 et enter dans la col C à partir de C5 de la feuille de synthèse ceci va créer un nouvelle feuille qui comporte le nom VD 229915. Du moment que dans la feuille tableau de bord j'insère une date dans la cellule E9 (Même ligne que VD 229915 Cell C9) la feuille portant le nom VD 229915 devienne VD229915Annulé.

Est-ce assez clair ?

Désolé si je ne m'exprime pas correctement

Merci
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dernière tentative.
1- Dans Worksheet_Change c'est C4:C50 et non C3:C50, sinon erreur si clic en A3
2- Dans dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1, à priori c'est "B" et non "Bz"
3- Les Immat sont VD+espace+Nombre, j'ai rajouté l'espace sinon, évidemment, ça coince.
4- J'ai rajouté pour accélérer, sinon ça rame :
VB:
    Application.ScreenUpdating = False                          ' Fige l'écran
    Application.Calculation = xlCalculationManual               ' Mettre en calcul manuel
    Application.EnableEvents = False                            ' Supprimer tout event
    Application.DisplayAlerts = False                           ' Supprimer les alertes
5- J'ai simplifié à mort le module Creer_Supprimer par une boucle For Next

Par contre la cellule A3 de la feuille copiée n'est pas utilisée, là, j'ai pas compris. Enrichir le code.
Dans Synthèse il faut remettre formules en colonnes A, ici j'ai fait coller valeurs.

Il y avait quand même pas mal d'erreurs. A vous de jouer pour le reste.

La prochaine fois, soyez quand même plus explicite dans votre demande. N'oubliez pas que le contributeur ne connait pas votre fichier. Alors A2:A3 ne veut rien dire si vous ne précisez pas de quelle feuille par ex.
 

Pièces jointes

  • Décompte (V4).xlsm
    283.2 KB · Affichages: 8

Nando71

XLDnaute Nouveau
Dernière tentative.
1- Dans Worksheet_Change c'est C4:C50 et non C3:C50, sinon erreur si clic en A3
2- Dans dl = Sheets(Nom).Range("Bz" & Rows.Count).End(xlUp).Row + 1, à priori c'est "B" et non "Bz"
3- Les Immat sont VD+espace+Nombre, j'ai rajouté l'espace sinon, évidemment, ça coince.
4- J'ai rajouté pour accélérer, sinon ça rame :
VB:
    Application.ScreenUpdating = False                          ' Fige l'écran
    Application.Calculation = xlCalculationManual               ' Mettre en calcul manuel
    Application.EnableEvents = False                            ' Supprimer tout event
    Application.DisplayAlerts = False                           ' Supprimer les alertes
5- J'ai simplifié à mort le module Creer_Supprimer par une boucle For Next

Par contre la cellule A3 de la feuille copiée n'est pas utilisée, là, j'ai pas compris. Enrichir le code.
Dans Synthèse il faut remettre formules en colonnes A, ici j'ai fait coller valeurs.

Il y avait quand même pas mal d'erreurs. A vous de jouer pour le reste.

La prochaine fois, soyez quand même plus explicite dans votre demande. N'oubliez pas que le contributeur ne connait pas votre fichier. Alors A2:A3 ne veut rien dire si vous ne précisez pas de quelle feuille par ex.
Hello

Super merci beaucoup pour votre aide
 

Discussions similaires

Statistiques des forums

Discussions
315 089
Messages
2 116 098
Membres
112 661
dernier inscrit
ceucri