Boucle : Extraire données d'un tableau

Bonjour à tous,

Je souhaiterais extraire certaines données précises du tableau (cf : pièce jointe) et les copier dans la feuil3.

Je veux extraire dans les 3 premières colonnes de la feuil3 les données ayant les critères suivants (Colonne G : Préparateur, Colonne M : MATIN), seuls ces 3 champs m'intéressent :

  • NOM
  • PRENOM
  • MATRICULE

Je veux ensuite extraire dans les colonnes E,F,G de la feuil3 les données ayant les critères suivants (Colonne G : Préparateur, Colonne M : AM), idem je ne veux que ces 3 champs :

- NOM

  • PRENOM
  • MATRICULE

J'ai bidouillé une boucle en allant piocher des infos à droite à gauche mais celle ci me colle toute la ligne alors que je ne veux que les 3 champs ci dessus.

D'avance, merci.

Bonjour

Cela te convient-il ?

Le résultat est exactement celui escompté. Un grand merci à toi gmb.

Etant curieux et ayant envie de progresser j'essaye de comprendre ton raisonnement, Si j'ai bien compris, pour cet exercice une boucle While était donc plus appropriée pour une extraction qu'une boucle For Next ? Ou aurais-ju pu arriver au même résultat ?

Encore une fois, merci.

Bonjour,

Voir fichier joint.

Cdlt

Option Explicit
Public Sub Rectangleàcoinsarrondis1_Clic()
Dim Wss As Worksheet, Wsd As Worksheet
Dim Derligne As Long, Ligne As Long, i As Long

    Application.ScreenUpdating = False
    Set Wss = Worksheets("Données")
    Set Wsd = Worksheets("Extraction")

    With Wsd
        .Cells.Clear
        .[A1] = "MATIN": .[A2:C2] = Array("Nom", "Prénom", "Matricule")
        .[E1] = "AM": .[E2:G2] = Array("Nom", "Prénom", "Matricule")
    End With

    With Wss
        Derligne = .Range("A" & Rows.Count).End(xlUp).Row
        Ligne = 3
        For i = 4 To Derligne
            If .Cells(i, 7) = "Préparateur" And .Cells(i, 13) = "MATIN" Then
                Wsd.Cells(Ligne, 1) = .Cells(i, 1)
                Wsd.Cells(Ligne, 2) = .Cells(i, 2)
                Wsd.Cells(Ligne, 3) = .Cells(i, 12)
                Ligne = Ligne + 1
            End If
        Next
        Ligne = 3
        For i = 4 To Derligne
            If .Cells(i, 7) = "Préparateur" And .Cells(i, 13) = "AM" Then
                Wsd.Cells(Ligne, 5) = .Cells(i, 1)
                Wsd.Cells(Ligne, 6) = .Cells(i, 2)
                Wsd.Cells(Ligne, 7) = .Cells(i, 12)
                Ligne = Ligne + 1
            End If
        Next
    End With
    Wsd.Activate

    Set Wss = Nothing: Set Wsd = Nothing
End Sub

Merci beaucoup !

Bonjour

Tu écris :

...une boucle While était donc plus appropriée pour une extraction qu'une boucle For Next ?

On aurait pu utiliser une boucle For Next mais il aurait fallu déterminer d'abord le numéro de la dernière ligne des noms de la colonne A.

On aurait eu :

Sub Extraction()

    'Initialisation de la feuille 3
    Range(Sheets("Feuil3").Cells(4, 1), Sheets("Feuil3").Cells(Rows.Count, Columns.Count)).Clear

    'Report sur la feuille 3
    Ln = 4
    Lgn1 = 4
    Lgn2 = 4
    DerLn = Range("A" & Rows.Count).End(xlUp).Row
    For Ln = 2 To DerLn
        With Sheets("Feuil3")
            If Cells(Ln, 7).Value = "Préparateur" And Cells(Ln, 13).Value = "MATIN" Then
                .Cells(Lgn1, 1).Value = Cells(Ln, 1).Value
                .Cells(Lgn1, 2).Value = Cells(Ln, 2).Value
                .Cells(Lgn1, 3).Value = Cells(Ln, 12).Value
                Lgn1 = Lgn1 + 1
            End If
            If Cells(Ln, 7).Value = "Préparateur" And Cells(Ln, 13).Value = "AM" Then
                .Cells(Lgn2, 5).Value = Cells(Ln, 1).Value
                .Cells(Lgn2, 6).Value = Cells(Ln, 2).Value
                .Cells(Lgn2, 7).Value = Cells(Ln, 12).Value
                Lgn2 = Lgn2 + 1
            End If
        End With
    Next Ln
    Sheets("feuil3").Select
End Sub

Bye !

Rechercher des sujets similaires à "boucle extraire donnees tableau"