Selection de ligne
sam -
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
La discussion porte sur comment regrouper les lignes de la colonne A dans Excel et les placer dans des feuilles séparées selon chaque valeur identique. Plusieurs propositions évoquent l'utilisation de VBA, notamment une macro qui parcourt les données et crée une feuille par valeur unique, tout en gérant les noms et les caractères invalides. Des remarques soulignent des limites comme la longueur des noms de feuille (31 caractères) et des erreurs 'nom de feuille non valide' liées à certains noms trop longs ou contenant des caractères spéciaux. D'autres échanges suggèrent de nettoyer les noms (suppression de caractères spéciaux et tri des valeurs) avant la création des feuilles pour éviter les messages d'erreur.
-
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 -
-
-