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.
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
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 SubBye !