Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Duplication de Feuil

14 réponses
Avatar
Manu
Bonsoir,

Je vous souhaite avant tout une excellente année 2019 à tous !

J'ai un soucis de duplication de Feuil, je m'explique

- J'ai dans une feuil nommé Ref une liste en colonne A d'environ 180
Reference
- J'ai une autre Feuil nommé Modèle stock

Je souhaiterais avoir un bouton qui crée autant de feuil que de ref avec
comme nom de feuil le nom de chacune des ref mais que chaque feuil soit
identique à la Feuil Modèle stock

En revanche si il y a un changement lors de ma prochaine importation de ref
dans ma feuil Ref, je souhaiterais qu'il ne touche jamais aux feuil déjà
créer mais qu'il ajoute les nouvelles feuil des nouvelles ref et si possible
les trier en croissant.

J'espère avoir été assez clair...

On m'avait déjà donné cela et qui m'est très utile mais qui ne colle pas
avec mon nouveau besoin

Sub ajout_feuilles()
Dim nom, c
For Each c In Range("liste")
nom = c.Value
Sheets.Add Count:=1, after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = nom
Next c
End Sub

Merci

Manu


---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus

10 réponses

1 2
Avatar
MichD
Bonjour,
Tu as 2 variables à définir + le nom de la feuille et la plage de
cellules où est la liste des feuilles à créer.
'-----------------------------------------------
Sub Creation_Feuilles()
Dim Rg As Range, T(), Elt As Variant
Dim Sh As Worksheet, A As Long
Dim Sht As Worksheet
'***********Variables à définir*************
'Remplace "Modèle" par le nom de ta feuille modèle
Set Sht = Worksheets("Modèle")
'L'index de la première feuille d'où doivent s'insérer
'les autres feuilles semblables au modèle
A = 1
'********************************************
With Sht ' Worksheets("NomFeuilleOÙestLaListeDesFeuilles")
'Définir la plage de cellules
Set Rg = .Range("A1:A" & .Range("A" & _
.Rows.Count).End(xlUp).Row)
T = Rg.Value
Tri_Croissant_Noms_Feuille T
End With
T = Tri_Croissant_Noms_Feuille(T)
Application.ScreenUpdating = False
On Error Resume Next
For Each Elt In T
Set Sh = Worksheets(Elt)
If Err <> 0 Then
Err = 0
With Sht
.Copy After:=Worksheets(Worksheets(A).Index)
Worksheets(Worksheets(A + 1).Index).Name = Elt
A = A + 1
End With
End If
Next
Application.ScreenUpdating = True
End Sub
'-----------------------------------------------
Function Tri_Croissant_Noms_Feuille(T As Variant) _
As Variant
First = LBound(T, 1)
Last = UBound(T, 1)
For i = First To Last - 1
For j = i + 1 To Last
If T(i, 1) > T(j, 1) Then
Temp = T(j, 1)
T(j, 1) = T(i, 1)
T(i, 1) = Temp
End If
Next j
Next i
Tri_Croissant_Noms_Feuille = T
End Function
'-----------------------------------------------
MichD
Avatar
MichD
Le 18/janv./2019 à 12:47, MichD a écrit :
With Sht ' Worksheets("NomFeuilleOÙestLaListeDesFeuilles")

Attention, cette ligne devrait :
With Worksheets("NomFeuilleOÙestLaListeDesFeuilles")
MichD
Avatar
Manu
Bonjour
C'est nickel Mich, merci beaucoup, ca va vraiment m'être très utile.
Manu
"MichD" a écrit dans le message de groupe de discussion :
q1t3ro$1ob3$
Le 18/janv./2019 à 12:47, MichD a écrit :
With Sht ' Worksheets("NomFeuilleOÙestLaListeDesFeuilles")

