Selection de ligne
sam
-
sam -
sam -
Bonjour,
Je dispose d'un fichier excel dont les lignes en A sont identiques en lot ( on va avoir par ex, 122 lignes avec "client1", 146 lignes avec "client2" etc)
J'aimerai savoir comment faire pour sélectionner les lignes identiques entre elles pour les ranger dans des tableaux différents..
Merci pour vos réponse
Je dispose d'un fichier excel dont les lignes en A sont identiques en lot ( on va avoir par ex, 122 lignes avec "client1", 146 lignes avec "client2" etc)
J'aimerai savoir comment faire pour sélectionner les lignes identiques entre elles pour les ranger dans des tableaux différents..
Merci pour vos réponse
5 réponses
-
Bonjour,
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? -
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 🎶 -
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+F8Option 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-
Cela peut être du à d'autres caractères indésirables...
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 :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 -
-
-