Supprimer des lignes spécifiques à l'ouverture du doc

Bonjour le forum !

J'ai un fichier avec 3 feuilles.

Chaque feuille contient un tableau. (Donc 3 tableaux vous suivez ?)

Le tableau 1 est en fait un résumé des tableaux 2 et 3. Sauf que dès qu'un item est supprimé dans le tableau 2 au cours de la journée par exemple, je souhaite qu'il n'apparaisse plus dans le tableau 1 dès que j'ouvre de nouveau le tableau de lendemain. J'aimerai un code VBA qui compare la colonne 10 de chacun des tableaux et tout ce qui apparaît en trop dans le tableau 1 est automatiquement retiré de la liste.

Par exemple si jai une ligne "Fraise" dans mon tableau 1 colonne 10, mais que je n'ai aucune "Fraise" référencée ni dans le tableau 2 ni dans le tableau 3 alors à l'ouverture du fichier, la ligne mentionnant la fraise est supprimée du tableau.

J'ai peine les connaissance pour comprendre comment fonctionnent les codes VBA, et je ne suis pas vraiment capable de créer de toute pièce une telle opération en partant de rien. Sachant que je n'ai pas réussi à trouver quelque chose de similaire d'aussi spécifique. Si quelqu'un peut m'aider je serait très reconnaissant.

Merci d'avance.

Bonjour Dojori, bonjour le forum,

Et tout ça sans aucun fichier ?!... Comment peut-on tester sans avoir à recréer ton environnement ?

Evidemment, je suis bête...

Ça ressemble à ça. Le but c'est bien de comparer la colonne bleu (colonne D) du premier tableau avec les colonnes bleues (colonnes J) des deux tableaux "Cuisine".

Par exemple il ne trouvera "Myrtille" dans aucun des deux autre tableau, donc la ligne sera simplement supprimée lors de l'ouverture du fichier.

Merci encore pour votre patience.

Re,

Attention ! Tu as Bouillon de légumes dans Ingrédients et Bouillon légumes dans Cuisine 2. Comme ce n'est pas exactement identique la ligne sera supprimée alors qu'elle ne devrait pas l'être !...

Je te propose le code ci-dessous qui à l'ouverture du fichier colore les lignes sans les supprimer pour te permettre de vérifier avant la suppression irrémédiable :

Private Sub Workbook_Open() 'à l'ouverture du fichier
Dim OI As Worksheet 'déclare la variable OI (Onglet Ingrédients)
Dim C1 As Worksheet 'déclare la variable C1 (Onglet Cuisine 1)
Dim C2 As Worksheet 'déclare la variable C2 (Onglet Cuisine 2)
Dim TI As ListObject 'déclare la variable TI (Tableau Ingrédients)
Dim TC1 As ListObject 'déclare la variable TC1 (Tableau Cuisine 1)
Dim TC2 As ListObject 'déclare la variable TC2 (Tableau Cuisine 2)
Dim TEST As Boolean 'déclare la variable TEST

Set OI = Worksheets("Ingrédients") 'définit l'onglet OI
Set C1 = Worksheets("Cuisine 1") 'définit l'onglet C1
Set C2 = Worksheets("Cuisine 2") 'définit l'onglet C2
Set TI = OI.ListObjects("Tableau134") 'définit le tableau TI
Set TC1 = C1.ListObjects("Tableau13") 'définit le tableau TC1
Set TC2 = C2.ListObjects("Tableau1") 'définit le tableau TC2
For I = 1 To TI.ListRows.Count 'boucle 1 : sur toutes les lignes I du tableau OI
    TEST = False 'réinitialise la variale TEST
    For J = 1 To TC1.ListRows.Count 'boucle 2 : sur toutes les lignes J du tableau TC1
        'condition : si l'ingrédient ligne I colonne 4 de TI est égal à l'ingrédient ligne J colonne 10 de TC1
        If TI.DataBodyRange(I, 4).Value = TC1.DataBodyRange(J, 10).Value Then
            TEST = True 'redéfinit la variable TEST
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next J 'prochaine ligne de la boucle 2
    For K = 1 To TC2.ListRows.Count 'boucle 3 : sur toutes les lignes K du tableau TC2
        'condition : si l'ingrédient ligne I colonne 4 de TI est égal à l'ingrédient ligne K colonne 10 de TC2
        If TI.DataBodyRange(I, 4) = TC2.DataBodyRange(K, 10) Then
            TEST = True 'redéfinit la variable TEST
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next K 'prochaine ligne de la boucle 3
    If TEST = False Then TI.ListRows(I).Range.Interior.ColorIndex = 4 'colore la ligne de vert
    'If TEST = False Then TI.ListRows(I).Delete 'supprime la ligne
Next I 'prochaine ligne de la boucle 1
End Sub

Si tu tiens vraiment à Supprimer sans vérification, supprime dans le code la ligne :

If TEST = False Then TI.ListRows(I).Range.Interior.ColorIndex = 4 'colore la ligne de vert

et enlève l'apostrophe (le commentaire) devant la ligne :

 'If TEST = False Then TI.ListRows(I).Delete 'supprime la ligne

Sinon, il te suffirait d'enlever la couleur verte de la ligne (aucun remplissage) de Bouillon de légumes pour ne plus tenir compte de cette ligne dans la macro ci-dessous qui va supprimer toutes les lignes vertes :

Sub Macro1()
Dim OI As Worksheet 'déclare la variable OI (Onglet Ingrédients)
Dim TI As ListObject 'déclare la variable TI (Tableau Ingrédients)
Dim I As Integer 'déclare la variable I

Set OI = Worksheets("Ingrédients") 'définit l'onglet OI
Set TI = OI.ListObjects("Tableau134") 'définit le tableau TI
For I = TI.ListRows.Count To 1 Step -1 'boucle inversée sur toutes les ligne I de TI (de la dernière à la première)
    If TI.ListRows(I).Range.Interior.ColorIndex = 4 Then TI.ListRows(I).Delete 'si la couleur de la ligne est verte, supprime la ligne
Next I 'prochaine ligne de la boucle
End Sub

Et d'harmoniser Bouillon de légumes dans les deux tableaux.

Rechercher des sujets similaires à "supprimer lignes specifiques ouverture doc"