IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

MACRO qui supprime données identiques [XL-2002]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    technicien pme
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien pme
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut MACRO qui supprime données identiques
    Bonjour,

    Je suis nouveau sur ce forum, je m'inscrits à l'instant.

    Je débute dans la création de MACRO et j'aurais besoin d'aide.

    Vous trouverez ci-joint une MACRO que j'ai réussit à récupérer mais elle ne répond pas entièrement à mes attentes et je ne sais comment arriver au résultat que je souhaite.

    Je m'explique :
    1 - j'ai plusieurs centaines de lignes avec des infos différentes provenant d'un tableau qu'on nommera "tableau 1" : ligne 1 à 3 du fichier joint. la colonne C étant la plus importante, elle contient toujours un nombre à 16 chiffres.
    2 - Ensuite je récupère d'un tableau 2, des centaines de lignes également, mais avec 1 seule colonne comprenant la série de 16 chiffres évoquée ci-dessus. A l'intérieur il peut y avoir des nombres identiques ou différents de ceux se trouvant dans la colonne C du tableau 1
    3 - Mon souhait est de copier/coller le tableau 1, faire de même avec le tableau 2, en mettant les nombres à 16 chiffres des tableaux 1 et 2 dans la même colonne C.
    4 - Enfin je souhaiterait que s'il y a deux ou plusieurs fois le même nombre à 16 chiffres, les lignes soient supprimées. Toutes les lignes avec le même nombre doivent disparaître contrairement aux doublons où il faut souvent garder un ligne.

    Le problème avec la MACRO jointe est qu'elle compare toutes les données de chaque colonne et si les lignes ne sont pas tout à fait identiques, ils ne les suppriment pas. Ensuite il va mettre le résultat dans un second onglet ce qui me va bien.

    J'espère avoir été clair. Si quelqu'un peut m'aider, je lui en serait reconnaissant.

    Dernière chose existe t'il un outil, un logiciel d'aide à la "construction" de MACRO pour les débutants tels que moi ?

    Merci par avance et bonne journée.

    Fred.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Avec "Tableau 2" sur Feuil3 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub test()
      Dim C As Range, Plage As Range, Ligne As Long
      Application.ScreenUpdating = False
      Ligne = 1
      With Sheets("Feuil1")
        Set Plage = .Range("C2", .Cells(.Rows.Count, 3).End(xlUp))
      End With
      With Sheets("Résultat")
        For Each C In Plage
            Ligne = Ligne + 1
            .Cells(Ligne, 3).Resize(, 4).Value = C.Resize(, 4).Value
        Next C
      End With
      With Sheets("Feuil3")
        Set Plage = .Range("C2", .Cells(.Rows.Count, 3).End(xlUp))
      End With
      With Sheets("Résultat")
        For Each C In Plage
            Ligne = .Cells(.Rows.Count, 3).End(xlUp).Row + 1
            .Cells(Ligne, 3).Value = C.Value
        Next C
        For i = .Cells(.Rows.Count, 3).End(xlUp).Row To 3 Step -1
            If Application.CountIf(.[C:C], .Cells(i, 3).Value) > 1 Then
                Rows(i).Delete
            End If
        Next i
      End With
      Application.ScreenUpdating = True
    End Sub

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    technicien pme
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien pme
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    Bonsoir Daniel,

    Tout d'abord merci pour ta réponse.

    Par contre, je dois faire une mauvaise manip car le résultat ne correspond pas à ce que j'attendais.

    J'ai joins à ma réponse un autre fichier Excel où j'indique les conditions et le résultats attendu.

    Si toutefois cela correspond à la macro de ta réponse, j'ai du faire une mauvais manip..

    Merci encore pour ton aide.

    Fred.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Proposition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Sub SuprDoubl()
    Dim LastLig As Long
    Dim Plage As Range, c As Range
    Dim Doublon As Boolean
     
    Application.ScreenUpdating = False
    With Worksheets("Résultat")
        .UsedRange.Clear
        Worksheets("Données de départ").UsedRange.Copy .Range("A1")
        LastLig = .Cells(.Rows.Count, "C").End(xlUp).Row
        'on parcourt la colonne C et si doublon (NB.SI>1) on inscrit un X en colonne K
        Set Plage = .Range("C2:C" & LastLig)
        For Each c In Plage
            If Application.CountIf(Plage, c) > 1 Then
                Doublon = True
                c.Offset(, 8) = "X"
            End If
        Next c
        'S'il existe au moins un doublon, il y aura des lignes à supprimer
        'On fait un filtre automatique sur la colonne K contenant X
        'et on supprime les lignes visibles
        If Doublon Then
            .Range("K1:K" & LastLig).AutoFilter Field:=1, Criteria1:="X"
            .Range("K2:K" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Delete
            .AutoFilterMode = False
        End If
    End With
    End Sub

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour
    sinon je n'ai pas testé mais ca doit etre un peu comme ca tout en mémoire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub tri()
    Dim tablo(2), tablo3, Nblignes
    Set doublon = CreateObject("scripting.dictionnary")
    tablo(1) = Sheets("Feuil1").Range("C2", Sheets("Feuil1").Cells(Sheets("Feuil1").Rows.Count, 3).End(xlUp))
    nbligne = UBound(tablo(1))
    tablo(2) = Sheets("Feuil3").Range("C2", Sheets("Feuil3").Cells(Sheets("Feuil3").Rows.Count, 3).End(xlUp))
    nbligne = nbligne + UBound(tablo(2))
    ReDim tablo3(Nblignes, 3)
    For i = 1 To 2
    For e = 0 To UBound(tablo(i))
    If Not doublon.Exists(tablo(i)(e, 2)) Then
    tablo3(a, 0) = tablo(i)(e, 0)
    tablo3(a, 1) = tablo(i)(e, 1)
    tablo3(a, 2) = tablo(i)(e, 1)
    a = a + 1
    End If
    next e
    next i
     
    Sheets("Résultat").Cells(X, Y).Resize(UBound(tablo3), 3) = tablo3
    End Sub
    adapte le cells(x,y)
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    technicien pme
    Inscrit en
    Août 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : technicien pme
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2014
    Messages : 5
    Par défaut
    Bonjour Marcatog,

    Super ta macro c'est exactement ce que je cherchais

    C'est vraiment cool de pouvoir compter sur des gens sympa et efficace...

    Est-ce que je peux abuser encore un peu ?

    J'ai un autre fichier à traiter : (cf. doc Excel ci-joint).

    Conditions : Si dans la colonne A j'ai deux fois le même compte à la suite et que dans la colonne D le nombre de commande pour ces deux comptes est égal à 0 ou 1 avoir la possibiliter de soit supprimer les deux lignes ou les colorer afin de les identifier (plus explicite dans le doc Excel).

    N'étant pas encore très à l'aise avec les MACRO je ne sais pas s'il est possible quand on la lance d'avoir par exemple un pop up (tableau à cocher par exemple) proposant les deux choix Suppression des lignes ou coloriage des deux lignes.

    Merci pour votre aide, je vais gagner un temps précieux..

    Fred
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2013, 16h58
  2. [XL-2010] Macro qui ne donne pas le mème résultat en automatique
    Par jad73 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 12/04/2013, 09h29
  3. Réponses: 2
    Dernier message: 26/02/2009, 10h52
  4. Une macro qui supprime les macros ?
    Par GodOfTrolls dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/06/2008, 10h03
  5. macro qui s'auto-supprime
    Par did103 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/03/2008, 15h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo