Suppression selon critère

Bonjour à tous !

Eh bien me revoilà

j'ai un peu appris mais les lacunes se font tjrs autant souffrir ... ma boite me paye une formation VBA mais c'est pas pour tout de suite

j'aurai une question. Voilà j'ai cette macro assez simple

For i = 1 To 65536

If Cells(i, "F") = "Comptabilisée" Then

Cells(i, 1).EntireRow.Delete

i = i - 1

End If

Donc là il m'efface correctement les lignes qui comprennent la valeur "Comptabilisée" en colonne F mais j'aimerai qu'au lieu de cela :

S'il trouve la valeur "Comptabilisée" en colonne F, il aille chercher la valeur en colonne "Z" et supprime toutes les lignes sui comportent la valeur qu'il y aura trouvé.

Merci encore pour votre aide à tous !!!

Bonjour,

Il vaudrait mieux envoyer ta feuille réelle, avec seulement quelques lignes

de façon à tester et régler la macro

Combien de lignes à traiter (environ) ?

Amicalement

Claude.

Voici un exemple tout refait, donc pour le coup la valeur Comptabilisée est passé de la colonne F à I

et la valeur en colonne Z est maintenant en colonne J

Donc j'aimerai que la si en colonne I il trouve "Comptabilisée" alors il va chercher la valeur en colonne J et supprime toutes les lignes qui ont cette valeur.

Dans mon exemple ca donne : il va trouver en colonne I "Comptabilisée" pour les lignes 2 ; 8 et 9 donc il va devoir me supprimer les lignes 2;11;12 & 8;13;14 é la ligne 9

Merci encore !

35exemple.zip (9.33 Ko)

re,

Combien de lignes à traiter (environ) ?

Je parlais du total de lignes de la feuille

c'est pour savoir comment orienter une solution

Claude.

le nombre de ligne a traiter va être assez important ... disons que ca pourra aller de 200 à 2000 mais la macro peut prendre son temps

Bonsoir,

un petit exemple :

Sub suppr()
Dim Compta As Object
Dim Cel As Range, Plg As Range
Dim Tmp
Dim I As Long, DerLig As Long
Application.ScreenUpdating = False
Set Compta = CreateObject("Scripting.Dictionary")
DerLig = [F65000].End(xlUp).Row
Set Plg = Range("F2:F" & DerLig)
With Plg
    .Offset(, 20).Replace "", "zzzzzzz"
        For Each Cel In .Cells
            If Cel.Value = "Comptabilisée" Then Compta.Item(Cel.Offset(, 20).Value) = Cel.Offset(, 20).Value
        Next Cel
        If Compta.Count = 0 Then Exit Sub
        Tmp = Application.Transpose(Compta.Items)
        For I = LBound(Tmp) To UBound(Tmp)
            .Offset(, 20).Replace Tmp(I, 1), "", xlWhole
        Next I
    .Offset(, 20).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    .Offset(, 20).Replace "zzzzzzz", ""
End With
End Sub

Nota, les "zzzzzzz" sont là pour s'affranchir des cellules non encore renseignées de la colonne "Z"

Bonne soirée

re,

J'ai ajouter une ligne en haut

Sub SupprLignes()
''Macros par Claude Dubois pour "wiid" Excel-Pratique le 8 Déc 09
Dim Lg%, i%
    Lg = Cells.Find("*", , , , xlByRows, xlPrevious).Row
    Application.ScreenUpdating = False

    For i = Lg To 3 Step -1
        If Cells(i, "i") = "Comptabilisée" Then
            Range("m1") = Cells(i, "j")
            Range("n2").Formula = "=$j3=$m$1"
            Range("a2:j" & Lg).AdvancedFilter Action:=xlFilterInPlace, _
            CriteriaRange:=Range("n1:n2"), Unique:=False
            Range("c3:c" & Lg).SpecialCells(xlCellTypeVisible).EntireRow.Delete
            On Error Resume Next
            ActiveSheet.ShowAllData
            On Error GoTo 0
        End If
    Next i
Range("m1:n2").ClearContents
End Sub

Bonne journée

Claude.

29wiid.zip (14.63 Ko)

Merci beaucoup Claude pour tes 2 exmples.

Je regarde, comprends et te reviens asap car pour l'instant je n'arrive pas à l'inclure dans mon cas réel au boulot.

Ne voulant pas poser trop de questions stupides, je vais chercher un peu de mon coté comme un grand.

Encore merci, je reviens d'ici 2j le temps de comprendre ce que tu as fait en détail

capture 2 capture 1

re bonjour à tous,

Completement débordé ces derniers j'ai du mettre cette macro de coté. Je tiens encore à te remercier Claude, mais je n'ai pas vraiment le niveau pour comprendre ta macro... d'ici qq mois peut etre

Je pensais écrire qq chose comme cela plutot :

Private Sub CommandButton3_Click()

For i = 1 To 65000

If Cells(i, "I") = "Comptabilisée" Then

For j = 1 To 65000

If Cells(j, "J") = Cells(i, "K") Then

ActiveCell.EntireRow.Delete

End If

Next j

ActiveCell.EntireRow.Delete

End If

Next i

End Sub

Malheureusement ca ne marche pas...

Si on prends mon fichier "exemple" il va aller sur la premiere ligne, il va trouver la valeur "comptabilisée" en colonne "I" il doit donc récuperer l'ID colonne "J" et me supprimer les lignes 1,11 et 12.

