Suppression de lignes ne contenants pas une valeur reprise dans une liste

Bonjour à tous,

Je suis nouveau sur le forum et dans le monde du VBA :) J’espère que vous me pardonnerez si je suis passé a coté de quelque chose.

J'ai essayé de créer un module (merci pour vos tutos qui sont très bien fait), mais je pense que je n'ai pas encore suffisamment de pratique pour réaliser moi même ce que j'ai besoin.

J'aimerais bien supprimer les lignes de la feuille "Etiquettes" (valeurs entre A5 et H10000) ou les mots repris dans la colonne B (B3 à B30) de la feuille "SetUp" ne sont pas repris dans la colonne D de la feuille "Etiquettes".

Par la suite, je voudrais bien coller les lignes restantes dans une autre feuille "ER" à la première ligne disponible, mais je n'y suis pas encore :)

D'avance merci pour votre lecture, et peut-être votre aide ...

BàV

Private Sub CommandButton1_Click()

Call CleanByTeam

End Sub
Sub CleanByTeam()

Dim i As Long

For i = Range("A5:H10000").End(xlUp).Row To 2 Step -1

If Not Sheets("SetUp").Range("B3:B30") Then Rows(i).Delete

Next i

End Sub

Bonjour Chupito et bienvenu, bonjour le forum,

Explication claires mais pour tester il nous faut reproduire ton environnement. Prend donc l'habitude de joindre un fichier exemple à tes requêtes. Tu obtiendras de l'aide bien plus rapidement.

Une proposition (non testée) qui peut fonctionner si il n'y a rien au-dessus de B3 (SetUp) et de de la ligne 5 (Etiquettes) :

Sub Macro1()
Dim OE As Worksheet 'déclare la variable OE (Onglet Etiquettes)
Dim OS As Worksheet 'déclare la variable OS (Onglet SetUp)
Dim TVE As Variant 'déclare la variable TVE (Tableau des Valeur Etiquettes)
Dim TVS As varaint 'déclare la variable TVS (Tableau des Valeur SetUp)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TEST As Boolean 'déclare la variable TEST

Set OE = Worksheets("Etiquetttes") 'définit l'onglet OE
Set OS = Worksheets("SetUP") 'définit l'onglet OS
TSE = OE.Range("A5").CurrentRegion 'définit le tableau TVE
TVS = OS.Range("B3").CurrentRegion 'définit le tableau TVS
For I = UBound(TVE, 1) To 1 Step -1 'boucle 1 : inversée sur toutes les lignes I de TVE en remontant
    TEST = False 'réinitialise la variable TEST
    For J = 1 To UBound(TVS, 1) 'boucle 2 : sur toutes le lignes J du tableau des valeurs TVS
        'si la donnée ligne I colonne 4 de TVE est égale à la donnée ligne J colonne 1 de TVS, redéfinit la variable TEST, sort de la boucle 2
        If TVE(I, 4) = TVS(J, 1) Then TEST = True: Exit For
    Next J 'prochaine ligne de la boucle 2
    If TEST = False Then OE.Rows(I + 4).Delete 'si TEST est [faux] supprime la ligne I + 4 de l'onglet OE
Next I 'prochaine ligne de la boucle 1
End Sub


Bonjour ThauThème, Merci pour ta réponse et ton code. Malheureusement, c'est un fichier confidentielle :( j'ai créé une feuille test ...

Re,

Pourquoi ton tableau commence en A1 alors que dans ton premier post tu parlais de A5. Un fichier test c'est bien mais il faut qu'il corresponde exactement au fichier original, sinon je vais te proposer un code qui ne fonctionnera pas...

Pour créer la base de donnée, le fichier original se connecte a un serveur pour extraire les informations.

Dans ma version de test pour la maison (je suis sous excel 2010) je n'ai pas les accès pour me connecter au serveur et c'est surement pour cela qu'il est passé sur A2 au lieu de A5.

Mais le range est correct par rapport ce que j'ai besoin au boulot (excel 365).

' delete range of result

Sheets("Etiquettes").Activate
Range("a5:h10000").ClearContents
Range("a5").Select

' insert resultlines from select into excel

If Rs.EOF = False Then
    Range("a5").CopyFromRecordset Rs
End If

Je pense que j'ai essayé de courir avant de marcher :)

Le codage n'est pas si facile quand on a pas les bases ...

Je vais essayé de créer mon code étape par étape, ça m'aidera a comprendre le langage VBA.

Très utile vos tutos, merci a vous!

Bonne journée :)

Bonjour Cuipito, bonjour le forum,

Désolé mais j'ai été peu disponible ces derniers jours...

Le code corrigé (il y avait plein d'erreurs dans mon premier code ! Quelle honte...) :

Sub Macro1()
Dim OE As Worksheet 'déclare la variable OE (Onglet Etiquettes)
Dim OS As Worksheet 'déclare la variable OS (Onglet SetUp)
Dim TVE As Variant 'déclare la variable TVE (Tableau des Valeur Etiquettes)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeur SetUp)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim TEST As Boolean 'déclare la variable TEST

Set OE = Worksheets("Etiquettes") 'définit l'onglet OE
Set OS = Worksheets("SetUP") 'définit l'onglet OS
TVE = OE.Range("A5").CurrentRegion 'définit le tableau TVE
TVS = OS.Range("B3").CurrentRegion 'définit le tableau TVS
For I = UBound(TVE, 1) To 1 Step -1 'boucle 1 : inversée sur toutes les lignes I de TVE en remontant
    TEST = False 'réinitialise la variable TEST
    For J = 1 To UBound(TVS, 1) 'boucle 2 : sur toutes le lignes J du tableau des valeurs TVS
        'si le texte de la donnée ligne J colonne 1 de TVS est contenu dans la donnée ligne I colonne 4 de TVE
        'redéfinit la variable TEST, sort de la boucle
        If InStr(1, TVE(I, 4), TVS(J, 1), vbTextCompare) Then TEST = True: Exit For
    Next J 'prochaine ligne de la boucle 2
    If TEST = False Then OE.Rows(I + 4).Delete 'si TEST est [faux] supprime la ligne I + 4 de l'onglet OE
Next I 'prochaine ligne de la boucle 1
End Sub

Bonjour à tous et merci ThauThème,

je pensais que c’était un test et pas des erreurs :)

Effectivement le code fonction bien sur la feuille test et pas dans mon environnement. Je comprends mieux ta remarque du post présent …

Ma feuille de test est trop simplifiée.

J’ai plus qu’à essayer de l’adapter …

merci pour ton temps passe

Bonjour à tous,

Une proposition via Power Query (Complément à installer pour Excel 2010 et 2013 - Nativement intégré dans les version postérieures) :

Salut à tous,

Merci JFL pour ta proposition, je vais regarder pour update mon office si j'accroche un VBA parce qu'il n'est plus de première jeunesse :)

Bonjour à tous,

J'ai bien peur de ne pas comprendre le sens de votre message...

Power Query n'est en rien VBA et puisque vous disposez d'Excel 365, cet outil est nativement intégré.... heureux homme que vous êtes !

image
Rechercher des sujets similaires à "suppression lignes contenants pas valeur reprise liste"