XL 2016 Macro sur Filtre

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Anto35200

XLDnaute Occasionnel
Bonjour,
Je ne sais pas comment faire une macro sur un Filtre.
En effet, dans le fichier joint, je souhaiterai mettre une macro sur la colonne B, en supprimant les noms des mécaniciens avec 1 seul nom.

Par exemple, je voudrai supprimer les lignes B, C et F où il y a 1 seul nom.
J'espère être clair dans mes explications.

Je vous remercie de vitre aide.
 

Pièces jointes

S'il n'y a pas beaucoup de lignes :
VB:
Sub Sup()
Dim i&
Application.ScreenUpdating = False
With [A1].CurrentRegion
    For i = .Rows.Count To 2 Step -1
        If InStr(.Cells(i, 2), ";") = 0 Then .Rows(i).Delete xlUp
    Next
End With
End Sub
Sinon utilisez un tableau VBA.
 

Pièces jointes

Si le tableau est dans un autre fichier il faut ouvrir ce fichier :
VB:
Sub Sup()
Dim i&
Application.ScreenUpdating = False
Workbooks.Open ThisWorkbook.Path & "\Filtre sur une unité.xlsx"
With ActiveWorkbook.Sheets(1).[A1].CurrentRegion
    For i = .Rows.Count To 2 Step -1
        If InStr(.Cells(i, 2), ";") = 0 Then .Rows(i).Delete xlUp
    Next
End With
End Sub
On suppose ici que les 2 fichiers sont dans le même dossier.
 

Pièces jointes

Cette macro fonctionne quels que soient le nom du fichier et le nombre de lignes :
VB:
Sub Sup()
Dim fichier As Variant, tablo, n&, i&
ChDir ThisWorkbook.Path
fichier = Application.GetOpenFilename("Fichiers Excel(*.xls*),*.xls*")
If fichier = False Then Exit Sub
With Workbooks.Open(fichier).Sheets(1).[A1].CurrentRegion.Resize(, 2)
    tablo = .Value
    n = 1
    For i = 2 To UBound(tablo)
        If InStr(tablo(i, 2), ";") Then
            n = n + 1
            tablo(n, 1) = tablo(i, 1)
            tablo(n, 2) = tablo(i, 2)
        End If
    Next
    '---restitution---
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).Delete xlUp 'RAZ en dessous
End With
End Sub
Elle est très rapide car elle utilise un tableau VBA.
 

Pièces jointes

Bonsoir Anto35200,

Ce n'est pas le même problème puisque maintenant il y a 10 colonnes.

En utilisant l'instruction :
VB:
MsgBox ActiveWorkbook.Sheets(1).[H1].CurrentRegion.Address
on voit que CurrentRegion correspond à A1:J70, donc tout le tableau.

Par ailleurs en colonne H ce n'est plus le point-virgule mais la virgule.

Donc voici la macro adaptée pour traiter la colonne H (8ème colonne) :
VB:
Sub Sup()
Dim fichier As Variant, tablo, n&, i&, j%
ChDir ThisWorkbook.Path
fichier = Application.GetOpenFilename("Fichiers Excel(*.xls*),*.xls*")
If fichier = False Then Exit Sub
With Workbooks.Open(fichier).Sheets(1).[A1].CurrentRegion.Resize(, 10)
    tablo = .Value
    n = 1
    For i = 2 To UBound(tablo)
        If InStr(tablo(i, 8), ",") Then 'recherche la virgule
            n = n + 1
            For j = 1 To 10
                tablo(n, j) = tablo(i, j)
            Next j
        End If
    Next i
    '---restitution---
    If .Parent.FilterMode Then .Parent.ShowAllData 'si la feuille est filtrée
    .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).Delete xlUp 'RAZ en dessous
End With
End Sub
Bonne nuit.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
832
Réponses
40
Affichages
3 K
Réponses
12
Affichages
308
Réponses
66
Affichages
505
Réponses
16
Affichages
748
Réponses
6
Affichages
493
Réponses
5
Affichages
62
Retour