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 :

Réaliser une suppression avec contraintes multiples sur des chaînes [XL-2010]


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
    Gestionnaire Financier
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Gestionnaire Financier
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Par défaut Réaliser une suppression avec contraintes multiples sur des chaînes
    Bonjour,

    Je suis actuellement en train de créer un tableau de suivi des prospects clients sociétés pour les commerciaux de ma boîte.

    En partant d'une extraction Excel d'un logiciel, j'ai besoin de supprimer toutes les lignes selon un critère à 4 variables possibles.
    Jusqu'à présent tout ce que j'ai fait a échoué, je pourrais rentrer dans le détail si nécessaire mais voici les différentes méthodes utilisées :

    1- Enregistreur de Macro:
    En appliquant un filtre auto, je désélectionne les 4 noms à conserver, je supprime le reste et je réaffiche le tout. Pb : ne tient pas compte de la taille du tableau pour chaque nouvelle extraction et si un nouveau commercial apparaît, c'est mort.

    2- Boucle + If + Gestionnaire de Nom :
    Dans le gestionnaire, j'ai créé la variable listeESA qui représente la formule =OR(nom1;nom2;nom3;nom4)
    en utilisant un For Each x in y
    if cellule <> [listeESA] then cellule.entireRow.Delete

    3- Boucle + If + Or

    4- Select Case

    J'en suis a tester celà :

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub supprimerCCX()
     
     
        Dim Ws As Worksheet
        Dim Form As Worksheet
        Set Formulaires = Worksheets("Formulaires")
        Dim ccx As Range
        Dim tab_prem As Range
        Dim tab_der As Range
        Dim supp As Range
        Const X2 As String = "X2"
        Const X1 As String = "X1"
        Const X3 As String = "X3"
        Const X4 As String = "X4"
     
     
     
        Set Ws = Worksheets("ExtractionCB")
        Set tab_prem = Ws.Range("E1")
        Set tab_der = tab_prem.End(xlDown).Offset(0, 0)
     
        For Each ccx In Ws.Range(tab_prem, tab_der)
        'Si une cellule ne contient pas le nom d'un des ESA, on la supprime entièrement
            If Not ccx.Value Like X2 Then ccx.Offset(0, 8) = "DEL"
                Else: ccx.Offset(0, 8) = ""
            End If
     
            If Not ccx.Value Like X1 Then ccx.Offset(0, 8) = "DEL"
                Else: ccx.Offset(0, 8) = ""
            End If
     
            If Not ccx.Value Like X3 Then ccx.Offset(0, 8) = "DEL"
                Else: ccx.Offset(0, 8) = ""
            End If
     
            If Not ccx.Value Like X4 Then ccx.Offset(0, 8) = "DEL"
                Else: ccx.Offset(0, 8) = ""
            End If
     
        Next ccx
     
        For Each ccx In Ws.Range(tab_prem, tab_der)
     
            If ccx.Offset(0, 8).Value Like "*DEL*" Then ccx.EntireRow.Delete
            End If
        Next ccx
     
     
    End Sub
    Mais là, j'ai une erreur sur une mauvaise utilisation du Else If.
    Plutôt qu'une solution, est-ce qu'un expert peu m'aiguiller sur la piste à suivre? Vais-je trop loin ou est-ce que j'oublie une étape dans cet enchaînement de méthodes?

    PS : je n'en suis qu'à mes débuts sur Excel, désolé si c'est mal expliqué ou complètement raté.

  2. #2
    Invité
    Invité(e)
    Par défaut
    bonjour,
    http://www.developpez.net/forums/d16...e/#post8731325

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    set r=.Range(tab_prem, tab_der)
    for i=r.rows.count to 1 step -1
              If Not r(i,1).Value Like X2 Then  r(i,1).EntireRow.Delete
              If Not r(i,1).Value Like X1 Then  r(i,1).EntireRow.Delete
    next
    Dernière modification par Invité ; 02/09/2016 à 12h53.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire Financier
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Gestionnaire Financier
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Par défaut
    Super,

    Donc si je suis ton code,

    Il va vérifier sur chaque condition avant de faire la suppression?

    J'avais l'impression de faire un contrôle de trop, mais c'est peut-être ça qui me faisait générer des erreurs.

    Merci pour le coup de pouce, j'avais pas pensé à réfléchir en "Ne commence pas par". :/

    Je teste ça avant de cliquer sur résolu.

    EDIT : il finit par supprimer tout le tableau, j'ai dû merder sur un truc, mais sur le lien que tu as donné en complément il y a d'autres idées, je vais les tenter d'ici là. Un de tutoriels de Philippe Thulliez permet d'utiliser les filtres avancés, je vais essayer de repartir là-dessus en essayant de l'adapter à mon problème.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    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 680
    Par défaut
    Citation Envoyé par AntLby Voir le message

    1- Enregistreur de Macro:
    En appliquant un filtre auto, je désélectionne les 4 noms à conserver, je supprime le reste et je réaffiche le tout. Pb : ne tient pas compte de la taille du tableau pour chaque nouvelle extraction et si un nouveau commercial apparaît, c'est mort.
    Un code fait par l'enregistreur ça s'adapte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("A" & rows.count).end(xlup).row
    Permet de récupérer la valeur de la dernière ligne non vide, ce que te permet d'adapter la taille fixe donner par l'enregistreur.
    Par exemple range("A1:A500")deviens range("A1:A" & range("A" & rows.count).end(xlup).row)

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire Financier
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Gestionnaire Financier
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Par défaut
    Donc après avoir adapté la taille du tableau,
    Il ne me restera qu'à rester attentif aux recrutements pour ajouter le ou les commerciaux en mutation de poste.

    J'aurai bien aimé que la solution avec le gestionnaire de noms fonctionne (je plancherai dessus plus tard) pour que je puisse modifier à volonté les mouvements de personnel sans tripoter la macro.
    Je teste les différentes solutions, les filtres avancés c'est quand même assez chiant à déchiffrer quand on débute.

  6. #6
    Invité
    Invité(e)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Gestionnaire Financier
    Inscrit en
    Septembre 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Gestionnaire Financier
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2016
    Messages : 6
    Par défaut
    Re-Bonjour,

    De retour de vacances, j'ai pu replancher dessus.

    J'ai résolu le problème en adaptant l'AutoFilter come l'avait conseillé halaster08.

    Du coup, c'est un peu lourd comme manip, mais ça fonctionne.

    Je copie / colle pour ceux qui peuvent être intéressés :

    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
     
    Sub esacopy()
    '
    ' esacopy Macro
    '
     
    '
        Range("A1:E1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$E$1000").AutoFilter Field:=5, Criteria1:=Array( _
            "Nom1", "Nom2", "Nom3", "Nom4"), _
            Operator:=xlFilterValues
        Range("A:E").Select
        Selection.Copy
        Range("G1").Select
        ActiveSheet.Paste
        Columns("A:F").Select
        Range("F1").Activate
        Application.CutCopyMode = False
        Selection.Delete Shift:=xlToLeft
        Range("A1").Select
    End Sub
    C'est crassou, mais on m'a demandé de régler ça vite, je prendrai le temps d'améliorer tout ça.

    Les filtres avancés n'ont pas fonctionné du tout, pourtant c'est un fonctionnement vraiment similaire (pour ne pas dire identique) que j'ai utilisé pour en venir à cette solution. Le fait d'utiliser 4 possibilités sur un même critère joue peut-être.

    Il ne me reste "plus qu'à" retrouver de quoi faire un collage de valeurs dans la dernière ligne non vide, mais ça, je sais qu'on le retrouve ici.

    Merci pour tout, je clique sur RESOLU.

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

Discussions similaires

  1. requete suppression avec critere base sur une autre requete
    Par strouve dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 16/07/2012, 10h18
  2. Comment réaliser une barre avec des cases
    Par grunk dans le forum Android
    Réponses: 7
    Dernier message: 16/08/2011, 17h08
  3. Réponses: 5
    Dernier message: 16/07/2010, 12h27
  4. [DisplayTag] suppression d'une ligne avec un lien sur une autre Servlet
    Par luffy2mars dans le forum Taglibs
    Réponses: 1
    Dernier message: 12/01/2010, 11h36
  5. Réaliser une page avec uniquement des DIV
    Par Sayrus dans le forum Mise en page CSS
    Réponses: 14
    Dernier message: 15/11/2007, 19h04

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