Selection de ligne

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



A voir également:

5 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,

Manuellement avec :
- un tri par la colonne A
- un filtre sur cette colonne
- des copié/collé.
0
sam
 
Merci
N'y a t-il pas un moyen de le faire automatiquement ? J'ai plus de 3000 blocs de lignes identiques
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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?
0
sam
 
Non les clients c'était pour donner un exemple, pour moi il s'agit de machine et de temps de fab. Mais quand j'automatiserais les copier coller, comment faire en sorte qu'il reconnaisse quand je passe à un autre nom de machine ?
Merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
Peu importe...
Client, machine, pépitos ou cafés, on s'en fiche.
J'ai besoin d'en connaitre le nombre. Ainsi que le nombre moyen approximatif de lignes par machine. Ainsi que le nombre de colonnes à copié-collé.
0
sam
 
Après 1er tri, il me reste 82 lots de machines avec des lignes variant de 200 a parfois 2000 selon le lots, c'est très disparate. Et j'ai 3 colonnes a copier coller
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
Et tes résultats, tu les veux ou?
Dans 82 nouvelles feuilles?
Dans 82 nouveaux classeurs?
Autre?
0
sam
 
Dans 82 nouvelles feuilles dans l'idéal
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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 🎶
0
sam
 
Bonjour,
le nom de la feuille est "procede_etape"
il s'agit des colonnes A et B à copier
Le nom des machines sont dans la colonne A et il y a une ligne d'entête, la 1ère.
Merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
Et une dernière question (promis après je m'y met...) :
Tes noms de machine comportent ils des caractères spéciaux?
Si oui, lesquels?
0
sam
 
:) alors oui, il y a un * a chaque début de nom et un _. Il y a aussi des points..
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
le signe * devra être remplacé ou supprimé dans le nom des feuilles. Ta préférence? Suppression ou remplacement? Si remplacement, par quoi?
0
sam
 
Suppression c'est niquel :)
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
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

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sam
 
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
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
0
sam
 
Il m'ouvre une fenêtre microsoft excel avec juste écrit : *D.LAB.000NN.MACHINELABO_OUI_ZONETAKD.3C"
ceci est le nom de ma machine dans la base de donnée. Peut-être que le nom est trop long ? Car pour tester j'ai modifié à la main le nom d'une machine et ça a marché
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
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
0
sam
 
Oups le caractère " s'est glissé par mégarde. Il n'y en a pas dans le nom de la machine. J'ai cependant relancé le code et il y a le même message
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761 > sam
 
Quel est le nom EXACT de la machine : *D.LAB.000NN.MACHINELABO_OUI_ZONETAKD.3C
0