Dupliquer onglet en gardant format par VBA avec MsgBox

Bonjour,

J'espère que vous allez bien ?

Je me permets de vous solliciter votre aide en ce jour pluvieux (mais qui fait du bien aux plantes) concernant un macro.

J'ai dans mon fichier ci-joint, un onglet qui s'intitule D-E-Sec, à l'intérieur j'ai la possibilité de remplir des données jusqu'à la cellule 169.

Mon fichier comprends automatiquement 20 onglet de "travail" qui reprennent le nom de me ma colonne A qui se trouve dans le fichier D-E-Sec. Donc la cellule A20 représente l'onglet "1", A22 représente l'onglet "2" etc jusqu'à 20. Chacune de ses feuilles jusqu'à 20 à sa correspondance en masquée qui se nomme SD[nom de la feuille origine] donc onglet 1 à sa correspondance en masquée qui s'appelle SD1 etc jusqu'à 20.

Il arrive parfois que nous soyons obligés de travailler sur plus de 20 feuilles. 150 étant le max. Afin de ne pas alourdir en terme de visibilité et de macro le fichier, je souhaitais créer un bouton qui permettrai de crée le nombre de feuille supplémentaire que je souhaite.

Cependant ces feuilles devront avoir comme nom, le nom de l'onglet qui se trouve dans un feuille D-E-Sec donc 21,22,23,24... et devront avoir exactement le même format, avec les mêmes formules et également leur correspondance donc les SD21,SD22 que les feuilles déjà existante...

En gros ce serait un copier/coller des feuilles qui existe déjà mais elle serait crée en fonction du nombre que l'on souhaite.

Pensez-vous pouvoir m'aider ? Bien que plutôt fière d'avoir participer à l'élaboration de ce fichier en VBA, je ne suis pas aussi compétente pour un travail qui est assez urgent...

En tout cas je vous remercie d'avance pour votre lecture et votre aide quelle qu'elle soit !

Bonne fin de journée :)

Bonjour,

Votre fichier me rappelait quelque chose....
Et en regardant dans vos différents posts dans votre profil, je retrouve celui-ci où il y a 2 ans, il me semble que je vous avais proposé la solution pour notamment éviter de créer les feuilles inutilement. Ce qui d'ailleurs aurait posé problème dans les formules faisant partie des codes (si je me rappelle)

https://forum.excel-pratique.com/s/goto/994789
https://forum.excel-pratique.com/s/goto/995246

Il faudrait relire pas à pas le fil et adapter éventuellement.

Là dans votre fichier, hormis les formules, les codes proposés ne sont pas inclus. C'est un peu comme si votre première demande n'avait servi à rien.

Cordialement

Bonjour Dan,

Merci pour la réponse :)

Je vais éplucher tout ça du coup. Je sais que finalement, j'étais partie sur 20 onglets visibles et 20 onglets masqués.

Je voulais savoir si effectivement c'était possible de rajouter au code ce type de MSgBox en gardant ce qui est déjà fait.

Mercii :)

Re,

Possible mais peut-être aussi tout recommencer et là vous revenez avec la même idée que dans le fil précédent

Mais sur le fond je ne vois pas le pourquoi de faire cela sachant que de toute façon vous allez devoir compléter la colonne D de cette feuille D-E-SEC
Cela me semblait tellement simple de compléter votre colonne D et le code dupliquait au fur et à mesure.
Là c'est abandonner cette solution pour repartir sur votre idée initiale

Attention aussi de voir si vous créez trop de feuille par erreur... et que vous devez supprimer

La première chose serait d'avoir le fichier que vous aviez dû modifié dans votre précédent fil.
Celui que vous avez posté est différent ou en tout cas je ne vois pas tous les codes et ce que je vous avez suggéré de modifier

Dan,

Je suis à nouveau sur le fichier que vous m'avez aidé à faire à l'époque :)

En effet, il répondait à ma demande. Je me souviens que j'avais fait autrement car le fichier était à priori un peu lourd mais je peux tester quand même.

Je voulais savoir par contre si c'était possible dans mon onglet D-E-Sec lorsque je crée ma feuille de rester sur l'onglet D-E-Sec plutôt qu'il m'amène sur l'onglet crée (mais que ça se crée quand même) ?

Merci :) !!

Bonjour

On ne sait pas ouvrir votre fichier. Il y a un souci. Remettez un nouveau dans votre post précédent

Sinon pour répondre à votre question

Je voulais savoir par contre si c'était possible dans mon onglet D-E-Sec lorsque je crée ma feuille de rester sur l'onglet D-E-Sec plutôt qu'il m'amène sur l'onglet crée (mais que ça se crée quand même) ?

Il suffirait de mettre cette instruction à la fin du processus. Donc à mon avis, juste avant le END SUB de la macro Dupliquer

Sheets("D-E-Sec").activate

A voir sur le bon fichier

