Macro doublons excel
smile67
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
smile67 Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
smile67 Messages postés 12 Date d'inscription Statut Membre Dernière intervention -
bonjour,
je souhaiterai créer une macro sur un fichier excel. J'ai
dans la colonne B de mon ficher des doublons. La
macro doit détecter les doublons dans la colonne B. En première ligne
de chaque doublon détecté insérer une ligne vide, copier le doublon
et le coller sur la cellule de la ligne nouvellement insérer dans la colonne B.
J'ai ça:
Col A----------Col B
1 -------------- AA
2 -------------- AA
3 -------------- AA
4 -------------- BB
5 -------------- CC
6 -------------- CC
7 -------------- CC
8 -------------- DD
9 -------------- DD
Je veux obtenir :
Col A ---------Col B
-------------- AA
1-------------- AA
2 -------------- AA
3 -------------- AA
4 -------------- BB
-------------- CC
5 -------------- CC
6 -------------- CC
7 -------------- CC
-------------- DD
8 -------------- DD
9 -------------- DD
Merci de votre aide.
je souhaiterai créer une macro sur un fichier excel. J'ai
dans la colonne B de mon ficher des doublons. La
macro doit détecter les doublons dans la colonne B. En première ligne
de chaque doublon détecté insérer une ligne vide, copier le doublon
et le coller sur la cellule de la ligne nouvellement insérer dans la colonne B.
J'ai ça:
Col A----------Col B
1 -------------- AA
2 -------------- AA
3 -------------- AA
4 -------------- BB
5 -------------- CC
6 -------------- CC
7 -------------- CC
8 -------------- DD
9 -------------- DD
Je veux obtenir :
Col A ---------Col B
-------------- AA
1-------------- AA
2 -------------- AA
3 -------------- AA
4 -------------- BB
-------------- CC
5 -------------- CC
6 -------------- CC
7 -------------- CC
-------------- DD
8 -------------- DD
9 -------------- DD
Merci de votre aide.
3 réponses
-
Bonjour,
Un exemple de ce que tu pourrais faire :Sub ajDbl() Dim i As Long For i = [B65536].End(xlUp).Row - 2 To 1 Step -1 If Cells(i, 2) <> Cells(i + 1, 2) And Cells(i + 1, 2) = Cells(i + 2, 2) Then Rows(i + 1).Insert Shift:=xlDown Cells(i + 1, 2) = Cells(i + 2, 2) End If Next i If Cells(1, 2) = Cells(2, 2) Then Rows(1).Insert Shift:=xlDown Cells(1, 2) = Cells(2, 2) End If End Sub
eric-
Salu Eric,
J'ai testé le code il répond parfaitement à mes attentes. Un grand merci pour commencer cela faisait trois semaines que je cherchais la solution. J'ai une autre demande si ce n'est pas trop pour toi, ce serait :
Après execution de ton code, j'insère une colonne entre ColA et ColB. J'aimerai insérer en face de chaque doublon de la colonne C (anciennement B) un code. J'aimerai obtenir au final :
Col A ----------Clolonne inséré-------------------Col C
P1----------------------------------------------------------------
1---------------------P1------------------------------------- AA
2 --------------------P1------------------------------------- AA
3 --------------------P1------------------------------------- AA
4 ------------------------------------------------------------- BB
P2------------------------------------------------------------ CC
5 --------------------P2------------------------------------- CC
6 --------------------P2------------------------------------- CC
7 --------------------P2------------------------------------- CC
P3------------------------------------------------------------ DD
8 --------------------P3------------------------------------- DD
9 --------------------P3------------------------------------- DD
Encore un grand merci pour ton précédent code.
-
-
Bonsoir,
J'ai complété la macro, regarde si ça va :Sub ajDbl() Dim i As Long, cpt As Long For i = [B65536].End(xlUp).Row - 2 To 1 Step -1 If Cells(i, 2) <> Cells(i + 1, 2) And Cells(i + 1, 2) = Cells(i + 2, 2) Then Rows(i + 1).Insert Shift:=xlDown Cells(i + 1, 2) = Cells(i + 2, 2) End If Next i If Cells(1, 2) = Cells(2, 2) Then Rows(1).Insert Shift:=xlDown Cells(1, 2) = Cells(2, 2) End If Columns("B:B").Insert Shift:=xlToRight For i = 1 To [C65536].End(xlUp).Row If Cells(i, 1) = "" Then cpt = cpt + 1 Cells(i, 1) = "P" & cpt ElseIf cpt <> 0 And i <> 1 And Cells(i, 3) = Cells(i - 1, 3) Then Cells(i, 2) = "P" & cpt End If Next i End Sub
eric-
Salut Eric,
quand j'execute le programme sur un fichier avec 10 lignes le code s'execute bien, par contre quand je l'execute avec mon fichier excel qui comprend 5000 lignes, le code s'execute puis à la fin j'obtiens un bug sur la ligne de code " ElseIf cpt <> 0 And i <> 1 And Cells(i, 3) = Cells(i - 1, 3) Then". Toutes les lignes sont inséré comme il faut dans mon document, la colonne aussi, mais les codes P1, p2 etc.. ne sont pas inséré.
Je regarde de mon côté aussi si je pe faire qqch, je te tien au courant.
Merci. -
-
-
-
-
-
Tu as une ligne de titre, il faut commencer ou finir les boucles sur la ligne 2 et non la 1.
Je t'ai déplacé un test pour éviter l'erreur et ajouté screenupdating pour accélérer le traitement.
smile67.xls
Ca donne droit à 1 bouteille de chaque ? ;-)
eric