Excel dédoubler en renseignent colonnes

Fermé
Louchadiere - 26 nov. 2012 à 21:28
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 - 15 janv. 2013 à 23:07
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.

A voir également:

26 réponses

phoceen8 Messages postés 1164 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 1 octobre 2021 156
26 nov. 2012 à 21:43
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
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
27 nov. 2012 à 18:10
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
phoceen8 Messages postés 1164 Date d'inscription mardi 9 février 2010 Statut Membre Dernière intervention 1 octobre 2021 156
27 nov. 2012 à 18:14
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
Raymond PENTIER Messages postés 58396 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 25 avril 2024 17 094
27 nov. 2012 à 04:23
Il te faudrait une macro : tu t'y connais en VBA ?
0
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
27 nov. 2012 à 18:13
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
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
28 nov. 2012 à 19:36
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
28 nov. 2012 à 22:52
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
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
29 nov. 2012 à 18:54
Bonsoir
J'espere que la manip à marchée.
Merci de votre aide.
0

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

Posez votre question
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
29 nov. 2012 à 21:13
Bonjour,
Il manque le lien qui a été créé .... Le copier et le coller sur le message... !

0
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
29 nov. 2012 à 21:54
Je ne comprends pas tout ..
https://www.cjoint.com/?0KDv00KVnOl
0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
29 nov. 2012 à 22:36
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
29 nov. 2012 à 23:11
Bonjour,
Essayer pour voir si cela vous convient.
Votre exemple : https://www.cjoint.com/?3KDxldxctPE

0
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
1 déc. 2012 à 15:21
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
Modifié par Le Pingou le 1/12/2012 à 15:54
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
Louchadiere Messages postés 8 Date d'inscription lundi 26 novembre 2012 Statut Membre Dernière intervention 11 février 2013
1 déc. 2012 à 17:54
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
1 déc. 2012 à 22:48
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
3 déc. 2012 à 10:55
Bonjour,
Je vous laisse découvrir et essayer ma proposition : https://www.cjoint.com/?3Ldk3hNCHSR

0
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
4 déc. 2012 à 21:48
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
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
7 janv. 2013 à 21:56
Bonjour,
Avec tous mes voeux pour 2013, oui c'est possible, mais pour cela il faut des éléments précis .... !

0
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
7 janv. 2013 à 23:05
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
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
13 janv. 2013 à 16:14
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
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
13 janv. 2013 à 21:56
Bonjour,
Qu'elle est le message d'erreur exact !

0
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
Le Pingou Messages postés 12046 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 26 avril 2024 1 427
13 janv. 2013 à 23:15
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