OVH Cloud OVH Cloud

filtrage puis sélection complexe

3 réponses
Avatar
AntiSpam
Bonjour,

J'ai un très grand tableau sur la feuille 1.
Je voudrai filtrer les lignes contenant une certaine chaîne de caractère
(jusque là pas de problème), puis (et là ça se complique) faire un
copier-coller vers la feuille 2 des deux lignes qui précèdent et des trois
qui suivent celles contenant la chaîne de caractère que j'ai filtré.

Problème, lorsque je filtre, je n'ai plus que les lignes contenant la chaîne
de caractère, alors comment puis-je faire pour obtenir les 2 lignes
précédentes et les 3 suivantes du tableau initial ?

Je m'y perds ...

Merci à toutes et à tous pour votre aide.
Cordialement.

3 réponses

Avatar
Jacquouille
Bonsoir
En toute modestie, si tu prenais le n° de la ligne filtrée, puis via macro,
faire copier-coller de la ligne n-2 jusque n+3 ?
bonne chance

--
Jacquouille con seille : http://www.excelabo.net


"AntiSpam" a écrit dans le message news:
bi2s98$fam$
Bonjour,

J'ai un très grand tableau sur la feuille 1.
Je voudrai filtrer les lignes contenant une certaine chaîne de caractère
(jusque là pas de problème), puis (et là ça se complique) faire un
copier-coller vers la feuille 2 des deux lignes qui précèdent et des trois
qui suivent celles contenant la chaîne de caractère que j'ai filtré.

Problème, lorsque je filtre, je n'ai plus que les lignes contenant la
chaîne

de caractère, alors comment puis-je faire pour obtenir les 2 lignes
précédentes et les 3 suivantes du tableau initial ?

Je m'y perds ...

Merci à toutes et à tous pour votre aide.
Cordialement.




Avatar
AntiSpam
Bonsoir,

Le problème est que cette ligne ne sera jamais la même et qu'il y a un grand
nombre d'occurence sur un très grand tableau.

Merci
Avatar
michdenis
Bonjour Antispam,


Voici une procédure qui copie sur une autre feuille les résultats d'un filtre.

En plus de la plage filtrée, elle copie aussi les 2 premières lignes adjacentes situées juste avant la première ligne de la
plage filtrée, et, copie aussi, les 3 lignes adjacentes à la dernières lignes du résultat du filtre.

Attention, dans la procédure, il est indiqué l'endroit où tu dois modifier la procédure selon ton application.

'------------------------------
Sub CopieResultatFiltre()

Dim Rg As Range, Rg1 As Range, Rg2 As Range
Dim A As String, B As String, C As String
Dim Sh As Worksheet, Chaine As String
Dim Sh1 As Worksheet

'****Variables à définir**********
Chaine = "toto10"
Set Sh = Worksheets("Feuil1") 'Données
Set Sh1 = Worksheets("Feuil2") 'où seront copiées les données
'*****************************

With Sh
'****Définir plage de tes données*******
Set Rg = .Range("d10:K" & .Range("d65536").End(xlUp).Row)
'********************************
With Rg
'A déterminer Le "1" , le champ de la plage sur lequel tu filtres
.AutoFilter 1, Criteria1:=Chaine
Set Rg1 = Sh.Range(Sh.AutoFilter.Range.Address)
Set Rg2 = Rg1.Offset(1).Resize(Rg1.Rows.Count - 1, _
Rg.Columns.Count).SpecialCells(xlCellTypeVisible)
If Not Rg2 Is Nothing Then
With Rg2
'Le select case c'est pour tenir compte du fait
'que la première ligne du filtre peut la ligne 2,3
'et dans ce cas la méthode .offset(-2) ne donne pas
'le résultat désiré.
Select Case .Item(1).Row
Case Is = Rg1.Item(1).Row + 1
A = .Item(1).Resize(1, .Columns.Count).Address
Case Is = Rg1.Item(1).Row + 2
A = .Item(1).Offset(-1).Address & ":" & .Item(1) _
.Resize(1, .Columns.Count).Address
Case Is >= Rg1.Item(1).Row + 3
A = .Item(1).Offset(-2).Address & ":" & .Item(1) _
.Offset(-1).Resize(1, .Columns.Count).Address
End Select
'L'adresse de la plage des données filtrées
B = .Address
'L'adresse + 3 lignes
C = Sh.Cells(.Areas(.Areas.Count).Offset(1).Row, Rg(1).Column) _
.Resize(3, 1).Resize(, .Columns.Count).Address
Set rg3 = Union(Sh.Range(A), Sh.Range(B), Sh.Range(C))
End With
.AutoFilter
End If
End With
End With

'Copie vers ...
With Sh1
rg3.Copy .Range("A" & .Range("A65536").End(xlUp)(2).Row)
End With

Set Sh = Nothing: Set Rg = Nothing: Set Sh1 = Nothing
Set Rg1 = Nothing: Set Rg2 = Nothing: Set rg3 = Nothing

End Sub
'------------------------------

Salutations!




"AntiSpam" a écrit dans le message de news:bi2s98$fam$
Bonjour,

J'ai un très grand tableau sur la feuille 1.
Je voudrai filtrer les lignes contenant une certaine chaîne de caractère
(jusque là pas de problème), puis (et là ça se complique) faire un
copier-coller vers la feuille 2 des deux lignes qui précèdent et des trois
qui suivent celles contenant la chaîne de caractère que j'ai filtré.

Problème, lorsque je filtre, je n'ai plus que les lignes contenant la chaîne
de caractère, alors comment puis-je faire pour obtenir les 2 lignes
précédentes et les 3 suivantes du tableau initial ?

Je m'y perds ...

Merci à toutes et à tous pour votre aide.
Cordialement.