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 :

chercher données et effacer


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut chercher données et effacer
    bonjour , voila jessai d'executer le code ci-dessous .
    mais j'ai un message d'erreur ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Bouton1()
    Dim Lig As Long
        With Sheets("synthèse")
            While Cells(Lig, 1) <> ""
                If .Cells(Lig, 1) = Sheet("MC").Cells(Lig, "G") Then
                    .Cells(Lig, "AA") = "TF-Post"
                    Lig = Lig + 1
                Else
                    Rows(Lig).Delete
                End If
            Wend
        End With
    End Sub
    je vous explique ce que j'essai de faire :

    je voudrai faire la chose suivante
    1) comparer chacun des nombres de la colonne A a partir de A51 de la feuille "synthèse" a la colonne G (G1 a G1000) par exemple de la feuille "MC" si je retrouve le meme nombre et si dans la meme ligne la colonne AA m'indique le mot clé "TF " alors je conserve la ligne qui contient le nombre de depart dans ma feuille "synthese "
    si a la colonne AA a la ligne correspondante je trouve autre chose que "TF "
    alors j'efface cette ligne dans ma feuille "synthese. "
    et ainsi de suite.



    voila un exemple

    feuil(synthèse) si par exemple
    A51=7555 alors je vais chercher ce nombre a la colonne G de la feuille "MC"
    (de toute les façon la feul "MC" contient tous les nombres !!)
    SI A51= G102 par exemple
    et si
    AA102="TF" toujours dans la feuil "MC"

    alors la ligne 51 de la feuil "synthèse " est conserver
    mais si

    A51=G102 et AA102#"TF"alors la ligne 51 de la feuil "synthese" doit etre effacé.
    et ainsi de suite ..j'usqu'a la ligne A500 PAR EXEMPLE DE LA FEUILLE "SYNTHESE"

    merci de votre aide

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Bonjour,
    ta logique n'est pas bonne car tu utilises le même index "Lig" pour les deux feuilles.
    Il te faudrait faire soit deux boucles imbriquées, soit utiliser la fonction "Match" (qui a ma préférence car plus rapide), elle correspond à la formule excel EQUIV.

    Un exemple :

    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
    Sub Bouton1()
    Dim rngBF1 As Range, rngBF2 As Range
    dim vLig as long
     
    Application.ScreenUpdating = False
     
    'définition de la plage sur la feuille synthèse (ici de A1 à la dernière cellule remplie) : 
    Set rngBF1 = Sheets("synthèse").Range("A1:" & Sheets( _
                 "synthèse").Cells(Rows.Count, 1).End(xlUp).Address)
     
    'définition de la plage sur la feuille MC (ici de G1 à la dernière cellule remplie) : 
    Set rngBF2 = Sheets("MC").Range("G1:" & Sheets( _
                 "MC").Cells(Rows.Count, 7).End(xlUp).Address)
     
    For Each cell In rngBF1
        If Not IsError(Application.Match(cell, rngBF2, 0)) Then
            vLig = Application.Match(cell, rngBF2, 0) 'vLig = n° de la ligne trouvée dans la feuille MC
            If Sheets("MC").Range("AA" & vLig) = "TF-Post" Then
                'on ne fait rien
            Else
                Sheets("synthèse").Rows(cell.Row).Delete
            End if
        Else
            Application.ScreenUpdating = True
            cell.Select
            msgbox "Cellule " & cell.Address & " sans correspondance dans MC", vbokonly + vbcritical, "Anomalie"
        End If
    Next
     
    Application.ScreenUpdating = True
    End Sub
    Pas testé...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2010
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 79
    Par défaut comparaison-selection
    voila j'ai testé le code je croix qu'il est bon mais il y a un soucis par rapport a deux choses
    premierement ma feuille synthese est un filtre que j'ai réalisé via un code
    du coup dans ma feuille synthese il y a des lignes qui n'existent pas ma premiere cellule est donc A51 mais etre A30 car ça depend du fichier source qui n'a toujours pas le meme nombre de valeurs à trier.
    donc entre ma premiere valeur et en A51 par exemple et la derniere
    A200 par exemple il y a supression de certaines lignes ..
    aussi dans la feuille "mc" c'est a partir de G2 que les nombres commencent

    donc quand j'ai executé le code j'ai eu le message d'erreur ci-dessous DANS UNE BOITE DE DIALOGUE appelée "ANOMALIE"
    " cellule $A$1 sans correspondance dans MC
    lorsque je clic sur OK ça me fais passé a la cellule suivante .. et ainsi de suite .. jusqu'a ce que je parcours toute la colonne "A" mais si j'ai une colonne a 1000 cellules ça devient penible
    sinon j'ai supression des lignes ça signifie que le code m'efface bien ce que je veux ...

    merci de ton aide

  4. #4
    Membre éclairé Avatar de Duddy
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Novembre 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Agent de maitrise
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2007
    Messages : 257
    Par défaut
    Bonsoir le forum,

    Après un filtre, j'ai déjà utilisé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Public MaPlage As Range, Ligne As Range
      Set MaPlage = oWshAVL.UsedRange.SpecialCells(xlCellTypeVisible)
      'je compare les cellules de la colonne A
       X = 1
      For Each Ligne In MaPlage.Rows
    Je ne mets pas la suite, c'est un exemple pour te permettre de résoudre le problème que tu rencontres sur la 1ère ligne filtrée.

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Citation Envoyé par dianbobo Voir le message
    premierement ma feuille synthese est un filtre que j'ai réalisé via un code
    du coup dans ma feuille synthese il y a des lignes qui n'existent pas ma premiere cellule est donc A51 mais etre A30 car ça depend du fichier source qui n'a toujours pas le meme nombre de valeurs à trier.
    donc entre ma premiere valeur et en A51 par exemple et la derniere
    A200 par exemple il y a supression de certaines lignes ..
    aussi dans la feuille "mc" c'est a partir de G2 que les nombres commencent

    Pour le premier point, je pense que l'idée de Duddy pourrait s'appliquer ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rngBF1 = Sheets("synthèse").Range("A1:" & Sheets( _
                 "synthèse").Cells(Rows.Count, 1).End(xlUp).Address).SpecialCells(xlCellTypeVisible)
    Et pour le deuxième, rien ne t'empêche de commencer à G2 évidemment !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rngBF2 = Sheets("MC").Range("G2:" & Sheets( _
                 "MC").Cells(Rows.Count, 7).End(xlUp).Address)
    Toujours pas testé...

    PS : tu n'es pas obligé de laisser la msgbox dans le cas où il n'y a pas de correspondance.

  6. #6
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour dianbobo, et à tous,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Boucle_sur_les_Lignes_filtrées2()
    Dim plg As Range, tb As Variant, i As Integer, ItemName, ItemRowMC As Integer
    Set plg = Sheets("synthèse").Range("_filterdatabase").SpecialCells(xlCellTypeVisible)
    'créer un tableau des éléments filtrés
    tb = Split(plg.Address, ",")
    'boucle uniquement sur les éléments du filtre
    For i = UBound(tb) To LBound(tb) + 1 Step -1
    'ItemName = valeur du premier élément
       ItemName = Sheets("synthèse").Range("A" & Range(tb(i)).Row)
    '   cherche la ligne de l'élément ItemName sur la colonne G de la feuille MC
       ItemRowMC = Application.Match(ItemName, Sheets("MC").Range("G:G"), 0)
       If Sheets("MC").Range("AA" & ItemRowMC) <> "TF" Then Sheets("synthèse").Rows(Range(tb(i)).Row).Delete
    Next
    End Sub
    correction : boucle commancant par le bas vers le haut car il y a suppression de ligne

Discussions similaires

  1. [XL-2003] Supprimer des données sans effacer les formules sur plusieurs feuilles
    Par graphikris dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/04/2013, 11h18
  2. Réponses: 1
    Dernier message: 02/03/2010, 19h08
  3. [AC-2003] Requête Access sur champ dont les données sont effacées
    Par Florentin dans le forum IHM
    Réponses: 4
    Dernier message: 15/06/2009, 10h19
  4. [C#] [WinForms] Chercher, effacer dans un ArrayList
    Par stailer dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/10/2004, 17h26
  5. chercher des données dans sa propre requete...
    Par shadowbob dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/06/2004, 17h13

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