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 :

Garder toutes lignes d'une même référence si un autre critère de recherche est trouvé


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Femme Profil pro
    Consultant DMS
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant DMS

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut Garder toutes lignes d'une même référence si un autre critère de recherche est trouvé
    Bonsoir,
    Je suis débutante dans VBA et je l’utilise surtout avec la fonction d’enregistrement et je modifie ensuite quelques critères. Mais là, je suis depuis quelques heures sur un problème que je n’arrive pas à résoudre, même en cherchant dans les forums.
    J’ai une feuille excel avec plusieurs colonnes et plusieurs lignes.
    Dans la colonne D, j’ai un numéro de référence.
    Pour chaque numéro de référence, j’ai plusieurs lignes, pas toujours le même nombre de lignes.
    Le même numéro de référence se répète sur les lignes.
    Je recherche un critère dans la colonne C (par exemple : PAIEMENT) et si je le trouve, je veux garder toutes les lignes de la même référence. Celles-ci peuvent se situer en dessus ou en dessous de la ligne dans laquelle j’ai trouvé PAIEMENT.
    Par contre, si je ne trouve pas le critère de recherche PAIEMENT, je veux effacer tous les autres numéros de référence et lignes correspondantes.
    Exemple :
    ColA ColB ColC ColD
    12.01.17 56.- 8887 ITEM
    12.01.17 8 8887 TAXSUMMARY
    12.01.17 78.- 8888 PAIEMENT
    12.01.17 90.- 8888 ITEM
    12.01.17 8 8888 TAXSUMMARY
    12.01.17 77.- 8989 ITEM
    12.01.17 8 8989 TAXSUMMARY
    12.01.17 66.- 8990 ITEM
    12.01.17 64.- 8990 ITEM
    12.01.17 43.- 8990 ITEM
    12.01.17 8 8990 TAXSUMMARY

    Dans cette exemple, j’aimerais garde uniquement les lignes qui ont la référence 8888 car le critère de recherche est présent.
    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jackbel Voir le message
    Bonjour,

    A tester :
    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
    Option Explicit
     
    Sub EliminerLesNumerosDeFacturesNonPayees()
     
    Dim AirePosition As Range, CellulePosition As Range
    Dim NbPaye As Long, I As Long
    Dim MatriceFactures() As Variant
    Dim Continuer As Boolean
     
        Set AirePosition = Sheets("Feuil1").UsedRange.Columns(4).Cells
        NbPaye = 0
        For Each CellulePosition In AirePosition
            If CellulePosition = "PAIEMENT" Then
               ReDim Preserve MatriceFactures(NbPaye)
               MatriceFactures(NbPaye) = CellulePosition.Offset(0, -1)
               NbPaye = NbPaye + 1
            End If
        Next CellulePosition
     
        For Each CellulePosition In AirePosition
            Continuer = True
            For I = LBound(MatriceFactures) To UBound(MatriceFactures)
                If "'" & CellulePosition.Offset(0, -1) = "'" & MatriceFactures(I) Then Continuer = False
            Next I
            If Continuer = True And CellulePosition.Row > 1 Then Range(CellulePosition.Offset(0, -3), CellulePosition).ClearContents
        Next CellulePosition
        Set AirePosition = Nothing
     
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Consultant DMS
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant DMS

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    Bonjour Eric

    Merci. J'ai modifié juste 2 choses. Le nom de la feuille (par "complet") et le nom du critère de recherche (par "LDCPAYMENT").
    J'ai laissé tout le reste mais malheureusement ça ne fonctionne pas.
    Ca plante au niveau

    For I = LBound(MatriceFactures) To UBound(MatriceFactures)

    Une idée ?
    Autre question. Mon critère de recherche se trouve dans la colonne 3, ne faudrait-il pas mettre Columns(3) dans

    Set AirePosition = Sheets("Complet").UsedRange.Columns(4).Cells

    Merci.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jackbel Voir le message
    Bonjour,

    Le code fourni correspond à l'exemple que vous avez mis en ligne. Si l'emplacement de vos données a changé, il vous faut bien sûr adapter le code.
    C'est vrai que s'il n'y a aucune ligne avec Paiement, il voudrait mieux tester la variable NbPaye (If NbPaye > 0 then) avant de lancer la boucle For I = LBound(MatriceFactures) To UBound(MatriceFactures)

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Consultant DMS
    Inscrit en
    Décembre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant DMS

    Informations forums :
    Inscription : Décembre 2017
    Messages : 4
    Par défaut
    Non, ça n'a pas changé.
    Le critère de recherche LCDPAIEMENT se trouve dans la colonne C, donc la 3ème colonne.
    C'est le numéro unique de référence qui se trouve dans la colonne D.

    Qu'est-ce qui est correct ?

    Set AirePosition = Sheets("Complet").UsedRange.Columns(4).Cells ou Set AirePosition = Sheets("Complet").UsedRange.Columns(3).Cells ?

    J'ai essayé en insérant 3, et il bloque un peu plus bas:

    If Continuer = True And CellulePosition.Row > 1 Then Range(CellulePosition.Offset(0, -3), CellulePosition).ClearContents

    Faut-il modifier quelque chose ici?

    Il y aura toujours des LCDPAIEMENT, donc la vérification n'est peut-être pas nécessaire mais je la rajouterai dès que la macro fonctionnera.

    Merci.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jackbel Voir le message
    .
    Regardez comment fonctionne l'exemple du fichier joint. A vous de l'adapter.

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

Discussions similaires

  1. recherche saut de ligne dans une même cellule
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/03/2009, 17h45
  2. Réponses: 2
    Dernier message: 15/12/2008, 10h09
  3. [Requête] Rassembler plusieurs lignes sous une même ligne
    Par Laure041 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 25/04/2008, 17h40
  4. Réponses: 5
    Dernier message: 25/09/2007, 18h06
  5. jointure sur des lignes d'une même table
    Par elsa_dach dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/01/2007, 13h08

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