Attention, cette ligne devrait :
With Worksheets("NomFeuilleOÙestLaListeDesFeuilles")
MichD
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
MichD
Juste un rappel :
Ces caractères ne sont pas admissibles dans le nom de l'onglet d'une
feuille de calcul : * / ? : [ ]
Le nombre total de caractères dans le nom de l'onglet d'une feuille de
calcul est de 31.
La procédure ne traite pas explicitement ces 2 éléments dans la
procédure. Si l'un de noms répond à l'un de ces critères, la feuille va
se créer, mais elle portera un nom du type "Feuil1", appellation par défaut.
Tu peux appeler la procédure plus d'une fois, seuls les nouveaux noms de
la liste provoqueront la création d'une nouvelle feuille de calcul.
MichD
Avatar
Manu
Oui, j'ai testé et effectivement seuls les nouveaux noms se fabriquent et
c'est exactement ce qu'il me faut, j'essaie toutefois de modifier ta
procédure sans succès pour que le tri des feuil se fasse même après avoir
recliqué sur le bouton.
Manu
"MichD" a écrit dans le message de groupe de discussion :
Juste un rappel :
Ces caractères ne sont pas admissibles dans le nom de l'onglet d'une
feuille de calcul : * / ? : [ ]
Le nombre total de caractères dans le nom de l'onglet d'une feuille de
calcul est de 31.
La procédure ne traite pas explicitement ces 2 éléments dans la
procédure. Si l'un de noms répond à l'un de ces critères, la feuille va
se créer, mais elle portera un nom du type "Feuil1", appellation par défaut.
Tu peux appeler la procédure plus d'une fois, seuls les nouveaux noms de
la liste provoqueront la création d'une nouvelle feuille de calcul.
MichD
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
MichD
pour que le tri des feuils se fasse même après
avoir recliqué sur le bouton.

Pour obtenir un tri des feuilles qui soit indépendant de la création de
ces dernières, tu as un exemple complet du tri des feuilles dans un
classeur.
https://www.cjoint.com/c/IAtnzctmSuC
MichD
Avatar
Manu
Impec !!!
Merci Mich
"MichD" a écrit dans le message de groupe de discussion :
pour que le tri des feuils se fasse même après
avoir recliqué sur le bouton.

Pour obtenir un tri des feuilles qui soit indépendant de la création de
ces dernières, tu as un exemple complet du tri des feuilles dans un
classeur.
https://www.cjoint.com/c/IAtnzctmSuC
MichD
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
Manu
Bonjour,
Mich m'a donné ce code qui permet de dupliquer et créer des feuil avec des
noms qui se trouvent en colonne A de la feuil "950" et qui prend comme
modèle de Feuil, la Feuil "02 modèle". Le soucis c'est que ca me duplique
également la Feuil "02 modèle" soit en parfois une seule copie soit parfois
en autant de copies qu'il y a de noms dans la colonne A de la feuil "950".
Je souhaiterais qu'il ne copie jamais cette feuil "02 modèle".
Sub Creation_Feuilles()
Dim Rg As Range, T(), Elt As Variant
Dim Sh As Worksheet, A As Long
Dim Sht As Worksheet
'***********Variables à définir*************
'Remplace "Modèle" par le nom de ta feuille modèle
Set Sht = Worksheets("02 Modèle")
'L'index de la première feuille d'où doivent s'insérer
'les autres feuilles semblables au modèle
A = 1
'********************************************
With Worksheets("950")
'Définir la plage de cellules
Set Rg = .Range("A1:A" & .Range("A" & _
.Rows.Count).End(xlUp).Row)
T = Rg.Value
Tri_Croissant_Noms_Feuille T
End With
T = Tri_Croissant_Noms_Feuille(T)
Application.ScreenUpdating = False
On Error Resume Next
For Each Elt In T
Set Sh = Worksheets(Elt)
If Err <> 0 Then
Err = 0
With Sht
.Copy After:=Worksheets(Worksheets(A).Index)
Worksheets(Worksheets(A + 1).Index).Name = Elt
A = A + 1
End With
End If
Next
Application.ScreenUpdating = True
End Sub
Encore Merci
Manu
"Manu" a écrit dans le message de groupe de discussion :
q1vm1b$qfj$
Impec !!!
Merci Mich
"MichD" a écrit dans le message de groupe de discussion :
pour que le tri des feuils se fasse même après
avoir recliqué sur le bouton.

