Sélectionner des Lignes en fonction du critère d'un filtre

Le
stormtroopertk1230 Hors ligne
Bonjour,

Je voudrai sélectionner un ensemble de ligne en fonction du critère du filtre Colonne AF (critères numérique 1 à 50).
Une fois les lignes sélectionnées avec le critère 32 (par exemple), les lignes seraient à copiées puis à insérer entre les lignes 2 & 3 vers un onglet d'un autre classeur.
En espérant avoir été clair.
Merci de votre retour.
Chris
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gloops
Le #24490021
stormtroopertk1230 a écrit, le 20/03/2012 11:49 :
Bonjour,

Je voudrai sélectionner un ensemble de ligne en fonction du critère du filtre
Colonne AF (critères numérique 1 à 50).
Une fois les lignes sélectionnées avec le critère 32 (par exemple ), les lignes
seraient à copiées puis à insérer entre les lignes 2& 3 vers u n onglet d'un
autre classeur.
En espérant avoir été clair.
Merci de votre retour.
Chris



Bonjour,

Je suppose qu'on parle d'Excel.

Pour sélectionner une ligne d'après une valeur cherchée dans la col onne
AF, je propose ceci (peut-être faudra-t-il adapter ce qu'on veut faire
pour une valeur non trouvée) :


Public Sub SelecValeur(ValeurCherchee)
Dim ColSearch As Range, R As Range
Set ColSearch = ActiveSheet.Columns(32)
Set R = ColSearch.Find(ValeurCherchee)
If R Is Nothing Then
MsgBox ValeurCherchee & " : Valeur non trouvée"
Else
ActiveSheet.Rows(R.Row).Select
End If
End Sub
Gloops
Le #24492001
Gloops a écrit, le 19/05/2012 18:09 :
stormtroopertk1230 a écrit, le 20/03/2012 11:49 :
Bonjour,

Je voudrai sélectionner un ensemble de ligne en fonction du critèr e du
filtre
Colonne AF (critères numérique 1 à 50).
Une fois les lignes sélectionnées avec le critère 32 (par exempl e),
les lignes
seraient à copiées puis à insérer entre les lignes 2& 3 vers u n onglet
d'un
autre classeur.
En espérant avoir été clair.
Merci de votre retour.
Chris





Oops, je viens de rejeter un coup d'oeil à ce que j'ai proposé hier.
Mauvaise surprise : la fonction Search est capable de trouver 3 ou 2 là
où il y a 32.
De plus, oubli : on retourne une ligne, mais on peut en vouloir plusieurs .

Nouvelle version :

Appeler CopierLignesSurValeur, avec en argument la valeur cherchée. Le
traitement marquera une pause sur chacune des lignes concernées, on peu t
donc placer une instruction Copy à cet endroit.

Exemple de la syntaxe d'appel si on cherche 5 :
CopierLignesSurValeur 5

Pas de parenthèses, ce qui est cohérent avec l'absence de valeur de r etour.

A noter que dans cette version, la commande Select dans SelecValeur
pourrait tout aussi bien être enlevée.

La fonction RecupereLignes va récupérer les numéros des lignes sous la
forme d'un tableau de chaînes de caractères contenant des nombres, qu e
CopierLignesSurValeur va ensuite parcourir pour sélectionner les lignes
les unes à la suite des autres, ce qui permet d'insérer un autre
traitement à cet endroit. Par exemple, la copie de la ligne sélection née
pour aller la coller ailleurs.
La procédure CopierLignesSurValeur est ci-après à la fin.


Public Function SelecValeur(ValeurCherchee, Optional Apres) As Integer
Dim ColSearch As Range, R As Range
Set ColSearch = ActiveSheet.Columns(30)
'Debug.Print ColSearch.Column
If IsMissing(Apres) Then
Set R = ColSearch.Find(ValeurCherchee, LookAt:=xlWhole)
Else
Set R = ColSearch.Find(ValeurCherchee,
ColSearch.Cells(Apres).Offset(1, 0), LookAt:=xlWhole)
If R.Row <= Apres Then
SelecValeur = 0
Exit Function
End If
End If
If R Is Nothing Then
MsgBox "Valeur non trouvée"
SelecValeur = 0
Else
ActiveSheet.Rows(R.Row).Select
'Debug.Print "Ligne : " & R.Row
SelecValeur = R.Row
End If
End Function

Public Function RecupereLignes(ValeurCherchee)
Dim strTemp As String
Dim L As Integer
L = SelecValeur(ValeurCherchee)
While Not L = 0
strTemp = strTemp + Str$(L) + ","
L = SelecValeur(ValeurCherchee, L)
Wend
RecupereLignes = Split(Left$(strTemp, Len(strTemp) - 1), ",")
End Function

Public Sub CopierLignesSurValeur(ValeurCherchee)
Dim LN() As String
Dim L
LN = RecupereLignes(ValeurCherchee)
For Each L In LN
Debug.Print L
ActiveSheet.Rows(Val(L)).Select
Stop
Next
End Sub
Publicité
Poster une réponse
Anonyme