Dupliquer X feuille Excel en 1 clic
1 : lorsque j'efface dans ma feuille DE-SEC une ligne ça me met cela
Remplacez la ligne de code surlignée en jaune par ces deux lignes
If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub2 : lorsque je rempli une nouvelle ligne dans ma feuille D-E-SEC il me crée bien ma nouvelle feuille mais il reprends ce qui est dans la feuille 1. Existe t-il un moyen qu'il se créé "vide".
Dans la macro Dupliquer, rajoutez la ligne ci-dessous entre --> .Range("L2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-7]" et le END WITH
.Range("A15:D53, E15:E53, G15:G53, I15:J53, L15:L53, N15:N53, P15:P53").ClearContentsCrdlt
Bonjour Dan,
J'espère que vous allez bien.
Merci pour votre retour !
J'ai fait ce que vous m'avez dit mais ça me créé ma feuille 2 toujours en se basant sur la feuille 1 et par contre le SD2 (en l'occurrence) ne prends plus en compte sa feuille 2, elle est "vide". Par contre pour la feuille 3, elle duplique les données de la feuille 1 et le SD3 reprends bien sa feuille 3.
Ci-joint à l'appuis...
Désolée et merci encore une fois !
J'ai fait ce que vous m'avez dit
Désolé mais relisez mon dernier message. Je ne vous ai pas dit de placer dans le code DupliquerSD
Excusez-moi !
Effectivement j'avais mis dans DupliquerSD...
C'est parfait !
Je ne vous remercierez jamais assez pour votre aide.. Merci beaucoup et j'ai beaucoup appris !!
Encore merci !!!
J'espère que vous allez bien....
Je suis vraiment désolée de vous déranger mais j'ai un petit souci avec mon fichier et une question également.
- J'ai créé mon onglet planning qui marche plus ou moins. Cadence et Durée je souhaite qu'il reprenne certaine donnée sur mes feuilles créé. J'ai mis la formule sur la première ligne sauf que du coup quand je glisse vers le bas forcément il reste sur la feuille "1" qui est déjà créé... Comment je peux faire pour qu'il prenne automatiquement la feuille crée ?
- Question : dans mon onglet DE-SEC, a chaque ligne que je rempli, la feuille se créé avec son SD. J'ai essayé de copier/coller dans ma feuille DE-SEC, un titre jusqu'à la ligne 100 afin qu'il ma crée les 100 feuilles d'un coup. Sauf que cela ne marche pas, je dois revenir ligne par ligne ou sinon double cliquer ligne par ligne. Pensez-vous qu'il y a un moyen de faire cela ? ça risque d'alourdir le code non ?
J'ai regardé sur des forums pour faire une boucle. Je me dis est ce que si je fais une macro avec un Input qui me demande combien de feuille je souhaite crée ?? ça me crée les X feuilles d'un coup et ensuite j'ai juste à copier/coller mes "titre" dans l'onglet D-E Sec.. Je ne sais pas..
En tout cas merci par avance et j'essaye d'avancer de mon côté pour des solutions :)
Bonne journée !
Bonjour
- J'ai créé mon onglet planning qui marche plus ou moins. Cadence et Durée je souhaite qu'il reprenne certaine donnée sur mes feuilles créé. J'ai mis la formule sur la première ligne sauf que du coup quand je glisse vers le bas forcément il reste sur la feuille "1" qui est déjà créé... Comment je peux faire pour qu'il prenne automatiquement la feuille crée ?
Dans votre feuille Planning mettez ces deux formules :
- En B7 --> =INDIRECT(EQUIV($A7;'D-E-Sec'!$C$20:$C$169;)&"!T"&LIGNE()+12)
- En C7 --> =INDIRECT(EQUIV($A7;'D-E-Sec'!$C$20:$C$169;)&"!T"&LIGNE()+13)
Ensuite recopiez les formules vers le bas
- Question : dans mon onglet DE-SEC, a chaque ligne que je rempli, la feuille se créé avec son SD. J'ai essayé de copier/coller dans ma feuille DE-SEC, un titre jusqu'à la ligne 100 afin qu'il ma crée les 100 feuilles d'un coup. Sauf que cela ne marche pas, je dois revenir ligne par ligne ou sinon double cliquer ligne par ligne. Pensez-vous qu'il y a un moyen de faire cela ? ça risque d'alourdir le code non ?
Tout est toujours possible. Mettez ce code dans le module 1 en dessous de la Sub DupliquerSD.
Sub Creer()
Dim Cel As Range
Application.ScreenUpdating = False
With Sheets("D-E-SEC")
For Each Cel In .Range("A20:A" & .Range("A" & .Rows.Count).End(xlUp).Row)
If .Range("C" & Cel.Row) <> "" Then
i = .Range("A" & Cel.Row)
Call Dupliquer
End If
Next Cel
End With
Application.ScreenUpdating = True
End SubEnsuite copiez vos données puis coller les dans la colonne C de la feuille DE-SEC. Une fois effectué, exécutez la macro ci-dessus.
J'ai testé le code et les formules sur le fichier version 4 posté dans mon post précédent car votre fichier version 5 est différent et ne comporte pas les données nécessaires.
Cordialement
Bonjour Dan,
J'espère que vous allez bien.
Désolée pour le temps de réponse.
Je viens de voir maintenant... :(
Cela marche super. Si je comprends bien. Il faudra dès lors que je copie/colle, que je lance manuellement la commande c'est bien ça ?
Encore merci pour votre temps que vous m'avez accordé !
Bonjour
Si je comprends bien. Il faudra dès lors que je copie/colle, que je lance manuellement la commande c'est bien ça ?
Oui exactement.
Cordialement
D'accord merci !
Je vais crée un bouton ou sinon un raccourci :)
Petite question, s'il vous plait (encore je suis chiante.., désolée...) :
Pouvez-vous m'expliquer la formule :
=SIERREUR(INDIRECT(INDIRECT("A" & LIGNE())&"!S9");0)
Parce que par exemple, je voulais la changer car dans mon « DE Sec »la colonne F doit renvoyer la valeur S6 des onglets des SD (non S9 des onglets 1,2,3...) mais je ne comprends pas vraiment la formule. "A" renvoi la colonne A de ma feuille D.E Sec ? J'ai compris qu'INDIRECT me permet d'extraire une donnée par rapport à une ligne et cellule.
Merci beaucoup !
Bonne soirée ! :)
Bonjour
Pouvez-vous m'expliquer la formule :=SIERREUR(INDIRECT(INDIRECT("A" & LIGNE())&"!S9");0)
1. INDIRECT("A" & LIGNE())
La formule recherche la valeur qui se trouve en colonne A de la ligne où se trouve la formule. Cette formule est nécessaire pour trouver le nom de la feuille dans le ficher. Vous avez donc bien compris lorsque vous dites dans votre post --> "A" renvoi la colonne A de ma feuille D.E Sec
2. INDIRECT(......)&"!S9")
Permet de trouve la valeur de la cellule S9 dans la feuille trouvée par la formule expliquée au point 1
3. SIERREUR
Permet de renvoyer la valeur 0 si la valeur S9 n'est pas trouvée
je voulais la changer car dans mon « DE Sec »la colonne F doit renvoyer la valeur S6 des onglets des SD (non S9 des onglets 1,2,3...)
Pour votre adaptation de formule :
- SD n'étant pas mentionné dans la feuille D-E-SEC, il faut l'ajouter dans la formule
- S9 sera remplacé par S6
Du coup la formule devient celle-ci --> =SIERREUR(INDIRECT("SD" & INDIRECT("A" & LIGNE())&"!S6");0)
Formule à recopier ensuite vers le basCordialement
D'accord !
J'ai compris. Du coup faut toujours que je mentionne la feuille pour qu'il prenne en compte j'ai compris ! :)
J'ai un dernier petit problème.
Dans mon onglet "Feuille_Vente_Base", mes colonnes E18, E19, E20, E21 calcule la sommes de mes feuilles 1,2,3,4 etc en avec la cellule concernée. Sauf que lorsque je fais le total, il prends également en compte mes feuilles SD de façon automatique.. et j'ai l'impression que c'est caché car il m'indique bien =SOMME('1:2'!K54)
Pouvez-vous m'aider s'il vous plait encore une fois... ? désolée :(
Dans mon onglet "Feuille_Vente_Base", mes colonnes E18, E19, E20, E21 calcule la sommes de mes feuilles 1,2,3,4 etc en avec la cellule concernée. Sauf que lorsque je fais le total, il prends également en compte mes feuilles SD de façon automatique.. et j'ai l'impression que c'est caché car il m'indique bien =SOMME('1:2'!K54)
Oui c'est normal car chaque SD est située après la feuille numérotée correspondante. D'où le calcul de la somme englobe aussi les montants des feuilles SD. Pour faire simple allez dans VBA --> THISWORKBOOK et remplacez le code Private Sub Workbook_SheetActivate(ByVal Sh As Object) par celui-ci dessous
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim shref As String
Dim Tablo()
Application.ScreenUpdating = False
If stpevt = True Or ActiveSheet.Name Like "SD*" Then Exit Sub
If UCase(ActiveSheet.Name) = "FEUILLE_VENTE_BASE" Then
Tablo = Array()
For Each Sh In Worksheets
stpevt = True
If Sh.Name Like "SD*" Then
ReDim Preserve Tablo(UBound(Tablo) + 1)
Tablo(UBound(Tablo)) = Sh.Name
Sh.Visible = False
End If
Next Sh
Sheets(Tablo).Move after:=Sheets(Sheets.Count)
Sheets("Feuille_Vente_Base").Select
Else
For Each Sh In Worksheets
shref = CStr(ActiveSheet.Name)
If Sh.Name Like "SD*" Then
If Sh.Name <> "SD" & shref Then
Sh.Visible = False
Else: Sh.Visible = True: stpevt = True: Sh.Move after:=Sheets(shref): Sheets(shref).Activate
End If
End If
Next Sh
End If
stpevt = False
Application.ScreenUpdating = True
End SubCordialement
Merci beaucoup ! C'est très gentil ! Merci !!