Supprimer ligne si en VBA excel

matrix

XLDnaute Occasionnel
Bonjour a tous,

J'ai besoin de votre aide sur ce problème.

J'importe souvent un fichier texte dans un fichier Excel, car je dois le travailler souvent.

Dans la feuille "Base de donnée", j'ai l'importation du fichier TXT, et dans la feuille Trie, j'ai des numéro un en dessous de l'autre.

Ce que je voudrais, c'est qu'à chaque numéro de la feuille de trie, qu'il supprime les lignes de la feuille "Base de donnée".

Exemple:

Feuille de Trie:
01517
01521



Feuille base de donnée:
01517 G1514013700 606 5814 319062609111301230ND$$10.63 5062409N
01517 G1714013650 837 9827 619062609111301230ND$$20.63 5062409N
01517 G3014013630 537 1498 75062609111301230ND$$2.50 5062409N
01517 G3714013690 148 482 31062609111301230ND$$1.03 5062409N
01518 G1514013830 821 7861 418062609111301230ND$$13.93 5062409N
01518 G1714013720 280 1963 218062609111301230ND$$7.27 5062409N
01518 G1714014070 544 5994 378062609111301230ND$$12.60 5062409N
01518 G3014013800 569 1470 84062609111301230ND$$2.80 5062409N
01518 G3714013740 186 674 37062609111301230ND$$1.23 5062409N
01519 G1514013790 403 4095 249062609111301230ND$$8.30 5062409N
01519 G1714014060 504 5687 458062609111301230ND$$15.27 5062409N
01519 G1714014180 88 1175 135062609111301230ND$$4.50 5062409N
01519 G3014013780 365 832 50062609111301230ND$$1.67 5062409N
01519 G3714013840 120 310 34062609111301230ND$$1.13 5062409N
01520 G1514013870 681 8466 424062609111301230ND$$14.13 5062409N
01520 G1714013930 578 6813 415062609111301230ND$$13.83 5062409N
01520 G1714014150 263 1980 199062609111301230ND$$6.63 5062409N
01520 G3014014270 576 2008 107062609111301230ND$$3.57 5062409N
01520 G3714013850 190 603 51062609111301230ND$$1.70 5062409N
01521 G1514014020 486 4437 241062609111301230ND$$8.03 5062409N


Donc dans la feuille base de donnée, toutes les lignes qui débutent par 01517 et 01521 seront supprimées.

Comment faire S.V.P?

Merci encore pour votre aide

matrix
 

Pièces jointes

  • test txt.zip
    16.3 KB · Affichages: 56

Robert

XLDnaute Barbatruc
Repose en paix
Re : Supprimer ligne si en VBA excel

Bonjour Matrix, bonjour le forum,

je te propose la macro suivante :

Code:
Sub Macro1()
Dim t As Worksheet, b As Worksheet 'déclare les varoavles t et d (les onglets Trie et Base de donné)
Dim cel As Range 'décalre la variable cel (CELlule)
Dim vr As String 'déclare la variaable vr (Valeur Recherchée)
Dim x As Long 'déclare la variable x
 
Application.ScreenUpdating = False 'masque les changements à l'écran
Set t = Sheets("Trie") 'définit la variable t
Set b = Sheets("Base de donnée") 'définit la variable b
For Each cel In t.Range("A1:A" & t.Range("A65536").End(xlUp).Row) 'boucle 1 : sur toutes les cellules éditée cel de la colonne A de l'onglet "Trie"
    vr = cel.Value 'définit la variable cel
    For x = b.Range("A65536").End(xlUp).Row To 1 Step -1 'boucle 2 : inversée sur toutes les cellules éditée de la colonne A de l'onglet "Base de donnée"
        If Left(Cells(x, 1), 5) = vr Then Rows(x).Delete 'si les 5 premiers caractères correspondent à la variable vr, supprime la ligne
    Next x 'prochaine cellules de la boucle 2
Next cel 'prochaine cellule de la boucle 1
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub
 

Cousinhub

XLDnaute Barbatruc
Re : Supprimer ligne si en VBA excel

Bonsoir,

Bonsoir, Robert... :)

une autre variante..

Code:
Sub suppr()
Dim Cel As Range
Dim Lignes As Object
Dim I As Long
Application.ScreenUpdating = False
Set Lignes = CreateObject("Scripting.Dictionary")
With Sheets("Trie")
    For Each Cel In .Range("A1:A" & .[A65000].End(xlUp).Row)
        tmp = tmp & "," & Cel.Value
    Next Cel
End With
With Sheets("Base de donnée")
    For Each Cel In .Range("A1:A" & .[A65000].End(xlUp).Row)
        If InStr(1, tmp, Left(Cel, 5)) > 0 Then _
            Lignes.Item(Cel.Row) = Cel.Row
    Next Cel
End With
temp = Application.Transpose(Lignes.Items)
For I = UBound(temp) To LBound(temp) Step -1
    Rows(temp(I, 1)).Delete
Next I
End Sub
 

hbenalia

XLDnaute Occasionnel
Re : Supprimer ligne si en VBA excel

Bonjour à tous,

Je ne sais pas si vous avez remarqué que les deux macros proposées par "Robert" et "bhbh" suppriment les lignes qui commencent aussi par 01543 , 03201 , 03210... Mais il faut reconnaitre à l'élaboration très rapide de ces macros...
 

matrix

XLDnaute Occasionnel
Re : Supprimer ligne si en VBA excel

Petite question encore.

Dans la rangé a de la feuille trie, comment faire en sorte que le chiffre indiqué, exemple 1530, devienne en format texte en 5 caracteres.

ex: 1530 deviens 01530.

s'il a déja 5 caracteres, ex 58350, il reste pareille.

JMP
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Supprimer ligne si en VBA excel

Bonjour,

Code:
Sub supLignes()
  Application.ScreenUpdating = False
  Set Dico = CreateObject("Scripting.Dictionary")
  For Each c In Sheets("trie").[A1].CurrentRegion:  Dico(c.Text) = "":  Next c
  i = 1
  Set f = Sheets("Base de donnée")
  Do While f.Cells(i, 1) <> ""
    If Dico.Exists(Left(f.Cells(i, 1), 5)) Then f.Rows(i).Delete Else i = i + 1
  Loop
End Sub

JB
 

Pièces jointes

  • Copie de test txt.zip
    24.9 KB · Affichages: 63
Dernière édition:

matrix

XLDnaute Occasionnel
Re : Supprimer ligne si en VBA excel

Merci encore BOISGONTIER.

Maintenant, j'ai se probleme.

Dans la rangé a de la feuille trie, comment faire en sorte que le chiffre indiqué, exemple 1530, devienne en format texte en 5 caracteres.

ex: 1530 deviens 01530.

s'il a déja 5 caracteres, ex 58350, il reste pareille.

matrix
 

Statistiques des forums

Discussions
312 664
Messages
2 090 676
Membres
104 633
dernier inscrit
benabidwajih