Super Dan, ça marche ! Vous êtes génial.

Je profite pour vous faire d'autres petites questions, si possible..

Onglet D-E-Sec :

1. Est-il possible de créé la feuille lorsque l'on rempli plutôt la colonne B ? (N° de prix)

2. Lorsque je rempli ma désignation, la feuille se crée mais il y a une petite latence car elle m'envoi sur la feuille créé et me renvoi sur ma feuille D-E-Sec. Du coup c'est un peu lent. Je souhaiterai savoir s'il y avait un moyen palier à cela ?

Onglet Bibliothèque :

J'ai actuellement mis un code me permettant, dès lors que je change de prix, de changer le prix concerné par la changement sur toutes mes feuilles. Sauf que c'était vrai pour mes feuilles de 1 à 20. Est-il possible de faire en sorte que ce soit vrai pour toutes les feuilles qui seront créé ?

Feuille SD :

Concernant les feuilles SD, lorsque je fais clique droit sur une feuille pour afficher toutes les SD, ça ne suit pas forcément l'ordre. C'est à dire que ma feuille 1 va bien avoir sa feuille SD1 à côté, la 2 aussi mais par exemple, la 3,4 auront leur feuille qui sera affichée à la fin. Croyez vous qu'il y a moyen de palier à se problème également ?

Désolée pour les questions pointilleuses et encore merci pour votre précieuse aide et explications pour toujours s'améliorer :)

Onglet D-E-Sec :

1. Est-il possible de créé la feuille lorsque l'on rempli plutôt la colonne B ? (N° de prix)

Oui c'est possible mais c'est moins simple car on devra faire un nouveau code qui va devoir aller chercher la feuille x et la feuille SDx pour aller compléter la cellule D3 pour y ajouter la désignation.
Il faudrait déjà savoir comment vous fonctionnez lorsque vous complétez la feuille D-E-Sec. Je suppose que vous ajouter le N° de prix en colonne B ou d'abord la colonne C. Au final cela va être plus compliqué
De plus dans votre fichier, toute la colonne B est complétée. Est-ce normal par rapport à ce que vous écrivez ?

Onglet D-E-Sec :

2. Lorsque je rempli ma désignation, la feuille se crée mais il y a une petite latence car elle m'envoi sur la feuille créé et me renvoi sur ma feuille D-E-Sec. Du coup c'est un peu lent. Je souhaiterai savoir s'il y avait un moyen palier à cela ?

Oui mais il faut comprendre que vous avez de nombreuses feuilles et aussi de nombreuse formules. Donc chaque fois que vous changez 1 cellule dans le fichier, excel recalcule tout le fichier. Idem pour les codes
Vous pouvez toujours faire ceci dans la sub dupliquer()

1. Juste en dessous de Dim existe, mettez cette ligne

Application.Calculation = xlCalculationManual

2. Juste au dessus du END SUB, mettez

Application.Calculation = xlCalculationAutomatic

Onglet Bibliothèque :

C'est curieux car le code prend en compte 150 feuilles. Je vais regarder car finalement on ne devrait considérer que ce qui est complété en colonne C de la feuille D-E-Sec. Donc si colonne C a 20 items, la boucle ne doit pas aller jusque 150 mais jusque 20.

si je comprends bien c'est toute la colonne A de l'onglet bibliothèque qui concernée ? Là vous allez jusque la ligne 239.


Feuille SD :
Concernant les feuilles SD, lorsque je fais clique droit sur une feuille pour afficher toutes les SD, ça ne suit pas forcément l'ordre.

Je n'ai pas compris votre click droite. Si vous cliquez sur le nom de l'onglet une feuille, cela vous affiche la feuille SD juste à droite

Bonjour Dan,

Désolée pour le temps de réponse mais j'étais dans l'impossibilité de vous répondre :)

En tout cas merci pour vos réponses.

Oui c'est possible mais c'est moins simple car on devra faire un nouveau code qui va devoir aller chercher la feuille x et la feuille SDx pour aller compléter la cellule D3 pour y ajouter la désignation. Il faudrait déjà savoir comment vous fonctionnez lorsque vous complétez la feuille D-E-Sec. Je suppose que vous ajouter le N° de prix en colonne B ou d'abord la colonne C. Au final cela va être plus compliqué. De plus dans votre fichier, toute la colonne B est complétée. Est-ce normal par rapport à ce que vous écrivez ?

-> Normalement elle n'est pas censée être remplie justement. Ce sera une colonne vide. On remplie d'abord la colonne B puis ensuite la colonne C. Mais si cela s'avère plus compliquée, ce n'est pas un soucis :)

Oui mais il faut comprendre que vous avez de nombreuses feuilles et aussi de nombreuse formules. Donc chaque fois que vous changez 1 cellule dans le fichier, excel recalcule tout le fichier. Idem pour les codes

Vous pouvez toujours faire ceci dans la sub dupliquer()

