Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Dupliquer a loisir des onglets par bouton macro

sebbbbb

XLDnaute Impliqué
Bonjour

je viens faire appel à vos connaissances sur un sujet dont je bute depuis plusieurs semaines. j'ai eu de l'aide par certains d'entre vous mais j'ai toujours un ptit qq chose qui cloche aussi j'aimerai repartir de zéro.

voici donc ce que je cherche :

- j'ai sélectionné d'un gros fichier existant qui me sert de fichier test 4 onglets
- je souhaiterai que lorsque je clique sur le bouton "NEW" situé sur l'onglet SWB1, 4 nouveaux onglets s'affichent à la suite avec le même nom mais en ayant juste le nbre qui diffère. Ainsi à la suite des onglets SWB1, PCK1, CMA1, REI1 s'affichent les nouveaux onglets SWB2, PCK2, CMA2, REI2 et ainsi de suite autant de fois que l'on clique sur le bouton (SWB3, PCK3, CMA3, REI3 etc etc)

Certains d'entre vous m'on aidé dans cette tâche et cela fonctionne plutôt bien.

Seul hic, dont je me suis rendu compte ultérieurement c'est que les nouveaux onglets gardent les liens aux onglets originaux.

Je m'explique :
- si je prends pour exemple l'onglet CMA1, il y a des liens entres les cellules de cet onglet et celui SWB1 ; idem entre l'onglet PCK1 et SWB1 ou entre REI1 et SWB1
- j'aimerai que les liens restent identiques mais par contre entre les nouveaux onglets c'est à dire entre CMA2 et SWB2, PCK2 et SWB2 ou REI2 et SWB2

C'est la tout mon problème car actuellement les liens restent entre CMA2 et SWB1, PCK2 et SWB1 ou REI2 et SWB1 et ainsi de suite avec les autres onglets ; ce qui fausse complètement mes données

J'espère m'être exprimé clairement et que vous pourrez m'apporter votre aide

un énorme merci à vous qui vous pencherez dessus. j'avoue que cela m'enlèverait une grosse épine du pied

Seb
 
Dernière modification par un modérateur:

sebbbbb

XLDnaute Impliqué
Bonjour Dranreb
la solution était dans ta réponse
J'ai modifié thisworkbook par activeworkbook et cela fonctionne parfaitement
C'est PARFAIT !
Enorme merci à toi pour ton aide, patience et pertinence de tes remarques !
Chapeau !
Sincèrement merci
heureusement qu'il y a ce forum et des gens comme toi pour des personnes comme moi qui aime le vba mais avec un niveau encore moyen
Seb
 

sebbbbb

XLDnaute Impliqué
Bonsoir Dranreb

Je me permets de revenir a nouveau vers toi concernant le post ci-dessus

Ton aide m'a été réellement précieuse et du coup j'ai décidé d'adapter le code pour d'autres onglets de façon à les doubler à loisir toujours en cliquant sur un bouton

J'ai donc essayé de modifié ton script pour cette nouvelle étape mais sans succès. Pourrais tu m'aider en ce sens stp ?

je souhaite donc recopier 3 autres onglets en cliquant sur le bouton "NEW" situé sur le 1er d'entre eux appelés respectivement :

ENV DA
DA
WM INVOICES


Je pensais donc avoir correctement modifié ton script en l'adaptant comme suit :

**

Sub NEWdaccount()
'
ActiveWorkbook.Unprotect ""

Dim TWsh(1 To 6) As Worksheet, N As Long, NomF, Rng As Range, M As Long, NSrc As String, NCbl As String
Set TWsh(1) = ActiveSheet
For N = 2 To 3
Set TWsh(N) = ActiveWorkbook.Worksheets(TWsh(1).Index - 1 + N)
Next N
For N = 4 To 6
TWsh(N - 3).Copy After:=TWsh(N - 1)
Set TWsh(N) = ActiveSheet
NomF = TWsh(N - 3).Name
TWsh(N).Name = Left$(NomF, Len(NomF) - 1) & Right$(NomF, 1) + 1
Next N
For N = 4 To 6
Set Rng = TWsh(N).Cells.SpecialCells(xlCellTypeFormulas, 23)
For M = 1 To 3
' AdrSrc = TWsh(M).[A1].Address(External:=True)
' AdrCbl = TWsh(M + 3).[A1].Address(External:=True)
' AdrSrc = Mid$(AdrSrc, InStr(AdrSrc, "]") + 1): AdrSrc = Left$(AdrSrc, InStr(AdrSrc, "!"))
' AdrCbl = Mid$(AdrCbl, InStr(AdrCbl, "]") + 1): AdrCbl = Left$(AdrCbl, InStr(AdrCbl, "!"))
NSrc = TWsh(M).Name: NCbl = TWsh(M + 3).Name
Rng.Replace What:=NSrc & "!", Replacement:=NCbl & "!", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Rng.Replace What:="'" & NSrc & "'!", Replacement:="'" & NCbl & "'!", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
Next M, N
TWsh(1).Shapes(Application.Caller).Delete


ActiveWorkbook.Protect ""
MsgBox "NE PAS OUBLIER D'INDIQUER LE NUMERO DU NOUVEAU BL"

End Sub
**

cependant j'ai un bug au lancement (voir copies écran ci-dessous)




Aurais tu la gentillesse de m'aider encore une fois stp ?

Avec tous mes remerciements

Seb
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Je n'ai pas les éléments pour trouver ce qui ne va pas.
Mais il ne me parait pas improbable qu'une des expressions impliquées porte une valeur d'erreur .
Met des espions sur les différents éléments de l'instruction au moment du débogage pour voir les valeurs qu'ils ont.
 

Dranreb

XLDnaute Barbatruc
Aparamment la macro avait été conçue en partant du principe que le nom de chaque feuille existante se terminait par un chiffre.
Là ce n'est pas le cas, et on ne peut pas ajouter 1 à un autre caractère.
De plus ça semblait marcher par groupe de 3 feuilles. Enfin je crois qu'il faut entièrement redéfinir le besoin pour ce classeur là.
 

sebbbbb

XLDnaute Impliqué
Bonjour Dranreb

Grâce à ton expertise j'ai modifié mon onglets et le script fonctionne très bien !

merci a toi.

je voulais savoir : est il possible de modifier le script de façon a ce que celui ci n'efface pas le bouton qui permet de lancer la macro ? cela afin que l'on puisse lancer le code de n'importe quel onglet appelé BL Mobile1 ou 2 ou 3 ou... +

je me doute que c'est un peu plus coton, mais sait on jamais

merci par avance pour ton aide

Seb
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui, il doit y avoir une instruction qui efface exprès ce bouton, parce qu'il était dangereux de l'utiliser si les feuilles avaient déjà été dupliquées. Mais j'avais bien vu aussi qu'elle apportait plus d'inconvénient que de gain en sécurité. Il suffit de la mettre en commentaire.
C'est l'instruction TWsh(1).Shapes(Application.Caller).Delete
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non. Ça ajoute à la suite des 4 feuilles dans la 1ère desquelles on a cliqué sur le bouton. Donc les feuilles avec le numéro à leurs suite ne doivent pas exister. Mais si on les supprime préalablement, pas de problème.
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…