Excel dédoubler en renseignent colonnes

Louchadiere -  
Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'ai 1 liste de produits suivant 4 colonnes.
1er colonne N° Réf (maison) du produit
2eme désignation
3eme nom du fabricant
4 eme réf. produit du fabricant
J'ai pour 1 même Réf. (maison) plusieurs fabricant. Cela me doublonne les lignes de N° Réf. (maison). Je voudrai avoir sur la même ligne dans differentes colonnes les differents fabricant et la colonne suivante le N° de la Réf. fabricant.
J'espere que je suis clair merci de votre aide.

26 réponses

  • 1
  • 2
  1. phoceen8 Messages postés 1273 Statut Membre 160
     
    Salut,
    je ne suis pas sur de bien comprendre si je comprend bien en gros:

    Tu veux ajouter une/plusieurs colonne(s) entre la 3eme et la 4eme c'est ça ?
    Si tel est le cas, cliques droit sur la colonne de droite et insertion
    Ex: Ajouter une colonne entre C et D, va sur D en haut cliques droit Insertion et D sera décalé en E, a cause de l'apparition d'un nouveau C

    Je sais pas si j'ai bien compris alors redis moi :)

    Bon courage
    0
    1. Louchadiere Messages postés 8 Statut Membre
       
      Bonsoir,
      Malheureusement ce n'est pas si simple. Mon fichier comprend 21150 lignes et environ 2640 doublons ou triplons... Alors il me faudrait 1 macro... et je maitrise pas suffisement VBA...
      0
    2. phoceen8 Messages postés 1273 Statut Membre 160
       
      Ah ui d'accord je me doutais bien evidemment que c'était plus compliqué mais j'avai pas compris ça du tout... euh la honnetement je te conseille de voir avec raymond PENTIER ci dessous :)
      Bon Courage :)
      0
  2. Raymond PENTIER Messages postés 58216 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    Il te faudrait une macro : tu t'y connais en VBA ?
    0
    1. Louchadiere Messages postés 8 Statut Membre
       
      Bonsoir les Antilles en Auvergne à Volvic il fait 3°.
      Je ne maitise pas VBA, je "bricole" .
      Mon fichier comprend 21150 lignes et environ 2640 doublons ou triplons... Alors il me faudrait 1 macro...
      0
    2. Louchadiere Messages postés 8 Statut Membre
       
      En faite je pense qu'avec une macro qui s'arrêterait sur la 2éme ligne de valeurs identiques, puis copirait les 2 cellules fabricant et réf. en se décalant de 2 colonnes sur la droite et remonterait d'1 ligne, puis effacerait cette ligne testée et reviendrait sur la 1 er cellule de la ligne complémenté, pour continer le test de doublon.
      Merci de votre aide..
      0
  3. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Essayer de mettre un exemple avec une vingtaine de lignes (avec doublons ou triplons...) et sur la feuille 2, le résultat que vous souhaitez. Le mettre sur https://www.cjoint.com/ et poster le lien. Je regarderai ce qu'il est faisable !

    0
  4. Louchadiere Messages postés 8 Statut Membre
     
    Bonsoir
    J'espere que la manip à marchée.
    Merci de votre aide.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Il manque le lien qui a été créé .... Le copier et le coller sur le message... !

    0
  7. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci pour le fichier.
    Si j'ai bien compris, vous voulez supprimer les lignes dont le [ITEM_ID] est en double, .... Est-ce bien cela ?

    0
  8. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Essayer pour voir si cela vous convient.
    Votre exemple : https://www.cjoint.com/?3KDxldxctPE

    0
    1. Louchadiere Messages postés 8 Statut Membre
       
      Bonjour,
      Merci de votre aide.
      J'ai fais des petites macros avec excel 4. Maintenant c'est autres choses....
      Il me faut plus que la suppression des lignes de doublons, car ce qui fait la mutiplication des lignes des ITEM est en colonnes X, Y, et je veux inserer des colonnes pour concerver ces données en Z, AA, AB, AC, voir l'exemple.
      Cordialement
      0
  9. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Libre à vous d'utiliser une autre méthode.
    et je veux inserer des colonnes pour concerver ces données en Z, AA, AB, AC
    C'est étonnant car mon code prend en compte les valeurs des colonnes selon la ligne des titres du tableau de base !

    Si vous voulez de l'aide, merci de mettre sur https://www.cjoint.com/ et poster le lien qui a été créé... !

    Salutations.
    Le Pingou
    0
    1. Louchadiere Messages postés 8 Statut Membre
       
      Re,
      Je me fais mal comprendre, dans l'onglet Brut, le code article 0111857 est dupliqué 3 fois, car en colonne X ce code article a 4 fabricants differents. Dans l'onglet Resultat j'ai inseré 3 colonnes FABRICANT et REF FABRICANT, Z, AA, AB, AC, AD, AE, pour copier ces info.

      Cordialement
      Louchadiere
      0
  10. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Eh bien oui, j'ai repris le tout et j'ai constaté que cela m'avait échappé que vous vouliez conserver les valeurs [FABRICANT] et [REF FABRICANT] de la ligne supprimer et de les insérées dans la ligne unique.
    Ce n'est pas simple à réaliser car vous avez des doublons multiples (2, 3, 4, et plus).
    Merci de patienté ... dimanche oblige ...

    0
  11. Louchadiere
     
    Bonjour,
    La découverte est de la joie ça marche.
    Je vai tenté qlq. aménage car cette macro servira tout les mois.
    Merie beaucoup
    Louchadiere
    0
  12. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci pour l'information.
    Un détail m'a échappé, pour tenir compte de la plage complète de la feuille [Brut] dans la macro [Sub Doublons() ],
    veuillez remplacer cette ligne :
    Sheets("Brut").[A1:AE1000].AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=.[A1:A2], CopyToRange:=.[D1:F1], Unique:=True

    Par :
     Sheets("Brut").Range("A1").CurrentRegion.AdvancedFilter _  Action:=xlFilterCopy, CriteriaRange:=.[A1:A2], _ CopyToRange:=.[D1:F1], Unique:=True


    0
    1. Louchadiere
       
      Bonjour,
      Tous mes voeux pour cette nouvelle année et etc...
      Je me sers de cette macro chaque début de mois.
      J'ai rajouté le classement en grandissant des catalogues et des fournisseurs.
      Juste un problème que je n'arrive pas à résoudre la 3iéme phase se passe bien (classement en ligne des doublons au dela du 4iéme), mais la 4iéme phase l'injection des fabricants et Réf. au dela du 4iéme ne marche pas.
      En attendant votre aide je fais manuellement.
      Aussi ne serait il pas possible de déterminer le N° de la derniere ligne des tableaux pour paramétrer la macro.
      Merci de partager votre savoir
      Louchadiere
      0
  13. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Avec tous mes voeux pour 2013, oui c'est possible, mais pour cela il faut des éléments précis .... !

    0
  14. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Si le code n'a pas été modifier, essayer dans la procédure [Sub insertfabr()] d'insérer en dessous [Set sh ....] cette ligne :
     nbd = Range("nbmaxdbl")

    Et la ligne après [With] doit-être :
    .Columns("Z").Resize(, 2 * (nbd - 1)).Insert


    0
    1. Louchadiere
       
      Bonjour,
      L'inscertion des 2 lignes d'instruction permet d'inscerer toutes les colonnes suivant Nb max Dbl, mais ne copie par les entête de colonne et les données correspondant.
      Pourriez vous documenter chaques instruction, aici je pourrais peut être être autonome...
      Merci

      Sub SupDoublonsColB()
      ' 1 Copie liste sans doublon dans résultat
      Application.ScreenUpdating = False
      Range("nbmaxdbl") = 0
      Sheets("Resultat").Range("A1").CurrentRegion.Clear
      Set sh = Sheets("Articles_PDR_Requête")
      a = sh.Range("A1").CurrentRegion.Value
      Set cbd = sh.Range("B1:B" & sh.Cells(Rows.Count, 1).End(xlUp).Row)
      Dim c()
      ReDim c(1 To UBound(a, 1), 1 To UBound(a, 2))
      ligne = 1
      Set mondico = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(a)
      If Not mondico.exists(a(i, 2)) Then
      mondico.Add a(i, 2), 1
      For k = 1 To UBound(a, 2): c(ligne, k) = a(i, k): Next k

      nbd = WorksheetFunction.CountIf(cbd, a(i, 2))
      If nbd > Range("nbmaxdbl") Then Range("nbmaxdbl") = nbd
      ligne = ligne + 1
      End If
      Next
      Sheets("Resultat").[A1].Resize(mondico.Count, UBound(c, 2)) = c
      Set sh = Nothing
      Set cbd = Nothing
      Set mondico = Nothing
      Application.ScreenUpdating = True
      ' MsgBox "Voir feuille [Resultat]"
      End Sub

      Sub Doublons()
      '2 Extraire les doublons, liste [ITEM_ID / FABRICANT / REF FABRICANT] dans TemDbl
      Dim dl As Integer
      With Sheets("TempDbl")
      .Range("G2:P" & .Cells(Rows.Count, 4).End(xlUp).Row + 1).Clear
      Sheets("Articles_PDR_Requête").Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
      CriteriaRange:=.[A1:A2], CopyToRange:=.[D1:F1], Unique:=True

      dl = .Cells(Rows.Count, 4).End(xlUp).Row
      ' format nombre pour colonne [ITEM_ID]
      .Range("A3") = 1
      .Range("A3").Copy
      .Range("D2:D" & dl).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
      SkipBlanks:=False, Transpose:=False
      .Range("A3").Clear
      .Columns("D:F").Sort Key1:=.Columns("D"), Order1:=xlAscending, Header:=xlGuess
      End With

      'Classer ITEM_ID & FABBRICANT
      Range("d1").Select
      Selection.End(xlDown).Select
      Cells(ActiveCell.Row, "F").Select
      ActiveWorkbook.Names.Add Name:="fin_colon_F", RefersToR1C1:=Selection
      Range("D1:fin_colon_F").Select
      Columns("D:F").Select
      ActiveWorkbook.Worksheets("TempDbl").Sort.SortFields.Clear
      ActiveWorkbook.Worksheets("TempDbl").Sort.SortFields.Add Key:=Columns("D") _
      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      ActiveWorkbook.Worksheets("TempDbl").Sort.SortFields.Add Key:=Columns("E") _
      , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      With ActiveWorkbook.Worksheets("TempDbl").Sort
      .SetRange Range("D1:fin_colon_F")
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
      End With
      Columns("D:F").EntireColumn.AutoFit

      End Sub

      Sub recupfabrefsupdoub()
      '3 Range fabricant et réf par articles dans TempDbl
      With Sheets("TempDbl")
      nbd = Range("nbmaxdbl")
      For c = .Cells(Rows.Count, 4).End(xlUp).Row To 2 Step -1
      If .Cells(c, "D") = .Cells(c, "D").Offset(-1, 0) Then
      ' MsgBox "doublons : " & Cells(c, "D")
      .Range(.Cells(c, 5), .Cells(c, 5 + (nbd * 2) - 1)).Copy Destination:=.Cells(c, "g").Offset(-1, 0)
      .Rows(c).Delete
      End If
      Next c
      End With
      Columns("D:AK").EntireColumn.AutoFit
      End Sub

      Sub insertfabr()
      '4 Injecte les divers fabricants et réf dans Resultat
      Set sh = Sheets("TempDbl")
      nbd = Range("nbmaxdbl")

      With Sheets("Resultat")
      '.Columns("Z").Resize(, 2 * (6).Insert
      .Columns("Z").Resize(, 2 * (nbd - 1)).Insert

      sh.Range(sh.Cells(1, 7), sh.Cells(1, 12)).Copy Destination:=.Cells(1, "Z")
      For c = 2 To sh.Cells(Rows.Count, 5).End(xlUp).Row
      nuli = WorksheetFunction.Match(sh.Cells(c, 4), .Range("B:B"), False)
      sh.Range(sh.Cells(c, 5), sh.Cells(c, 12)).Copy Destination:=.Cells(nuli, "X")
      Next c
      End With
      Columns("x:AF").EntireColumn.AutoFit
      Range("A1").Select
      ActiveWindow.SplitRow = 0.705882352941177
      Selection.AutoFilter
      End Sub
      0
  15. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Le minimum d'explication se trouve directement dans les procédures.
    Le fichier : https://www.cjoint.com/?3Anqn13zCGP
    Note le fichier fonctionne correctement selon votre demande.

    0
  16. Louchadiere
     
    Bonsoir,
    Merci pour les explications.
    Sur un fichier de 23000 lignes, la macro ** insérer les lignes sans doublons
    bloque à la l'instruction Sheets("Resultat").[A1].Resize(mondico.Count, UBound(c, 2)) = c
    peut être un problème de mèmoire.
    Y a t'il une solution.
    0
  17. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Qu'elle est le message d'erreur exact !

    0
  18. Louchadiere
     
    Suite,
    Erreur d'execution 1004
    Erreur défini par l'application ou l'objet
    Pointé suivant l'instruction
    ** insérer les lignes sans doublons
    Sheets("Resultat").[A1].Resize(mondico.Count, UBound(c, 2)) = c
    Cordialement
    0
  19. Le Pingou Messages postés 12275 Date d'inscription   Statut Contributeur Dernière intervention   1 478
     
    Bonjour,
    Merci, oui effectivement il y a un problème avec un si grand nombre de lignes (23000 de 30 colonnes).
    Pour l'instant je n'ai pas de solution sans faire un test.
    Réponse pas avant mardi à moins qu'une autre personne intervienne... !i

    0
  • 1
  • 2