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

5 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Manuellement avec :
    - un tri par la colonne A
    - un filtre sur cette colonne
    - des copié/collé.
    0
    1. sam
       
      Merci
      N'y a t-il pas un moyen de le faire automatiquement ? J'ai plus de 3000 blocs de lignes identiques
      0
  2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. 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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    3. 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
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > sam
       
      Et tes résultats, tu les veux ou?
      Dans 82 nouvelles feuilles?
      Dans 82 nouveaux classeurs?
      Autre?
      0
    5. sam
       
      Dans 82 nouvelles feuilles dans l'idéal
      0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. 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
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    3. sam
       
      :) alors oui, il y a un * a chaque début de nom et un _. Il y a aussi des points..
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    5. sam
       
      Suppression c'est niquel :)
      0
  4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. 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
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > 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
    4. 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
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > sam
       
      Quel est le nom EXACT de la machine : *D.LAB.000NN.MACHINELABO_OUI_ZONETAKD.3C
      0