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 :

Recherche et suppression


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Gérant de pme
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Gérant de pme
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Par défaut Recherche et suppression
    Bonjour a tous,

    Je dois adapter une macro qui n'est pas de mon travail, j'apprends comme beaucoup mais j'aimerai comprendre.

    Celle ci est destiné a être utilisé sur un fichier volumineux que je reçois mensuellement, sa forme diffère (nombre de lignes, contenus).
    Initialement il pèse entre 120/130 Mo sur 2 onglets de 1 048 500 lignes.

    Je dois épurer celui en supprimant les doublons (la macro fonctionne), les lignes des produits qui ne m'intéresse pas (la je bloque).


    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Sub supprimedoublons()
     
    Dim G1 As Worksheet
    Dim G2 As Worksheet
    Dim PL As Range 'déclare la variable PL (PLage)
    Dim PLU As Range 'déclare la variable O (PLage Utile)
     
    Workbooks("test CFA macro.xlsm").Activate 'active le classeur GPL CISCO.xlsx
    Set G1 = ActiveWorkbook.Worksheets("Glemea1") 'définit l'onglet G1
    Set G2 = ActiveWorkbook.Worksheets("Glemea2") 'définit l'onglet G2
    If G2.FilterMode = True Then G2.ShowAllData 'si G2 est filtrée, supprime le filtre
    If G1.FilterMode = True Then G1.ShowAllData 'si G2 est filtrée, supprime le filtre
     
    G1.Range("$A:$F").RemoveDuplicates Columns:=Array(3, 4), Header:=xlYes 'supprime les doublons des colonne C et D dansl'onglet G1
    G2.Range("$A:$F").RemoveDuplicates Columns:=Array(3, 4), Header:=xlYes 'supprime les doublons des colonne C et D dansl'onglet G2
     
    Set PL = G1.Range("A1").CurrentRegion 'définit la plage PL (onglet G1)
    Set PLU = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'définit la plage utile PLU (sans la première ligne de PL)
    PL.AutoFilter Field:=4, Criteria1:="=*refu*", Operator:=xlOr, Criteria2:="=*remanu*" 'filtre les 2 cas dans la colonne D
    PLU.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes visibles de la plage utile PLU
    G1.ShowAllData 'supprime le filtre
     
    Set PL = G1.Range("A1").CurrentRegion 'définit la plage PL (onglet G1)
    Set PLU = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'définit la plage utile PLU (sans la première ligne de PL)
    PL.AutoFilter Field:=3, Criteria1:="=*CON-NC*" 'filtre le cas dans la colonne D
    PLU.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes visibles de la plage utile PLU
    G1.ShowAllData 'supprime le filtre
     
    Set PL = G2.Range("A1").CurrentRegion 'définit la plage PL (onglet G2)
    Set PLU = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'définit la plage utile PLU (sans la première ligne de PL)
    PL.AutoFilter Field:=3, Criteria1:="=*CON-NC*" 'filtre le cas colonne D
    PLU.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes visibles de la plage utile PLU
    G2.ShowAllData 'supprime le filtre
     
    ActiveWorkbook.Save
     
    MsgBox "Données traitées" 'message
     
    End Sub
    La partie suppression de doublons fonctionne bien, par contre je rencontre un problème sur la suppression a partir des critères, car faisant cette action sur Onglet G1 puis sur Onglet G2, si il ne trouve rien en G1, la macro se bloque.
    De plus je dois adapter cette recherche suppression sur plus de 60 items.
    Dois je faire pour chaque item, chaque onglet ce qui représente plus de 120X minimum ou existe t'il une action groupée plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set PL = G2.Range("A1").CurrentRegion 'définit la plage PL (onglet G2)
    Set PLU = PL.Offset(1, 0).Resize(PL.Rows.Count - 1, PL.Columns.Count) 'définit la plage utile PLU (sans la première ligne de PL)
    PL.AutoFilter Field:=3, Criteria1:="=*CON-NC*" 'filtre le cas colonne D
    PLU.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes visibles de la plage utile PLU
    G2.ShowAllData 'supprime le filtre
    Merci a ceux qui accepteront de m'accompagner pour m'aider a adapter et surtout comprendre.

    Bien a vous tous

  2. #2
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 551
    Par défaut
    Bonjour

    Cela vaudrait peut-être la peine de tenter un traitement PowerQuery intégré à 365

    Lister les codes à rejeter dans un tableau : ainsi par requête ils seront éliminés avant de déboulonner le reste.

  3. #3
    Membre confirmé
    Homme Profil pro
    Gérant de pme
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Gérant de pme
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Par défaut
    Bonjour Chris

    Merci de ton retour, j'ai déja des difficultés avec VBA, alors PowerQuery je ne connais pas du tout.

  4. #4
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 551
    Par défaut
    RE

    Peux-tu joindre un fichier simplifié (10 lignes par onglet) mais avec les bonnes en-têtes de colonnes et types de données et un 3ème onglet avec une liste de quelques code à éliminer

    Si tu ne peux joindre ici, passe par cjoint ou équivalent et envoie le lien en MP

  5. #5
    Membre confirmé
    Homme Profil pro
    Gérant de pme
    Inscrit en
    Juin 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Gérant de pme
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2012
    Messages : 79
    Par défaut Fichier joint
    Chris

    Ci dessous un fichier light pour test, a ta dispo pour apprendre

    test CFA PWRQUERY.xlsx

  6. #6
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 551
    Par défaut
    Bonjour

    Ton fichier ne contient pas de liste de valeurs à supprimer

    Un truc m'interpelle : tu dédoublonnes sur C et D mais en principe C et D doivent être liés à A et B et surtout en cas de prix différent tu en as gardé un aléatoirement

Discussions similaires

  1. [DOS] Script de recherche puis suppression
    Par villegente dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 13/02/2007, 10h53
  2. Réponses: 17
    Dernier message: 08/06/2006, 09h34
  3. [IO]Recherche et suppression de lignes
    Par anthyme dans le forum Général Python
    Réponses: 9
    Dernier message: 20/04/2006, 17h47
  4. [VB]Recherche et suppression de caracteres
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 09/02/2006, 14h56

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