Sélection ligne dans lignes filtrées

Sélection ligne dans lignes filtrées - VB/VBA/VBS - Programmation

Marsh Posté le 08-03-2007 à 13:55:20    

Bonjour,
 
Je recherche une macro qui permette de sélectionner une cellule précise dans les lignes filtrées (visible) uniquement.
J'ai réalisé la macro suivante, qui ne fonctionne pas :-(( :
Cells(3, 2).SpecialCells(xlCellTypeVisible).Item(1).Select
elle sélectionne la cellule en ligne 3 et colonne 2 de l'ensemble des lignes excel, alors que je souhaite sélectionner la cellule enligne 3 et colonne des lignes visible.
exemple :
ligne 1                toto (filtre = 1)         tata
ligne 5                   1                           5
ligne 7                   1                            8
ligne 10                  1                            9  
ligne 14                   1                           5
la macro devrit sélectionner la cellule en ligne 10 colonne 2
 
d'avance merci d evotre aide,
 
lasapinière,

Reply

Marsh Posté le 08-03-2007 à 13:55:20   

Reply

Marsh Posté le 08-03-2007 à 15:48:41    

lasapiniere a écrit :

sélectionner la cellule enligne 3 et colonne ?? des lignes visible.


tu peux éditer ton post, je ne comprends pas ton pb stp...


Message édité par jpcheck le 08-03-2007 à 15:48:55
Reply

Marsh Posté le 09-03-2007 à 11:47:01    

A Jpcheck : Colonne 2, je suppose.
Le problème c'est que son code ne prend pas en compte le pré-filtre.
 
A lasapiniere :  
 
Peux-tu nous dire quel est le critère qui fait que tu choisis cette cellule contenant "9" plutot qu'une autre :  
 
En effet, vu que le "SpecialCells(xlCellTypeVisible).Item..." ne semble pas fonctionner, soit il faut que tu ointègres ta condoition de sélection dans ton code VBA (de type "if blabla then bloblo" ) ou, s'il s'agit d'un choix arbitraire et unique (genre "toujours le ligne 10 et colonne 2" ), alors tu écris "cells(10,2)" et point.

Reply

Marsh Posté le 09-03-2007 à 12:49:34    

l'nformation que je cherche récupérer se trouve toujours au même emplacement sur un nombre de ligne défini, je m'explique :
- quand j'applique mon filtre sur la colonne 1, le filtre récupère à chaque fois X lignes quelque soit la valeur de mon filtre (car ma valeur est répétée X fois en colonne 1 avec des infos autres sur les autres colonnes)
- je cherche à récupérer la valeur de la cellule se trouvant ligne 2 et colonne 2 des lignes filtrées
ex
      colonne A             colonne B
1      TOTO                     28
2      TOTO                      42
2       TATA                      64                         dans ce cas quand je filtre TATA, je dois
4       TATA                       25               récupérer l'info 25. valeur se trouvant en
5        TITI                       16                ligne 2 (des lignes filtrées) et colonne 2  
6         TITI                        23
7
en espérant être plus claire,

Reply

Marsh Posté le 09-03-2007 à 16:37:57    

Bonsoir,
pour t'aider:
    monarticle = "07-01-003"
     
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
    Dim C As Range, Adr
With ActiveSheet.AutoFilter.Range.Columns(1)
Set C = .Columns(1).Find("*" )
MsgBox C.Row
Set C = .FindNext(C)
MsgBox C.Row
End With
 
 
tu verras que le deuxième N° de row (2eme msgbox) est celui de la 2eme ligne visible donc cells(C.row,2) contient la valeur recherchée
 
Cordialement
 
(Adaptation d'une info sur excellabo)


Message édité par seniorpapou le 09-03-2007 à 21:06:51
Reply

Marsh Posté le 12-03-2007 à 17:11:13    

Bonjour seniorpapou,
 
je vois qur tu te souviens de m apremière demande, fichier opérationnel grace à ton aide précieuse et je tiens à t'en remercier.
 
Concernant cette demande ce que je souhaite, mais je ne sais pas si cela est réalisable, c'est :
lorsque j'applique mon filtre avec un N° de devis (forcément 7 lignes car 1 devis = 7 lignes), je souhaite vérifier si dans la cellule (se trouvant en position colonne 2 et 3émé ligne filtrée) l'information "VALIDER" est contenu  
si oui => msg box (devis non modifiable)
Si non => je continue l'exécution de la macro
Ci-dessous macro
monarticle = "07-01-003"
    If Sheets("feuil1" ).FilterMode Then ActiveSheet.ShowAllData
    Application.DisplayAlerts = False
    ligneinser = Sheets("feuil2" ).Cells(65527, 1).End(xlUp).Row + 1
    Range("a1" ).AutoFilter Field:=1, Criteria1:=monarticle
    nombsel = Application.WorksheetFunction.Subtotal(3, Range("a:a" )) - 1
    If nombsel <> 14 Then
    Call MsgBox("Le devis est inconnu ou erreur dans la base", , "Merci de vérifier votre N° de devis" )
    Else
    if  .............?
    Call MsgBox("attention", , " devis non modifiable" )
    Else
    Range(Cells(2, 1), Cells(65527, 1).End(xlUp).Offset(-7, 0)).Select
    Selection.EntireRow.Copy
    ActiveSheet.Paste Destination:=Sheets("feuil2" ).Cells(ligneinser, 1)
    Selection.Delete
    End If
    End If
    ActiveSheet.ShowAllData
    Application.DisplayAlerts = True
    Range("a1" ).Select
    End Sub
Ci-joint fichier
http://cjoint.com/?dmrf2inJle
le devis 07-01-003 devrait renvoyer avec la macro que je cherche =>msg box (devis non modifiable) car quand j'applique le filtre à l'intersection de la 2éme colonne et de la 3ème ligne filtrée j'ai dans la cellule = VALIDER
 
a ta disposition,

Reply

Marsh Posté le 12-03-2007 à 17:48:20    

Bonsoir,
http://cjoint.com/?dmrUvOPJNU
 
Cordialement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed