Ajout ligne automatique avec nom de la feuille ajoutée

Bonjour !
Je (re)viens ici car j'ai un problème que je n'arrive pas à résoudre.

J'ai un fichier dans lequel ma première feuille est un récap de l'ensemble des feuilles qu'il y a. J'ai déjà fait une formule qui me permet de cliquer dessus et de m'emmener directement à la feuille voulue (si je clique sur le nom ça m'emmène sur la feuille du même nom). j'ai créer un code qui me permet aussi de dupliquer la première feuille encadrée en vert avec une boite info me permettant de modifier le nom de la feuille. Mon souci est que j'aimerais que dans ce tableau récap la ligne s'ajoute automatiquement dès que j'ai une page d'ajoutée. Ma formule qui me permet de m'emmener directement permet aussi de, si je modifie le nom d'une feuille, modifier aussi mais il faut que j'appuie sur le carré vert pour que cela se fasse directement.

je ne sais pas si j'ai été claire mais merci d'avance !

image

Bonjour

Cordialement

J'ai modifié le fichier mais en gros c'est ça, je souhaite que dès qu'une feuille est ajoutée, une ligne s'ajoute dans le tableau de la première feuille

Merci pour l'aide !

Bonjour

J'ai modifié le fichier mais en gros c'est ça, je souhaite que dès qu'une feuille est ajoutée, une ligne s'ajoute dans le tableau de la première feuille

Dans votre fichier, la macro dupliquer est manquante.
Pouvez-vous la coller dans votre réponse afin que je comprenne ce que vous dupliquer.

Bonjour, Bizarre...

voici le code:

Sub dupliquer()

Dim nomfeuille As String
Dim numserie As String
Dim emplacement As String
Dim periodicite As String

nomfeuille = InputBox("Nom de la feuille")

If nomfeuille = "" Then
MsgBox "Entrez=r un nom", vbCritical
Exit Sub
End If

numserie = InputBox("N° de série du fabricant")
emplacement = InputBox("Emplacement du capteur sur le produit")



'If numserie = "" Then
' Exit Sub
' End If

' If emplacement = "" Then
' Exit Sub
' End If

Sheets("CTE0001").Copy after:=Sheets(Sheets.Count)
ActiveSheet.Name = nomfeuille
ActiveSheet.Range("B9") = numserie
ActiveSheet.Range("B10") = emplacement
Feuil3.Activate
Feuil3.Range("A1048576").End(xlUp).Offset(1, 0).Select



End Sub

Lorsque vous postez un code dans votre message veillez à utiliser les balises de code en cliquant sur l'icone </> dans la barre de menu et en collant le code dans la fenêtre.

Merci du code. Mais la feuille Sheets("CTE0001") n'existe pas dans votre fichier

Bizarre...

Oui votre bouton Dupliquer est lié à un code qui se trouve ici --> O:\04_DEVELOPPEMENTS\23_INSTRUMENTATION\1-Capteurs\1-Fiches de vies\Fiche de vie CTE.xlsm'!dupliquer

Edit : Je vois que vous utilisez une formule dans votre feuille OPERET en colonne A qui vous permet d'accéder à votre feuille. Deux solutions possibles pour éviter votre formule matricielle qui ralentit toujours le calcul d'un fichier. On pourrait ajouter un code qui vous permet d'accéder à la feuille soit par double click dans la cellule en colonne A ou par un lien hypertexte

Merci beaucoup pour votre aide !

la formule pour l'identification ne me dérange pas donc je n'ai pas creusé pour une macro. Pour le fichir c'est bon normalement vous y avez accès

voici le code:

Sub dupliquer()

    Dim nomfeuille As String
    Dim numserie As String
    Dim emplacement As String
    Dim periodicite As String

    nomfeuille = InputBox("Nom de la feuille")

    If nomfeuille = "" Then
        MsgBox "Entrez=r un nom", vbCritical
        Exit Sub
    End If

    numserie = InputBox("N° de série du fabricant")
    emplacement = InputBox("Emplacement du capteur sur le produit")

    'If numserie = "" Then
   '     Exit Sub
   ' End If

   ' If emplacement = "" Then
    '    Exit Sub
   ' End If

    Sheets("CTE0001").Copy after:=Sheets(Sheets.Count)
    ActiveSheet.Name = nomfeuille
    ActiveSheet.Range("B9") = numserie
    ActiveSheet.Range("B10") = emplacement
    Feuil3.Activate
    Feuil3.Range("A1048576").End(xlUp).Offset(1, 0).Select

End Sub

Autant pour moi, la macro n'était pas reliée

la formule pour l'identification ne me dérange pas donc je n'ai pas creusé pour une macro. Pour le fichir c'est bon normalement vous y avez accès

Oui je me doute mais quand vous allez augmenter le nombre de ligne, le calcul va ralentir l'exécution. Les formules matricielles, c'est à éviter quand vous le pouvez

Je vous conseille vraiment de ne pas utiliser la formule.
Autre question : c'est toujours la feuille CET que vous dupliquer ? Si la feuille est toujours structurée de la mêm manière vous auriez peut être intérêt à faire un modèle et dupliquer celui là

Ah... j'étais pas au courant que ça allait ralentir....

je vais essayer de me pencher là dessus, je crois me rappeler d'une macro que j'avais testé il y a quelques temps

justement c'est mon modèle, quand je clique sur le bouton dupliquer, j'ai juste à changer le nom, à mettre l'emplacement du capteur et la réf fabricant et la feuille est copiée

Ok . Votre fichier en retour avec le code ci-dessous

J'ai supprimé les formules et les ai remplacées par un lien hypertexte pour CET0001, CET0002

Sub dupliquer()
Dim lig As Integer
Dim nomfeuille, numserie As String, emplacement As String

nomfeuille = InputBox("Nom de la feuille")
If nomfeuille = "" Then
    MsgBox "Entrez=r un nom", vbCritical
    Exit Sub
End If

numserie = InputBox("N° de série du fabricant")
If numserie = "" Then
    MsgBox "Entrez un num de serie", vbCritical
    Exit Sub
End If

emplacement = InputBox("Emplacement du capteur sur le produit")
If emplacement = "" Then
    MsgBox "Entrez un emplacement", vbCritical
    Exit Sub
End If

Sheets("CTE0001").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
    .Name = ucase(nomfeuille)
    .Range("B9") = numserie
    .Range("B10") = emplacement
End With

With Feuil3.ListObjects("AllOPPERET")
    If .ListRows.Count = 0 Then
        .ListRows.Add: lig = 1
    Else: .ListRows.Add: lig = .ListRows.Count
    End If
    Feuil3.Hyperlinks.Add Anchor:=.DataBodyRange.Item(lig, 1), Address:="", SubAddress:=nomfeuille & "!B4", TextToDisplay:=nomfeuille
'remise en forme du lien
    With .DataBodyRange.Item(lig, 1).Font
        .Underline = xlUnderlineStyleNone
        .Bold = True
        .ColorIndex = xlAutomatic
    End With

End With
End Sub

Il vous suffit de cliquer sur le bouton Dupliquer

EDIT : désolé j'ai fait une inversion dans la colonne A. Lisez CTE et pas CET.
Votre formule en B21 devient ceci --> SIERREUR(INDIRECT(INDIRECT("A" & LIGNE()) & "!I3");"")

Wow, j'ai passé des heures à réfléchir sur ça, merci infiniment pour votre aide !!

Il me reste un dernier problème qui parait peut être un peu bête mais en gros dans les différentes fiches j'aimerais que l périodicité de l'étalonnage soit, à chaque fois qu'une feuille est dupliqué, ça s'incrémente de +1

en gros que la périodicité de CTE0001 qu'on retrouve dans opperet à U21 soit pour CTE0002 à U22 etc toujours dans la cellule E16

j'ai commencé à y réflechir mais à la fin cela m'affiche valeur dans cette formule: =@INDIRECT("OPPERET!U"&DROITE(@CELLULE("nomfichier";A1);4)+2)

Merci encore !

en gros que la périodicité de CTE0001 qu'on retrouve dans opperet à U21 soit pour CTE0002 à U22 etc toujours dans la cellule E16

Une première chose à faire c'est défusionner vos cellules B4:C4 en feuille CTE.
Ensuite mettez cette formule en E16 --> =INDEX(AllOPPERET;EQUIV(B4;AllOPPERET[Identification];);21)

Ceci =INDEX(AllOPPERET;EQUIV(identification;AllOPPERET[Identification];);21) fonctionnerait aussi mais cela va créer des noms dans le gestionnaire à chaque nouvelle feuille. Du coup si vous avez 100 feuilles, bonjour tous les noms créés...

Il y a une chose que je modifierais dans votre feuille OPERET, c'est enlever les références OPERET dans les formules. Cela n'a aucun intérêt puisque les cellules utilisées sont sur cette feuille

Exemple : en C21 vous avez ceci --> =(OPPERET!$B21-$B$13)/$B$16. Supprimez OPPERET --> =($B21-$B$13)/$B$16
Comme votre tableau est au format structuré, en refaisant votre formule en C21, cela donnerait même ceci --> =([Note:1]-$B$13)/$B$16.
dans ce dernier cas vous verrez que la formule est identique sur toute la colonne C.

De même, vous pourriez appliquer la formule Indirect que je vous ai donnée, dans toutes les cellules NOTE

Merci infiniment, tout fonctionne j'ai ajouté le code dans le vrai fichier !

ma dernière question est pourquoi quand je clique sur dupliquer et lorsque je vais sur le nom dans le tableau j'ai mon ancienne formule qui est affichée ?

lorsque je vais sur le nom dans le tableau

Quelle feuille et quelle cellule ?

Heu vous parlez de la colonne A ?

pardon, dans la feuille OPPERET, je clique sur le bouton dupliquer qui me permet de créer ma feuille et quand je reviens sur OPPERET, j'ai ma ligne d'ajouté mais lorsqu'on clique sur le nom, dans le tableau de la page OPPERET, celui ci a pour formule l'ancienne que vous disiez ne pas être pratique

Oui. Là ce n'est pas simple car il faut remettre le tableau en plage normal puis remettre le tableau en mode structuré
Savez-vous comment faire ?

Si non, je vous donne la marche à suivre

Oui, j'ai trouvé ! Merci beaucoup pour votre aide, sans vous je serai resté encore coincée pas mal de temps dessus. Bonne journée à vous !

OK. Vérifiez bien que le code va fonctionner car si vous convertissez en plage puis que vous remettez en tableau structuré, il faut aller dans le gestionnaire de noms pour changer le nom "tableaux" recréé par votre nom AllOPPERET.
Puis les formules dans le tableau sont aussi à refaire car excel va remettre tous les noms OPPERET partout

NB : dans ce gestionnaire de noms, il y a notamment pas mal de noms que vous pouvez supprimer. Ils ne servent plus

Si ok

Cordialement

oui, j'ai tout modifié, j'ai ajouté dans tous les autres classeurs où j'utilisais le même type de feuille en modifiant et tout est bon !

et oui, j'ai pris les devant et j'ai déjà marqué les réponses !

Rechercher des sujets similaires à "ajout ligne automatique nom feuille ajoutee"