VBA macro rechercher et supprimer une ligne

aclement

XLDnaute Nouveau
Bonjour,

Cela fait maintenant 3 jours que j'essaye désespérément de trouver la solution à ce problème :

L'objectif est de faire une macro !

Dans ma 'Feuille1' j'ai du texte écrit dans les cellules A1 à G1, je voudrais faire une recherche de cet ensemble de cellules Range("A1:G1") dans ma 'Feuille2' ... Pour info cette recherche se fera dans les mêmes colonnes soit entre les colonnes A et G de la "Feuille2'

Si dans ma 'Feuille2' il trouve exactement la sélection (A1:G1) de ma 'Feuille1" alors je voudrais supprimer la ligne sinon ne rien faire ...

Quelqu'un a-t-il une idée ?

Merci :)
 

job75

XLDnaute Barbatruc
Re : VBA macro rechercher et supprimer une ligne

Bonjour aclement, bienvenue sur XLD,

Ce n'est pas difficile mais il faudrait que vous déposiez votre fichier (allégé mais significatif) pour voir exactement de quoi il s'agit.

Et sur votre fichier indiquez les lignes que vous voulez supprimer pour qu'on soit bien d'accord.

A+
 

aclement

XLDnaute Nouveau
Re : VBA macro rechercher et supprimer une ligne

J'ai déposé en pièce jointe mon fichier.

J'ai commencé une macro qui recherche la ligne en question mais cela ne fonctionne pas !!!

Merci pour votre réponse !
 

Pièces jointes

  • test2.xlsm
    21.3 KB · Affichages: 46
  • test2.xlsm
    21.3 KB · Affichages: 53
  • test2.xlsm
    21.3 KB · Affichages: 44

job75

XLDnaute Barbatruc
Re : VBA macro rechercher et supprimer une ligne

Re,

Voyez le fichier joint et cette macro :

Code:
Sub SupprimerLignes()
Dim F1 As Worksheet, F2 As Worksheet, plage As Range
Dim t1, t2, ub%, i&, j%, sup As Boolean, n&
Set F1 = Sheet1 'CodeName de la feuille
Set F2 = Sheet2 'CodeName de la feuille
Set plage = Intersect(F2.UsedRange, F2.[A:G])
If Not plage Is Nothing Then
  Application.ScreenUpdating = False
  t1 = F1.[A1:G1] 'matrice, plus rapide
  t2 = plage 'matrice, plus rapide
  ub = UBound(t2, 2)
  For i = UBound(t2) To 1 Step -1
    sup = True
    For j = 1 To ub
      If t2(i, j) <> t1(1, j) Then sup = False: Exit For
    Next
    If sup Then n = n + 1: plage.Rows(i).Delete xlUp
  Next
  Application.ScreenUpdating = True
End If
MsgBox n & " ligne(s) supprimée(s)", , "Suppression"
End Sub
A+
 

Pièces jointes

  • Supprimer lignes(1).xls
    47 KB · Affichages: 58

job75

XLDnaute Barbatruc
Re : VBA macro rechercher et supprimer une ligne

Re,

Edit : J'ai modifié la définition de la plage :

Code:
Set plage = Intersect(F2.UsedRange.EntireRow, F2.[A:G])
Ainsi plage contient toujours au moins 7 cellules, on évite le test.

Fichier (2).

A+
 

Pièces jointes

  • Supprimer lignes(2).xls
    47 KB · Affichages: 48
  • Supprimer lignes(2).xls
    47 KB · Affichages: 48
  • Supprimer lignes(2).xls
    47 KB · Affichages: 52
Dernière édition:

aclement

XLDnaute Nouveau
Re : VBA macro rechercher et supprimer une ligne

Dernière petite chose ...

Il y a t-il possibilité de rechercher cette ligne non seulement dans la 'feuille2' mais également dans toutes les feuilles du classeur sauf la 'feuille1' ?

En faisant une boucle de ce type : For i = 2 To Sheets.Count

Encore merci pour votre aide ...

A+
 

job75

XLDnaute Barbatruc
Re : VBA macro rechercher et supprimer une ligne

Re,

Oui, une boucle sur toutes les feuilles du classeur :

Code:
Sub SupprimerLignes()
Dim F As Worksheet, t1, w As Worksheet, n&
Dim plage As Range, t2, ub%, i&, j%, sup As Boolean
Set F = Sheet1 'CodeName de la feuille
t1 = F.[A1:G1] 'matrice, plus rapide
Application.ScreenUpdating = False
For Each w In ThisWorkbook.Worksheets
  If w.Name <> F.Name Then
    n = 0
    Set plage = Intersect(w.UsedRange.EntireRow, w.[A:G])
    t2 = plage 'matrice, plus rapide
    ub = UBound(t2, 2)
    For i = UBound(t2) To 1 Step -1
      sup = True
      For j = 1 To ub
        If t2(i, j) <> t1(1, j) Then sup = False: Exit For
      Next
      If sup Then n = n + 1: plage.Rows(i).Delete xlUp
    Next
    MsgBox n & " ligne(s) supprimée(s) en feuille '" & w.Name & "'", , "Suppression"
  End If
Next
End Sub
Edit : comme au post #6 j'ai modifié la définition de plage.

A+
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
152

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa