Dupliquer X feuille Excel en 1 clic
Bonjour tout le monde !
J'espère que vous allez bien ! :)
Je me permets de vous solliciter votre aide car je bloque sur un point...
Je souhaite dupliquer 150x la mise en forme d'une feuille Excel, ici la feuille "1" en 1 clique en gardant les formules qui vont avec pour chaque feuille. Cad :
Dans mon fichiers j'ai une feuille qui s'intitule D.E.Sec et j'ai ensuite plusieurs feuille (jusqu'à 150) s'intitulant 1,2,3,4 etc.
Ma feuille D.E.Sec me permet de remplir certaines données de mes feuilles 1,2,3, etc , à savoir :
- la cellule : D2, G2 et L2
Dans la feuille "1", ma cellule D2 va correspondre à ma cellule C20 de ma feuille D.E.Sec. Dans la feuille "2", elle doit correspondre à la cellule C21 et ainsi de suite pour toute les feuille. Je souhaite donc garder cette logique lors de la duplication de ma feuille mère qui est la feuille "1". La logique est la même pour les autres cellules donc D2,G2,L2.
Même principe pour ma feuille SD1...
Pouvez-vous m'aider s'il vous plait ... ?
Pour information les chiffres qui sont sur le fichier sont erronées exprès bien entendu.
Merci d'avance pour votre intérêt et votre aide !
Bonne journée :)
Bonjour
en dupliquant la feuille 1 :
- les cellules D2, G2 et L2 doivent inclure la formule ou c'est le code qui doit vous mettre l'info ?
- Si La colonne C de la feuille D.E.SEC est vide on fait quoi ?
- Il vous faudra changer le . en autre chose. Un tiret par exemple. Mettre des points, comme des espaces, sont à éviter. On remplace par un tiret ?
Bonjour
en dupliquant la feuille 1 :
- les cellules D2, G2 et L2 doivent inclure la formule ou c'est le code qui doit vous mettre l'info ?
- Si La colonne C de la feuille D.E.SEC est vide on fait quoi ?
- Il vous faudra changer le . en autre chose. Un tiret par exemple. Mettre des points, comme des espaces, sont à éviter. On remplace par un tiret ?
Bonjour Dan,
Merci pour votre réponse !
- Les cellules D2, G2, L2 et D3 d'ailleurs, qui est fusionnée avec les autres cellules, doivent pouvoir reprendre la donnée de la feuille D.E Sec correspondante. C'est à dire que lorsque je remplis dans ma feuille D.E.Sec ma colonne C20, D20 et E20, ça me rempli ma feuille "1". La colonne B de la feuille D.E.Sec correspond à chaque feuille et doit donc se remplir automatiquement avec la feuille correspondante. Donc je ne sais pas trop ce qui est le mieux... :/
- Si la colonne C vide alors faut laisser vide sur les feuilles 1,2,3....
- Pas de problème pour le tiret si c'est le mieux :)
Merci beaucoup !
Cordialement,
- Les cellules D2, G2, L2 et D3 d'ailleurs, qui est fusionnée avec les autres cellules, doivent pouvoir reprendre la donnée de la feuille D.E Sec correspondante. C'est à dire que lorsque je remplis dans ma feuille D.E.Sec ma colonne C20, D20 et E20, ça me rempli ma feuille "1". La colonne B de la feuille D.E.Sec correspond à chaque feuille et doit donc se remplir automatiquement avec la feuille correspondante. Donc je ne sais pas trop ce qui est le mieux... :/
1. Cela ne répond pas à ma question de savoir si vous voulez les formules dans les cellules ou pas C
2. Vous demandez de dupliquer 150x la feuille 1 en un seul click. On peut très bien créer la feuille au moment où vous complétez la colonne C dans la feuille D.E.SEC ou créer toutes les feuilles même si la colonne C ne contient rien (un peu comme vous avez fait pour les feuilles 2, 3 et 4
-> En effet je n'avais pas pensé à ça ! C'est effectivement une bonne idée ! De créer la feuille dès lors que l'on rempli la colonne C dans D.E.Sec avec les données correspondantes !
Merci beaucoup !!
Re
En supposant que votre fichier est identique à celui posté faites ceci :
1. Modifiez le nom de votre onglet D.E.SEC en remplaçant les points par un tiret ---> D-E-SEC
2. click droite sur l'onglet D-E-SEC
3. Choisissez l'option "Visualiser le code"
4. Coller le code ci-dessous dans la fenêtre
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("C20:C" & Range("A" & Rows.Count).End(xlUp).Row)) Is Nothing Then
i = Target.Offset(0, -2).Value
Call Dupliquer
End If
End Sub5. Allez dans votre module 2
6. Supprimez tout le code Dupliquerlafeuilleactive et remplacez le par celui-ci
Public i As Byte
Sub Dupliquer()
Dim j As Byte
Dim Existe As Boolean
With Sheets("D-E-SEC")
For j = 1 To Sheets.Count
If Sheets(j).Name = CStr(.Cells(i + 19, 1)) Then Existe = 1: Exit For
Next j
If Existe = 0 Then
Sheets("1").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = Sheets("D-E-SEC").Cells(i + 19, 1).Value
.Range("D2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-2]"
.Range("D3").FormulaR1C1 = "='D-E-SEC'!R[" & 16 + i & "]C[-1]"
.Range("G2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-3]"
.Range("L2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-7]"
End With
End If
Existe = 0
'Next i
End With
End SubIMPORTANT : dans votre module, vous ne devez rien avoir avec la première ligne du code ci-avant
Dès que vous compléterez la cellule en colonne C de la feuille D-E-SEC, le code va dupliquer votre feuille 1 et nommera la feuille correspondant au chiffre placé en colonne A.
Le code vérifie si la feuille n'existe pas dans votre fichier avant de la créer
Faites un test et dites moi
Cordialement
Dan,
Merci beaucoup car ça semble marcher !
J'ai juste 1 question :/ :
- Mon PRIX UNITAIRE se rempli automatiquement avec la feuille. Sauf qu'à chaque fois je dois donc changer la formule. Par exemple pour le A6, mettre la formule ='6'!S9 etc... lorsque je glisse la formule du coup ça change juste le S9 en S10 mais en gardant la feuille...
Encore merci beaucoup !
Mon PRIX UNITAIRE se rempli automatiquement avec la feuille. Sauf qu'à chaque fois je dois donc changer la formule. Par exemple pour le A6, mettre la formule ='6'!S9 etc... lorsque je glisse la formule du coup ça change juste le S9 en S10 mais en gardant la feuille...
Vous pouvez mettre ceci en F20 --> =INDIRECT(A20 & "!S9")
Ensuite tirez la formule vers le bas
Edit : vous pouvez aussi mettre ceci -à la place de l'autre formule -> =INDIRECT(INDIRECT("A" & LIGNE())&"!S9")
Merci Dan vous êtes génial !
Dernière question et ensuite je ne vous embêterez plus jamais !
Quand je glisse ma formule, forcément il me met #REF! étant donnée que la ligne n'est pas rempli. Le problème c'est que ça joue donc sur mon tableau en gars. Il y aurait-il un moyen de glisser la formulaire mais que cette dernière n'impact pas le tableau ? :/
Désoléeee !! merciii
Quand je glisse ma formule, forcément il me met #REF! étant donnée que la ligne n'est pas rempli. Le problème c'est que ça joue donc sur mon tableau en gars.
Il vous faut une gestion d'erreur.
En F20, mettez ceci --> =SIERREUR(INDIRECT(INDIRECT("A" & LIGNE())&"!S9");0) ou ceci --> =SIERREUR(INDIRECT(A20 & "!S9");0)
Puis tirez votre formule vers le bas
Si besoin dites moi
Merci énormément pour votre aide !!!
Bonne fin de journée !
Mince j'ai une dernière question (promis !!)
Lorsque je colle les données d'une cellule afin qu'elle soit reportée dans une autre feuille, cette dernière n'est pas prise en considération. Au lieu de mettre la donnée, il me met la formule.
Donc ici je souhaite prendre la donéne de ma Cadence et de la feuille 1 (mais ce sera pareil pour toute les feuilles)
Dans ma feuille ci-dessous "Planning" sauf que ça me met la formule et non la donnée... Pourtant j'ai bien fait ENTRE et sélectionné la bonne cellule
Désolée vraiment...
Merci par avance , j'abuse un peu ....
Cordialement !
Lorsque je colle les données d'une cellule afin qu'elle soit reportée dans une autre feuille, cette dernière n'est pas prise en considération. Au lieu de mettre la donnée, il me met la formule.
Donc ici je souhaite prendre la donéne de ma Cadence et de la feuille 1 (mais ce sera pareil pour toute les feuilles)
Si vous voulez la donnée uniquement, il faut faire un copier - Collage spécial --> choisir l'option "Valeurs"
Edit : A y relire je ne comprends pas très bien pourquoi vous avez une formule en Cadence. A mon avis si cela vous renvoie = '1'!T19 dans votre planning c'est que vous faites = la valeur de T19 et non pas un copier
Ah oui d'accord ! Mais c'est à dire qu'il faudra que je fasse cela à chaque fois ?
Et autre chose, désolée vraiment mais parce que je vois au fur et à mesure. Le code que vous avez fait est vraiment top ! Sauf que du coup il à un impact sur mes autres feuilles.. Notamment dans ma feuille de Base... les totaux reprennes toutes les feuilles mais comme elles sont créées au fur et à mesure ça bug... J'ai essayé d'enlever les crochets mais il me les remets.. Avez-vous une solution pour cela...? Meerci encore.... :///
Ah oui d'accord ! Mais c'est à dire qu'il faudra que je fasse cela à chaque fois ?
Oui.
les totaux reprennes toutes les feuilles mais comme elles sont créées au fur et à mesure ça bug... J'ai essayé d'enlever les crochets mais il me les remets.. Avez-vous une solution pour cela
Mais votre fichier a combien de feuilles ? Là je vois 150 dans votre formule mais si les feuilles sont créés au fur et à mesure du remplissage de la colonne C de la feuille D-E-SEC, vous allez avoir chaque fois le même problème. Il faut adapter la formule en question et peut être la changer par code
Puis là, je vois K47 alors que dans votre fichier j'ai K54. C'est identique sur toutes les feuilles je suppose
Il faudrait au minimum connaitre les formules en place dans votre feuille Base.
BOnjour Dan,
J'espère que vous allez bien.
En effet, il y a plusieurs feuilles et j'ai une feuille "Feuille Vente Base" dans lequel j'ai mis des formules qui prennent en compte toutes mes feuilles. Les formules sont les suivantes dans ma Feuille de Base :
Cellule E19 =SOMME('1:150'!K47)
Cellule E20 =SOMME('1:150'!F47)
Cellule E21 =SOMME('1:150'!H47)
Cellule E22 =SOMME('1:150'!M47)
Je suppose qu'il faut donc un code si j'ai bien compris :/
Bonjour
Comme précisé hier dans mon post, la cellule K47 de votre fichier posté ne contient pas de valeur.
A quoi correspond les montants de la cellule K47 ? En colonne A vous avez trois valeurs
Autre chose, dans votre post vous commencez à la ligne 19 tandis que dans votre fichier et votre image postées la première cellule est en ligne 18.
Crdlt
BOnjour Dan,
Au temps pour moi, dans le fichier c'est K54, F54, H54, M54 de chaque feuille de 1 à 150. Donc les cellules E19, E20, E21 et E22 de ma feuille de vente Base reprennent bien la sommes :
Cellule E19 =SOMME('1:150'!K54)
Cellule E20 =SOMME('1:150'!F54)
Cellule E21 =SOMME('1:150'!H54)
Cellule E22 =SOMME('1:150'!M54)
Désolée !!
Re,
Remplacez le code "Dupliquer" par celui ci-dessous
Public i As Byte
Sub Dupliquer()
Dim j As Byte
Dim Existe As Boolean
'Creation de la nouvelle feuille
With Sheets("D-E-SEC")
For j = 1 To Sheets.Count
If Sheets(j).Name = CStr(.Cells(i + 19, 1)) Then Existe = 1: Exit For
Next j
If Existe = 0 Then
Sheets("1").Copy after:=Sheets(CStr(.Cells(i + 19, 1) - 1)) 'Sheets(Sheets.Count)
With ActiveSheet
.Name = Sheets("D-E-SEC").Cells(i + 19, 1).Value
.Range("D2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-2]"
.Range("D3").FormulaR1C1 = "='D-E-SEC'!R[" & 16 + i & "]C[-1]"
.Range("G2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-3]"
.Range("L2").FormulaR1C1 = "='D-E-SEC'!R[" & 17 + i & "]C[-7]"
End With
End If
Existe = 0
End With
'Mise en place des formules dans la feuille "feuille_vente_base"
With Sheets("Feuille_vente_base")
.Range("E18").FormulaR1C1 = "=SUM('1:" & ActiveSheet.Name & "'!R[36]C[6])"
.Range("E19").FormulaR1C1 = "=SUM('1:" & ActiveSheet.Name & "'!R[35]C[1])"
.Range("E20").FormulaR1C1 = "=SUM('1:" & ActiveSheet.Name & "'!R[34]C[3])"
.Range("E21").FormulaR1C1 = "=SUM('1:" & ActiveSheet.Name & "'!R[33]C[8])"
End With
End SubNB : Pour que cela fonctionne il faut que vos feuilles 1, 2, 3, ...etc se suivent donc actuellement dans votre fichier la feuille SD01 sera positionnée après les feuilles nommées 1, 2, 3.
Ah oui d'accord merci !!
C'est à dire que je ne peux jamais mettre de feuille intermédiaire ? ça ne m'arrange pas mais je vais essayer de trouver une autre solution pour la feuille intermédiaire !
Merci beaucoup ! :)