[COLOR="DarkSlateGray"]Sub sélectionner_Code_1()
Dim oDat, sDat, sVal As String, i As Long, j As Long
[COLOR="SeaGreen"][B]'Sélection des codes A7:Dx où x est le n° de la ligne contenant la dernière donnée.
'Pour augmenter le nombre de colonnes sélectionnées, augmenter la valeur 3 dans Offset(0, 3)
'(Mettre 4 pour atteindre la colonne E, 5 pour F...
'Les données sont enregistrées dans le tableau oDat.[/B][/COLOR]
With Sheets("Detail")
oDat = .Range(.Cells(7, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 3)).Value
End With
[COLOR="SeaGreen"][B]'Traitement des données.[/B][/COLOR]
With Sheets("Tableau")
sVal = .[B4].Value [COLOR="SeaGreen"][B]'Lecture du code recherché[/B][/COLOR]
ReDim sDat(1 To 4, 1 To 1) [COLOR="SeaGreen"][B]'Préparation d'un tableau pour enregistrer les lignes
'intéressantes. Ce tableau à le nombre de colonnes du tableau oDat pour nombre de lignes :
'si on prend 5 colonnes, mettre sDat(1 To 5, 1 To 1). Pour 6 colonnes, sDat(1 To 6, 1 To 1)...[/B][/COLOR]
For i = 1 To UBound(oDat, 1) [COLOR="SeaGreen"][B]'On va parcourir toutes les lignes de la colonne 1 (parcequ'
'on cherche un Code1) du tableau oDat.
'Si on veut chercher un Code2, mettre UBound(oDat, 2). Pour un Code3 : UBound(oDat, 3)...[/B][/COLOR]
If oDat(i, 1) = sVal Then [COLOR="SeaGreen"][B]'Si on trouve le code recherché...[/B][/COLOR]
For j = 1 To UBound(sDat, 1) [COLOR="SeaGreen"][B]'...on met les valeurs de la ligne correspondante dans
'la dernière colonne du tableau sDat...[/B][/COLOR]
sDat(j, UBound(sDat, 2)) = oDat(i, j)
Next j
ReDim Preserve sDat(1 To 4, 1 To 1 + UBound(sDat, 2)) [COLOR="SeaGreen"][B]'...et on ajoute une nouvelle
'colonne au tableau sDat. Ne pas oublier de modifier le 4 si on prend plus ou moins de colonnes.[/B][/COLOR]
End If
Next i
sDat = Application.Transpose(sDat) [COLOR="SeaGreen"][B]'Transposition des colonnes en lignes...
'Puis vidage de la plage où on va écrire les données de ce tableau ; pour 4 colonnes :[/B][/COLOR]
.Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 3)).Offset(1, 0).ClearContents
[COLOR="SeaGreen"][B]'Pour 5 colonnes, on mettra :
' .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp).Offset(0, 4)).Offset(1, 0).ClearContents
'Enfin, écriture des données dans la feuille "Tableau"[/B][/COLOR]
.Range(.Cells(5, 1), .Cells(4 + UBound(sDat, 1), 4)).Value = sDat
[COLOR="SeaGreen"][B]'Pour 5 colonnes, on mettra :
' .Range(.Cells(5, 1), .Cells(4 + UBound(sDat, 1), 5)).Value = sDat[/B][/COLOR]
.Activate [COLOR="SeaGreen"][B]'Affichage de la feuille "Tableau"[/B][/COLOR]
End With
End Sub[/COLOR]