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   -
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.
A voir également:

3 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
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
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
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
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
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.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
j'obtiens un bug
oui. Mais encore ???

Je viens de tester sur 9000 lignes pas de soucis.

Par contre je ne savais pas que tu avais tant de lignes. Ajoute au début :
Application.ScreenUpdating = False
et tu le remets à true à la fin.
Tu auras le bug beaucoup plus vite ;-)
eric
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention  
 
Salut,

Il me met erreur d'éxécution '1004', Erreur défini par l'application ou par l'objet.

Merci.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
c'est vague et fourre-tout comme code erreur...
Chez moi ça tourne bien : Classeur3.xls
il faut repérer sur quelle ligne ça plante et évaluer les variables et les cellules en cause à moment
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Salut,

Je te fais parvenir mon fichier,si tu ve bien tu pourras voir plus aisément d'ou vient le problème. Par contre comment je pe joindre un fichier à mon commentaire, comme tu vien de le faire à ton precédent message ?

Merci.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
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
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Mille fois merci, je suis aux anges. C vraiment cool de ta part, merci pour ta générosité et de ton efficacité. Peut-être que tu es proche de Strasbourg, je t'invite avec grand plaisir en guise de remerciement. Sinon s'il y a qqch que je peux faire pour toi je suis là.

smile67.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 281
 
Et non, trop loin...
Merci pour le retour et bonne continuation :-)
eric
0
smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
 
Merci, bonne continuation à toi aussi

Smile67
0