Excel dédoubler en renseignent colonnes
Louchadiere
-
Le Pingou Messages postés 12714 Date d'inscription Statut Contributeur Dernière intervention -
Le Pingou Messages postés 12714 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.
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:
- Excel dédoubler en renseignent colonnes
- Formule moyenne excel plusieurs colonnes - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Déplacer colonne excel - Guide
- Liste déroulante excel - Guide
- Comment faire des colonnes sur word - Guide
26 réponses
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
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
Il te faudrait une macro : tu t'y connais en VBA ?
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..
Merci de votre aide..
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 !
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 !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
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 ?
Bonjour,
Essayer pour voir si cela vous convient.
Votre exemple : https://www.cjoint.com/?3KDxldxctPE
Essayer pour voir si cela vous convient.
Votre exemple : https://www.cjoint.com/?3KDxldxctPE
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
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
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
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
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 ...
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 ...
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
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
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 :
Par :
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
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
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
Bonjour,
Avec tous mes voeux pour 2013, oui c'est possible, mais pour cela il faut des éléments précis .... !
Avec tous mes voeux pour 2013, oui c'est possible, mais pour cela il faut des éléments précis .... !
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 :
Et la ligne après [With] doit-être :
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
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
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
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.
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.
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.
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.
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
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
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...
Bon Courage :)