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.

3 réponses

  1. eriiic Messages postés 24581 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
    1. 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
  2. eriiic Messages postés 24581 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
    1. 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
    2. eriiic Messages postés 24581 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
    3. smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention   > eriiic Messages postés 24581 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
    4. eriiic Messages postés 24581 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
    5. 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
  3. eriiic Messages postés 24581 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
    1. 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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Et non, trop loin...
      Merci pour le retour et bonne continuation :-)
      eric
      0
    3. smile67 Messages postés 12 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci, bonne continuation à toi aussi

      Smile67
      0