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 :

Suppression lignes si valeurs existante [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Suppression lignes si valeurs existante
    Bonjour à tous,
    Je viens vers vous car malgré une recherche de plus d'une heure et une demande à Chat GPT (Je sais c'est pas parfait mais je voulais essayer de voir une autre idée), je me retrouve toujours bloqué et je n'ai pas trouvé équivalent sur ce forum ou sur d'autres ...

    Je contextualise mon problème :

    J'ai une base de données extraite depuis un logiciel interne. Dans cette BDD, j'ai environ 8K lignes (Ce sont toutes les affaires de l'entreprise, donc cette base est amenée à évoluer). (Ci joint extrait photo de la base)
    Nom : image_2024-03-29_110433372.png
Affichages : 46
Taille : 25,2 Ko

    Dans cette base, on va retrouver le numéro d'affaire, le NDA et le cycle. le NDA représente une immatriculation de client, elle est donc propre à un et un seul client. Cependant, en fonction du cycle, on créé une nouvelle affaire.

    Par exemple le client immatriculé sous le numéro 123456789 peut avoir deux affaire si il change de cycle
    Nom : image_2024-03-29_110900294.png
Affichages : 43
Taille : 3,0 Ko

    Dans l'exemple ci dessus, on voit bien que le même NDA possède 3 cycles différents et 3 numéros d'affaires.

    Ce que je souhaite faire, c'est : Si le NDA est déjà présent alors supprimer TOUTES les lignes correspondantes. donc dans l'exemple en haut, les 3 lignes.

    L'objectif de ce fichier est d'identifier les clients n'ayant pas encore pris contact avec nous et donc n'ayant qu'un seul cycle.

    Je précise aussi que cette macro sera présente sur le PERSONAL.xlsb car il s'agit d'une extraction qu'ils devront réaliser tous les mois.

    J'espère que ceci est compréhensible !

    Le code que j'avais imaginé au début est quelque chose comme ça cependant il ne me semble ni optimisé ni ultra fonctionnel en vérité.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    For Each Cell In WsBdd.Range("B2:B" & DernLign).Cells
    ValeurCherchee = Cell.value
     
    For i = DernLign To 1 Step -1
        If Cells(i, 1).Value = ValeurCherchee Then
            Rows(i).Delete
        End If
    Next i
    Next Cell
    Un grand merci d'avance hâte de vous lire !

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 118
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 118
    Points : 1 644
    Points
    1 644
    Par défaut
    Citation Envoyé par Patate3181 Voir le message
    Dans l'exemple ci dessus, on voit bien que le même NDA possède 3 cycles différents et 3 numéros d'affaires.
    Heu ...
    S'il y a 3 lignes on en supprime 3,
    S'il y a 2 lignes on en supprime 2,
    S'il y a 1 ligne on en supprime 1,
    Pas logique ton truc, on final on supprime tout.

    Comment les données arrivent t'elles dans Excel ?
    Fichier CSV ?
    Import de fichier texte ?
    Power Query ?

    Plutôt que supprimer des lignes, ne serait-il pas plus sage de ne pas les lire en premier lieux ?
    (Cela dépend de la façon dont les données atterrissent dans Excel).

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Alors oui, dans ce cas précis, on supprime toutes les lignes en effet. Si elles ont le même NDA avec un cycle différent, ça veut dire qu'ils ont déjà pris contact avec nous pour effectuer la surveillance ou le renouvellement !

    Je ne veux que ceux qui ne sont présent qu'une seule fois dans la base.

    Le fichier source est un fichier .xlsx

    Et non je ne souhaite pas consulter les lignes qui sont en doublons, je veux justement ne plus les voir et les supprimer de ma base car ils ne m'intéressent pas. C'est une base de relance commerciale.

    Si NDA 123456789 apparait qu'une fois => On doit le recontacter pour faire le renouvellement

    Si NDA 123456789 apparait deux fois ou plus => On l'a déjà recontacté et il a déjà probablement planifié son renouvellement donc je ne veux plus le voir. Ni sa ligne renouvellement, ni sa ligne initiale, elle ne me sert à rien

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 661
    Points : 5 785
    Points
    5 785
    Par défaut
    Bonjour,

    Sans vba: utiliser la fonction nb.si sur le NDA pour compter le nombre de lignes avec le meme NDA, filtrer sur ceux >1, puis les supprimer
    En vba: utiliser l'enregistreur de macro sur les étapes ci-dessus, nettoyer un peu le code et voilà
    J'aimerais bien aller vivre en Théorie, car en Théorie tout se passe bien.

  5. #5
    Membre éprouvé
    Inscrit en
    Décembre 2002
    Messages
    801
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 801
    Points : 1 260
    Points
    1 260
    Par défaut
    Bonjour, teste ceci:

    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 SupprLignes()
     
    Dim ws As Worksheet
    Dim rng As Range
    Dim dict As Object
    Dim i As Long
    Dim key As Variant
     
    Set ws = ThisWorkbook.Sheets("Feuil1")
    Set rng = ws.Range("B2:B" & ws.Cells(ws.Rows.Count, "B").End(xlUp).Row)
    Set dict = CreateObject("Scripting.Dictionary")
     
    ' Premier parcours pour compter les occurrences de chaque valeur
    For i = 1 To rng.Count
        If dict.exists(rng(i, 1).Value) Then
            dict(rng(i, 1).Value) = dict(rng(i, 1).Value) + 1
        Else
            dict.Add rng(i, 1).Value, 1
        End If
    Next i
     
    ' Deuxième parcours pour supprimer les lignes ayant une valeur en double ou plus
    For i = rng.Count To 1 Step -1
        If dict(rng(i, 1).Value) > 1 Then
            rng(i, 1).EntireRow.Delete
        End If
    Next i
     
    End Sub

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Qualiticien
    Inscrit en
    Août 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Qualiticien
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2019
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Salut Halaster08 et Franc, je vous remercie grandement !

    C'est exactement ce que je recherchais !

    J'ai pris la solution de Franc qui est plus rapide à l'utilisation néanmoins j'ai réussi au même résultat avec la fonction de Halaster08 donc merci beaucoup à tous les deux ! vous êtes top !

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

Discussions similaires

  1. [XL-365] Suppression lignes si valeurs existante
    Par Patate3181 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/03/2024, 11h55
  2. [XL-2010] Suppression colonne suivant valeur cellule 1ère ligne (en-tête)
    Par 2lester dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/08/2017, 21h11
  3. Suppression ligne selon valeur présente dans une cellule
    Par a.petitjean1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2017, 09h55
  4. Suppression ligne sur valeur cellule
    Par jomaly56 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 08/06/2016, 16h38
  5. [XL-2003] MACRO de comparaison de valeurs et suppression ligne
    Par Julzz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/07/2011, 08h53

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