Microsoft 365 faire une boucle auto pour supprimer les lignes contenant un "I" ou un "D" et copier les lignes qui contiennent un "A" dans une autre feuille excel

Alex55

XLDnaute Nouveau
Bonjour, je souhaite faire une boucle auto pour supprimer les lignes contenant un "I" ou un "D" et copier les lignes qui contiennent un "A" dans une autre feuille excel nommée "Incidents"

Voici le code que j'ai commencé à faire, mais je n'arrive pas à faire marcher la boucle tant que l'on a pas parcouru toutes les lignes
Dim rng As Range
Dim rng2 As Range
Dim i As Integer, Counter As Integer

'Set the range to evaluate to rng.
Set rng = Range("J2:J100")
Set rng2 = Range("B2:B100")

'initialize i to 1
i = 1

'Loop for a count of 1 to the number of rows
'in the range that you want to evaluate.
For Counter = 1 To rng.Rows.Count

'Si cellule i colonne J contient A, copier la cellule i
'dans tableau Incidents colonne A prochaine cellule vide
'Si cellule i colonne J contient D, supprimer la ligne
'Si cellule i colonne J contient I, supprimer la ligne
'Else increment i
If rng.Cells(i).Value Like "*A*" Then

ElseIf rng.Cells(i).Value Like "*D*" Then
rng.Cells(i).EntireRow.Delete
ElseIf rng.Cells(i).Value Like "*I*" Then
rng.Cells(i).EntireRow.Delete
Else
i = i + 1
End If

Next


Merci de votre aide
 
Solution
Salut,
en fait, c'est un #N/A qui provoque la copie.
avec le classeur joint, c'est nettement mieux ..
VB:
Sub TestF55()
Dim Wsce    As Worksheet
Dim Wtgt    As Worksheet
Dim L       As Long
Dim Lmax    As Long
Dim Rng     As Range
    Set Wsce = Worksheets("Mes actions")
    Set Wtgt = Worksheets("Incidents")
    Wsce.AutoFilterMode = False
    Lmax = Wsce.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    On Error Resume Next
    With Wsce.Range("A1:K" & Lmax)
        
        .AutoFilter Field:=.Columns.Count, Criteria1:="=*d*", Operator:=xlOr, Criteria2:="=*i*"
        Set Rng = Wsce.Range("A2:K" & Lmax).SpecialCells(xlCellTypeVisible) ' la ligne 1 est l'entête
        If Not Rng Is Nothing Then Rng.EntireRow.Delete...

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Juste deux questions :
1-
'Suppression si on trouve un D ou un I dans la colonne J
Mais en colonne J de "Mes actions" il y a des dates.
On peut donc trouver des D ou J dans Mes actions colonne J ?

2-
'Collage colonne B si on trouve un A dans case colonne J dans colonne A feuille Incidents
C'est ambigüe.
dans case colonne J dans colonne A feuille Incidents
Mais dans colonne A feuille Incidents il y a un N° d'incident, et colonne J rien. Que doit on chercher ?
 

Alex55

XLDnaute Nouveau
Re,
Juste deux questions :
1-

Mais en colonne J de "Mes actions" il y a des dates.
On peut donc trouver des D ou J dans Mes actions colonne J ?

2-

C'est ambigüe.

Mais dans colonne A feuille Incidents il y a un N° d'incident, et colonne J rien. Que doit on chercher ?
Oh la oui en effet, je me suis trompé, c'est en colonne K de "Mes Actions" et pas en colonne J !


Pour essayer d'être plus clair je vais écrire par étape ce que j'aurai fait à la main :
- Après avoir supprimé les lignes qui contiennent un I ou un D en colonne K,
- Copier la colonne B, feuille "Mes actions"
- Coller en colonne A, sous les cases déjà remplies, feuille "Incidents"
- Répéter l'opération pour les colonnes E et G
 

fanch55

XLDnaute Barbatruc
Salut,
en fait, c'est un #N/A qui provoque la copie.
avec le classeur joint, c'est nettement mieux ..
VB:
Sub TestF55()
Dim Wsce    As Worksheet
Dim Wtgt    As Worksheet
Dim L       As Long
Dim Lmax    As Long
Dim Rng     As Range
    Set Wsce = Worksheets("Mes actions")
    Set Wtgt = Worksheets("Incidents")
    Wsce.AutoFilterMode = False
    Lmax = Wsce.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row
    On Error Resume Next
    With Wsce.Range("A1:K" & Lmax)
        
        .AutoFilter Field:=.Columns.Count, Criteria1:="=*d*", Operator:=xlOr, Criteria2:="=*i*"
        Set Rng = Wsce.Range("A2:K" & Lmax).SpecialCells(xlCellTypeVisible) ' la ligne 1 est l'entête
        If Not Rng Is Nothing Then Rng.EntireRow.Delete
        
        .AutoFilter Field:=.Columns.Count, Criteria1:="=#N/A"
        Set Rng = Wsce.Range("A2:K" & Lmax).SpecialCells(xlCellTypeVisible) ' la ligne 1 est l'entête
        If Not Rng Is Nothing Then
            L = Wtgt.Cells(Wtgt.Rows.Count, "A").End(xlUp).Row
            If L > 1 Then L = L + 1
            Rng.Columns("B").Cells.SpecialCells(xlCellTypeVisible).Copy Wtgt.Cells(L, "A")
            Rng.Columns("E").Cells.SpecialCells(xlCellTypeVisible).Copy Wtgt.Cells(L, "B")
            Rng.Columns("G").Cells.SpecialCells(xlCellTypeVisible).Copy Wtgt.Cells(L, "C")
            Rng.EntireRow.Delete
        End If
        
    End With
    Wsce.AutoFilterMode = False

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
300 906
Messages
1 988 346
Membres
210 124
dernier inscrit
Arnnaud