-> Merci, j'ai rajouté les deux codes :) !

C'est curieux car le code prend en compte 150 feuilles. Je vais regarder car finalement on ne devrait considérer que ce qui est complété en colonne C de la feuille D-E-Sec. Donc si colonne C a 20 items, la boucle ne doit pas aller jusque 150 mais jusque 20. si je comprends bien c'est toute la colonne A de l'onglet bibliothèque qui concernée ? Là vous allez jusque la ligne 239.

-> Je ne suis pas sûre d'avoir compris la question. En gros quand je change le prix de ma colonne C, la macro changer automatiquement le prix pour les 20 feuilles qui existaient déjà. Or là comme désormais, je peux rajouter des feuilles en plus, j'ai changer le code en mettant For i = 1 to 150 donc est ce que par exemple si j'ai 40 feuilles de créé et que je change le prix d'un produit dans ma bibliothèque, est ce que le code va me mettre une erreur ?

image

Je n'ai pas compris votre click droite. Si vous cliquez sur le nom de l'onglet une feuille, cela vous affiche la feuille SD juste à droite

-> Pour ce point, par exemple quand je fais un clic-droit et que j'affiche toutes les feuilles SD que j'ai, certain ne s'affiche pas à droite de leur "parent" , comme l'exemple ci-dessous. Du coup je ne sais pas si c'est qqch de mon PC et dans ce cas s'il y a une solution ou si c'est autre chose.

image

Merci Dan ! :)

C'est curieux car le code prend en compte 150 feuilles. Je vais regarder car finalement on ne devrait considérer que ce qui est complété en colonne C de la feuille D-E-Sec. Donc si colonne C a 20 items, la boucle ne doit pas aller jusque 150 mais jusque 20. si je comprends bien c'est toute la colonne A de l'onglet bibliothèque qui concernée ? Là vous allez jusque la ligne 239.

-> Je ne suis pas sûre d'avoir compris la question. En gros quand je change le prix de ma colonne C, la macro changer automatiquement le prix pour les 20 feuilles qui existaient déjà. Or là comme désormais, je peux rajouter des feuilles en plus, j'ai changer le code en mettant For i = 1 to 150 donc est ce que par exemple si j'ai 40 feuilles de créé et que je change le prix d'un produit dans ma bibliothèque, est ce que le code va me mettre une erreur ?

Remplacez votre code par celui ci-dessous (attention à ne pas effacer les instructions Dim anciennevaleur,.... qui sont actuellement en première ligne au-dessus de Private Suv worksheet...

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 3 Then
    NouvelleValeur = Target.Value
    If NouvelleValeur = AncienneValeur Then Exit Sub

    If Cells(Target.Row, Target.Column - 2).Value = vbNullString Then Exit Sub

    If MsgBox("Le prix de l'article : " & UCase(Cells(Target.Row, Target.Column - 2).Value) & " a changé !" _
       & vbNewLine & "Le prix est passé de : " & AncienneValeur & " à " & NouvelleValeur _
       & vbNewLine & "Souhaitez-vous affecter cette modification à toutes les tables des feuilles créées ?", vbQuestion + vbYesNo + vbDefaultButton2, "Remplacement valeur") = vbYes Then

    Dim i As Integer, lig As Integer

    For i = 1 To Sheets.Count
        If IsNumeric(Sheets(i).Name) Then
            Application.StatusBar = "Verification sur la feuille : " & i
            On Error Resume Next
            lig = WorksheetFunction.Match(Target.Offset(0, -2), Sheets(i).Range("A:A"), 0)
            If lig > 0 Then
                Sheets(i).Range("E" & lig).Value = Target.Value
                lig = 0
            End If
            On Error GoTo 0
        End If
    Next i

    Application.StatusBar = ""

    End If
End If
End Sub

Je n'ai pas compris votre click droite. Si vous cliquez sur le nom de l'onglet une feuille, cela vous affiche la feuille SD juste à droite

-> Pour ce point, par exemple quand je fais un clic-droit et que j'affiche toutes les feuilles SD que j'ai, certain ne s'affiche pas à droite de leur "parent" , comme l'exemple ci-dessous. Du coup je ne sais pas si c'est qqch de mon PC et dans ce cas s'il y a une solution ou si c'est autre chose.

Non le click droite dans votre fichier ne fait rien (en tout cas dans le fichier posté)
Si vous cliquez sur un des onglets numéroté de 1 à x, cela vous affiche la feuille SD correspondantes à l'onglet cliqué.

Si vous voulez afficher tous les onglets SD, il faut prévoir un code spécifique

Bonjour Dan,

Je m'excuse pur le temps de réponse !

Je n'étais pas en capacité de répondre...

Je vous remercie pour votre aide qui est toujours précieuse et votre disponibilité !

Merci pour les informations et passez une bonne journée !

Rechercher des sujets similaires à "dupliquer onglet gardant format vba msgbox"