Pour obtenir un tri des feuilles qui soit indépendant de la création de
ces dernières, tu as un exemple complet du tri des feuilles dans un
classeur.
https://www.cjoint.com/c/IAtnzctmSuC
MichD
---
L'absence de virus dans ce courrier électronique a été vérifiée par le
logiciel antivirus Avast.
https://www.avast.com/antivirus
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
Avatar
MichD
Bonjour,
Essaie comme ceci :
'-------------------------------------
Sub Creation_Feuilles()
Dim Rg As Range, T(), Elt As Variant
Dim Sh As Worksheet, A As Long
Dim Sht As Worksheet, FMmodel As String
'***********Variables à définir*************
'Remplace "Modèle" par le nom de ta feuille modèle
Set Sht = Worksheets("02 Modèle")
'L'index de la première feuille d'où doivent s'insérer
'les autres feuilles semblables au modèle
A = 1
'********************************************
With Worksheets("950")
'Définir la plage de cellules
Set Rg = .Range("A1:A" & .Range("A" & _
.Rows.Count).End(xlUp).Row)
T = Rg.Value
Tri_Croissant_Noms_Feuille T
End With
T = Tri_Croissant_Noms_Feuille(T)
Application.ScreenUpdating = False
On Error Resume Next
For Each Elt In T
If Elt <> Sht.Name Then
Set Sh = Worksheets(Elt)
If Err <> 0 Then
Err = 0
With Sht
.Copy After:=Worksheets(Worksheets(A).Index)
Worksheets(Worksheets(A + 1).Index).Name = Elt
A = A + 1
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub
'-------------------------------------
MichD
Avatar
Manu
Pareil qu'avec l'autre code, Voici ce qu'il se passe :
Je clic une fois sur le bouton, la macro s'exécute parfaitement et fabrique
autant de Feuil de ce que comporte la Col A de la feuil "950" (110 feuil)
mais fabrique en plus une copie de la Feuil "02 Modèle"
Je supprime cette feuille puis pour tester je change un nom de la col A de
la feuil "950"
Je reclic sur le bouton, et là il m'ajoute bien le nouveau nom dans les
feuil mais me copie 110 fois la Feuil "02 modèle"
Manu
Bonjour,
Essaie comme ceci :
'-------------------------------------
Sub Creation_Feuilles()
Dim Rg As Range, T(), Elt As Variant
Dim Sh As Worksheet, A As Long
Dim Sht As Worksheet, FMmodel As String
'***********Variables à définir*************
'Remplace "Modèle" par le nom de ta feuille modèle
Set Sht = Worksheets("02 Modèle")
'L'index de la première feuille d'où doivent s'insérer
'les autres feuilles semblables au modèle
A = 1
'********************************************
With Worksheets("950")
'Définir la plage de cellules
Set Rg = .Range("A1:A" & .Range("A" & _
.Rows.Count).End(xlUp).Row)
T = Rg.Value
Tri_Croissant_Noms_Feuille T
End With
T = Tri_Croissant_Noms_Feuille(T)
Application.ScreenUpdating = False
On Error Resume Next
For Each Elt In T
If Elt <> Sht.Name Then
Set Sh = Worksheets(Elt)
If Err <> 0 Then
Err = 0
With Sht
.Copy After:=Worksheets(Worksheets(A).Index)
Worksheets(Worksheets(A + 1).Index).Name = Elt
A = A + 1
End With
End If
End If
Next
Application.ScreenUpdating = True
End Sub
'-------------------------------------
MichD
---
L'absence de virus dans ce courrier électronique a été vérifiée par le logiciel antivirus Avast.
https://www.avast.com/antivirus
1 2