Merci pour votre aide !

edit : j'oubliais ! bonne fête de fin d'année à tous et à toutes !

Bonsoir wiid, à tous,

je n'ai pas vraiment le niveau pour comprendre ta macro...

Déjà, faudrait savoir de quelle macro tu parles, celle de cousinhub ou la mienne ?

Merci beaucoup Claude pour tes 2 exemples.

Tu n'as peut-être pas vu que nous sommes deux à t'avoir répondu !

N'ayant pas tester la macro de cousinhub, je ne parlerais que de la mienne.

Sur le fichier que je t'ai joint (wiid.xls), çà marche !

Maintenant, une macro c'est une pièce d'horlogerie qui ne fonctionne que sur un fichier

structuré à l'identique de celui pour lequel elle a été conçue.

c'est-à-dire que le tableau commence à la même cellule (ligne et colonne)

Dans mon exemple, les en-têtes sont en en ligne 2 et les données commencent en A3

C'est quand même pas sorcier d'envoyer ta feuille avec seulement 10 lignes !

à la limite, tu mets "Toto" dans chaque cellule (confidentialité) , c'est juste pour voir

la structure et régler la macro avec; chose qu'apparemment tu n'as pas su faire.

Pour ta gouverne, quand tu supprime des lignes il faut commencer la boucle par le bas et

remonter jusqu'en haut.

Quand on sait pas, on écoute et on suit les conseils, quitte à ne comprendre que + tard,

sinon on ne pose pas de question !

Pas content le Claude !

Bonnes fêtes quand même

Amicalement

Re bonjour à tous,

Je vais tout d'abord commencer par vous présenter mes meilleurs voeux pour cette année qui commence !

Je suis attristé de constater que j'ai pu me faire passer pour un mal autrui auprès de gens chez qui

je venais chercher de l'aide.

Effectivement, la réponse de "cousinhub" m'avait échappé et pensait qu'elle venait de toi Claude.

Mes plus plates excuses et je présente également mes remerciements à "cousinhub" pour son aide sur ce sujet.

En effet, je n'ai pas réussi à adapter vos macros à mon travail réel... je pensais pouvoir y arriver car

j'y ai réussi précédemment mais j'ai été dépassé par votre niveau.

Effectivement, j'ai voulu créer un exemple très proche de ce que je dois reproduire... sans réussir à adapter

votre travail. Certes cette méthode n'est pas bonne et je m'excuse d'avoir pu penser que j'apprendrai plus et

plus vite de cette manière (certes à vos dépends et je m'en excuse je n'avais pas bien pris la mesure de la chose

puisque je pensais, justement, arriver à adapter la macro).

Sur le fichier que je t'ai joint (wiid.xls), çà marche !

Maintenant, une macro c'est une pièce d'horlogerie qui ne fonctionne que sur un fichier

structuré à l'identique de celui pour lequel elle a été conçue.

c'est-à-dire que le tableau commence à la même cellule (ligne et colonne)

Dans mon exemple, les en-têtes sont en en ligne 2 et les données commencent en A3

C'est quand même pas sorcier d'envoyer ta feuille avec seulement 10 lignes !

à la limite, tu mets "Toto" dans chaque cellule (confidentialité) , c'est juste pour voir

la structure et régler la macro avec; chose qu'apparemment tu n'as pas su faire.

Je ne lis que du vrai dans ta phrase... je me permets donc de vous retransmettre un fichier. J'ai laissé qq lignes

et voici ce que j'aimerai reproduire

Les colonnes qui nous interesse donc sont les "A" ; "I" et "Y"

Etape 1 :

La macro va reperer toutes les lignes dont on trouve en colonne "H" la valeur "comptabilisée"

Si elle trouve la valeur comptabilisée elle va chercher sur cette meme ligne la valeur en colonne "Y" et

supprimer du fichier toutes les lignes qui ont la même "ID" en colonne "Y"

ex : ligne 1, il va trouver "comptabilisé" en colonne "H" donc il va supprimer les lignes 2, 5 et 7 du fichier

Etape 2 : (add...)

Si elle trouve une valeur différente de "comptabilisée" en colonne "H", j'aimerai qu'elle récupere encore uen fois

l'ID en colonne "Y" et qu'elle ne garde que la ligne dont le numéro en colonne A est le plus grand :

ex : ligne 2, il va trouver "envoyé" en colonne "H" donc il va supprimer les lignes 3 et 4 pour ne garder que la 6

Pour ta gouverne, quand tu supprime des lignes il faut commencer la boucle par le bas et

remonter jusqu'en haut.

merci pour l'info

Quand on sait pas, on écoute et on suit les conseils, quitte à ne comprendre que + tard,

sinon on ne pose pas de question !

j'aime pourtant comprendre en même temps... erreur de ma part...

Encore pardon pour ce malentendu

Je vous remercie encore tous pour votre aide, et vous resouhaite une très bonne année 2010 en esperant que tout le

monde ait passé de bonne fêtes !

12exemple.xls (18.00 Ko)

Bonsoir,

Attention à l'orthographe de "comptabilisé"

sans majuscule et sans féminin

avant "Comptabilisée", maintenant "comptabilisé" (suivant ton dernier fichier)

Amicalement

Claude.

21wiid-2.zip (13.18 Ko)
Rechercher des sujets similaires à "suppression critere"