A voir également:
- Selection de ligne
- Partage de photos en ligne - Guide
- Mètre en ligne - Guide
- Aller à la ligne excel - Guide
- Formulaire en ligne de meta - Guide
- Site de vente en ligne particulier - Guide
5 réponses
Bonjour,
Manuellement avec :
- un tri par la colonne A
- un filtre sur cette colonne
- des copié/collé.
Manuellement avec :
- un tri par la colonne A
- un filtre sur cette colonne
- des copié/collé.
Le tri peut être fait manuellement une seule fois.
Après ne reste plus qu'à automatiser les copié/collé.
Tu as, par contre, 3000 clients? comportant chacun entre 100 et 150 lignes?
Après ne reste plus qu'à automatiser les copié/collé.
Tu as, par contre, 3000 clients? comportant chacun entre 100 et 150 lignes?
Bonjour,
Quelques infos complémentaires pour ne pas que tu aies trop de choses à adapter :
- nom de la feuille contenant tes données,
- Dans qu'elles colonnes sont situées les données à copier-coller,
- Les noms des machines sont dans qu'elle colonne?
- y a t'il une ligne d'entête? Si oui, laquelle? 1ère ligne? autre?
🎼 Cordialement,
Franck 🎶
Quelques infos complémentaires pour ne pas que tu aies trop de choses à adapter :
- nom de la feuille contenant tes données,
- Dans qu'elles colonnes sont situées les données à copier-coller,
- Les noms des machines sont dans qu'elle colonne?
- y a t'il une ligne d'entête? Si oui, laquelle? 1ère ligne? autre?
🎼 Cordialement,
Franck 🎶
Bon...
Voici un premier jet.
A adapter, les deux constantes déclarées dans l'entête du module.
Il s'agit de tes entêtes de colonne...
Il peut y avoir un souci au niveau du format de tes données dans les feuilles créées. Notamment tu parlais de temps de fabrication. Il faudra voir ça après essai de cette macro.
Essaye là donc sur une copie de ton classeur, pas sur l'original...
J'ai également pré-supposé que tu as préalablement trié tes données...
Reviens nous dire ce qu'il en est ainsi que le temps d'exécution...
A insérer dans un module standard et lancer par ALT+F8
Voici un premier jet.
A adapter, les deux constantes déclarées dans l'entête du module.
Il s'agit de tes entêtes de colonne...
Il peut y avoir un souci au niveau du format de tes données dans les feuilles créées. Notamment tu parlais de temps de fabrication. Il faudra voir ça après essai de cette macro.
Essaye là donc sur une copie de ton classeur, pas sur l'original...
J'ai également pré-supposé que tu as préalablement trié tes données...
Reviens nous dire ce qu'il en est ainsi que le temps d'exécution...
A insérer dans un module standard et lancer par ALT+F8
Option Explicit '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* A ADAPTER Const ENTETE_A$ = "Machine" 'entête colonne A Const ENTETE_B$ = "Temps de Fab" 'entête colonne B '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Sub Creation_Feuilles_Machine() Dim wshSheet As Worksheet Dim Plage As Range, DL&, L&, Cpt& Dim Tb_In, Dico As Object Dim t As Double t = Timer Set Dico = CreateObject("Scripting.Dictionary") With Worksheets("procede_etape") DL = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row Set Plage = .Range("A2:B" & DL) End With Tb_In = Plage Application.ScreenUpdating = False For L = LBound(Tb_In, 1) To UBound(Tb_In, 1) If Not Dico.Exists(Tb_In(L, 1)) Then Dico(Tb_In(L, 1)) = "" Set wshSheet = Add_Feuil(Replace(Tb_In(L, 1), "*", "")) With wshSheet .Range("A1") = ENTETE_A .Range("B1") = ENTETE_B End With Cpt = 1 End If Cpt = Cpt + 1 With wshSheet .Range("A" & Cpt) = Tb_In(L, 1) .Range("B" & Cpt) = Tb_In(L, 2) End With Next L MsgBox Timer - t & " secondes" End Sub Function Add_Feuil(NF$) As Worksheet Dim Feuil_Exist As Boolean With ThisWorkbook On Error Resume Next Feuil_Exist = (.Worksheets(NF).Name = NF) On Error GoTo 0 If Feuil_Exist = False Then .Worksheets.Add After:=.Worksheets(.Worksheets.Count) ActiveSheet.Name = NF End If Set Add_Feuil = .Worksheets(NF) End With End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour, lorsque je le lance, voici l'erreur qu'il me met :" le nom de feuille est non valide" pour la ligne : ActiveSheet.Name = NF.
J'ai essayé de le modifier mais cela ne change rien
J'ai essayé de le modifier mais cela ne change rien
Cela peut être du à d'autres caractères indésirables...
Essaye ce code et dit moi ce qui s'affiche avant le plantage :
Essaye ce code et dit moi ce qui s'affiche avant le plantage :
Option Explicit '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* A ADAPTER Const ENTETE_A$ = "Machine" 'entête colonne A Const ENTETE_B$ = "Temps de Fab" 'entête colonne B '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Sub Creation_Feuilles_Machine() Dim wshSheet As Worksheet Dim Plage As Range, DL&, L&, Cpt& Dim Tb_In, Dico As Object Dim t As Double t = Timer Set Dico = CreateObject("Scripting.Dictionary") With Worksheets("procede_etape") DL = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row Set Plage = .Range("A2:B" & DL) End With Tb_In = Plage Application.ScreenUpdating = False For L = LBound(Tb_In, 1) To UBound(Tb_In, 1) If Not Dico.Exists(Tb_In(L, 1)) Then Dico(Tb_In(L, 1)) = "" Set wshSheet = Add_Feuil(Replace(Tb_In(L, 1), "*", "")) With wshSheet .Range("A1") = ENTETE_A .Range("B1") = ENTETE_B End With Cpt = 1 End If Cpt = Cpt + 1 With wshSheet .Range("A" & Cpt) = Tb_In(L, 1) .Range("B" & Cpt) = Tb_In(L, 2) End With Next L MsgBox Timer - t & " secondes" End Sub Function Add_Feuil(NF$) As Worksheet Dim Feuil_Exist As Boolean With ThisWorkbook On Error Resume Next Feuil_Exist = (.Worksheets(NF).Name = NF) On Error GoTo 0 If Feuil_Exist = False Then .Worksheets.Add After:=.Worksheets(.Worksheets.Count) MsgBox NF ActiveSheet.Name = NF End If Set Add_Feuil = .Worksheets(NF) End With End Function
Non, c'est le caractère spécial " qui pose souci...
Essaye ceci :
Essaye ceci :
Option Explicit '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* A ADAPTER Const ENTETE_A$ = "Machine" 'entête colonne A Const ENTETE_B$ = "Temps de Fab" 'entête colonne B '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* Sub Creation_Feuilles_Machine() Dim wshSheet As Worksheet, strNF$ Dim Plage As Range, DL&, L&, Cpt& Dim Tb_In, Dico As Object Dim t As Double t = Timer Set Dico = CreateObject("Scripting.Dictionary") With Worksheets("procede_etape") DL = .Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row Set Plage = .Range("A2:B" & DL) End With Tb_In = Plage Application.ScreenUpdating = False For L = LBound(Tb_In, 1) To UBound(Tb_In, 1) If Not Dico.Exists(Tb_In(L, 1)) Then Dico(Tb_In(L, 1)) = "" strNF = Replace(Replace(Tb_In(L, 1), "*", ""), """", "") Set wshSheet = Add_Feuil(strNF) With wshSheet .Range("A1") = ENTETE_A .Range("B1") = ENTETE_B End With Cpt = 1 End If Cpt = Cpt + 1 With wshSheet .Range("A" & Cpt) = Tb_In(L, 1) .Range("B" & Cpt) = Tb_In(L, 2) End With Next L MsgBox Timer - t & " secondes" End Sub Function Add_Feuil(NF$) As Worksheet Dim Feuil_Exist As Boolean With ThisWorkbook On Error Resume Next Feuil_Exist = (.Worksheets(NF).Name = NF) On Error GoTo 0 If Feuil_Exist = False Then .Worksheets.Add After:=.Worksheets(.Worksheets.Count) MsgBox NF ActiveSheet.Name = NF End If Set Add_Feuil = .Worksheets(NF) End With End Function
N'y a t-il pas un moyen de le faire automatiquement ? J'ai plus de 3000 blocs de lignes identiques