Filtre Excell - récupération des données après filtrage

Filtre Excell - récupération des données après filtrage - VB/VBA/VBS - Programmation

Marsh Posté le 11-04-2005 à 19:21:24    

Slt,  
je debute en filtre et je rencontre un problème.
 
J'ai fait une macro qui me permet de filter, dynamiquement selon les valeurs variables contenues dans 2 cellules, un tableau de 8 colonnes selon 3 critères.
 
Cela fonctionne très bien, je diminue le nombre de ligne de mon tableau de 40 à environ 5 ou 10 lignes selon les valeurs de mes 2 cellules.
 
Je voudrais maintenant récupérer le contenu de la première ligne récupéré par mon filtre.
Je n'y arrive pas car je sais pas comment lire les lignesrestantes après le filtrage.
 
J'ai essayé de mettre un offset(1,0) sur le titre de mes colonnes mais il va cherché la première ligne du tableau et non la première ligne des lignes restantes après le filtrage.
 
Voilà j'éspère que j'ai étais assez claire.
 
merci d'avance
 
Olivier

Reply

Marsh Posté le 11-04-2005 à 19:21:24   

Reply

Marsh Posté le 11-04-2005 à 22:16:18    

bonsoir,
dans une boucle tu utilises la propriété hidden et tu ne retiens que les "Range" dont la valeur hidden = False
Ok ?

Reply

Marsh Posté le 11-04-2005 à 22:37:47    

Ok je crois que je vois, je vais essayer de suite merci beaucoup pour ta reponse.

Reply

Marsh Posté le 11-04-2005 à 23:13:41    

Merci beaucoup ca marche nickel.
 
Voilà pour info mon code :
 

Code :
  1. Sub selection_borne()
  2.     Application.ScreenUpdating = False
  3.     Workbooks.Open FileName:="C:\feuil1.xls"
  4.    
  5.     test = "=" & Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("U_isol_HT" )
  6.     test2 = ">=" & Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("I_borne_HT" )
  7.     test3 = "=" & Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("U_isol_BT" )
  8.     test4 = ">=" & Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("I_borne_BT" )
  9.     Range("A7:K115" ).Select
  10.     Selection.AutoFilter
  11.     Selection.AutoFilter Field:=1, Criteria1:="DIN"
  12.     Selection.AutoFilter Field:=3, Criteria1:=test
  13.     Selection.AutoFilter Field:=4, Criteria1:=test2
  14.          
  15.     i = 8
  16.     j = 0
  17.     While Rows(i).Hidden = True
  18.         i = i + 1
  19.     Wend
  20.    
  21.     Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("Borne_HT" ) = Cells(i, 5)
  22.    
  23.     Selection.AutoFilter
  24.     Selection.AutoFilter Field:=1, Criteria1:="DIN"
  25.     Selection.AutoFilter Field:=3, Criteria1:=test3
  26.     Selection.AutoFilter Field:=4, Criteria1:=test4
  27.    
  28.     i = 8
  29.     j = 0
  30.     While Rows(i).Hidden = True
  31.         i = i + 1
  32.     Wend
  33.     Workbooks("essai.xls" ).Worksheets("feuil1" ).Range("Borne_BT" ) = Cells(i, 5)
  34.     Workbooks("essai.xls" ).Activate
  35.    
  36.     Application.DisplayAlerts = False
  37.     Workbooks("feuil1.xls" ).Close
  38.     Application.DisplayAlerts = True
  39.    
  40.     Range("D8" ).Select
  41.    
  42.     Application.ScreenUpdating = True
  43.    
  44. End Sub


 
Si tu a des remarques ou suggestions a faire sur ce code, n'hésite pas elles seront la bienvenue.
 
Bonne soirée  
 
olivier

Reply

Marsh Posté le 11-04-2005 à 23:48:04    

bonsoir,
Je suis assez surpris de ce choix de boucle While... Wend : j'y voyais pas comme ça ! Mais si tu dis que le résultat est bon, c'est le principal. Vérifier quand même que ce ne soit pas bon "par hasard" car cela me laisse... perplexe!
A+

Reply

Marsh Posté le 11-04-2005 à 23:58:53    

Merci, mais je viens de vérifier en changeant les critères de mon filtre et je trouve tjs les résultats voulu.
 
a+

Reply

Marsh Posté le 12-04-2005 à 00:10:46    

Ha par contre j'ai un problème,
 
Lorsque les valeurs du Range("U_isol_HT" ) et Range("U_isol_BT" ), utilisées dans les tests 1 et 3, sont décimals le filtre n'affiche plus rien. Il cache toute les lignes comme si les valeurs des critère 1 et 3 n'exister pas, mais ce n'est pas le cas il y a tjs au moins une ligne correspondant a ces valeurs.
 
Tu a une idéee d'ou ca peut venir.

Reply

Marsh Posté le 12-04-2005 à 15:41:08    

Je vois que tu n'utilises ton filtre que pour trouver la première ligne qui convient.
 
Essaye ce code et dis-moi s'il fait ce que tu veux.

Sub selection_borne()
   
  Dim nBorne_BT As Single
  Dim nBorne_HT As Single
  Dim nIsol_BT As Single
  Dim nIsol_HT As Single
  Dim rTest As Range
  Dim vI As Variant
   
  Application.ScreenUpdating = False
 
  nIsol_HT = Workbooks("essai.xls" ).Worksheets("feuil1" ).[U_isol_HT]
  nBorne_HT = Workbooks("essai.xls" ).Worksheets("feuil1" ).[I_borne_HT]
  nIsol_BT = Workbooks("essai.xls" ).Worksheets("feuil1" ).[U_isol_BT]
  nBorne_BT = Workbooks("essai.xls" ).Worksheets("feuil1" ).[I_borne_BT]
   
  Workbooks.Open FileName:="C:\feuil1.xls"
 
  Set rTest = Range("A7:A115" )
   
  For Each vI In rTest
    If vI = "DIN" And vI.Cells(1, 3) = nIsol_HT And vI.Cells(1, 4) >= nBorne_HT Then
      Workbooks("essai.xls" ).Worksheets("feuil1" ).[Borne_HT] = vI.Cells(1, 5)
      Exit For
    End If
  Next vI
         
  For Each vI In rTest
    If vI = "DIN" And vI.Cells(1, 3) = nIsol_BT And vI.Cells(1, 4) >= nBorne_BT Then
      Workbooks("essai.xls" ).Worksheets("feuil1" ).[Borne_BT] = vI.Cells(1, 5)
      Exit For
    End If
  Next vI
 
  Workbooks("essai.xls" ).Activate
   
  Application.DisplayAlerts = False
  Workbooks("feuil1.xls" ).Close
  Application.DisplayAlerts = True
   
  [D8].Select
   
  Application.ScreenUpdating = True
     
End Sub


Edit --> Corrigé Cells(0,... en Cells(1,...


Message édité par AlainTech le 12-04-2005 à 16:09:15

---------------
Si on vous donne une info qui marche, DITES-LE!!!! ------ Si vous trouvez seul, AUSSI, votre solution peut servir à d'autres! ------ Je dois la majorité de mes connaissances à mes erreurs!
Reply

Marsh Posté le 12-04-2005 à 18:23:50    

Merci de ton aide, mais ca y est mon code marche.
 
Par contre content de voir aussi le tiens que je vais tester.
 
Ton code ma appris [Borne_BT] au lieu de range("" ), c'est pas grand chose mais je ne connaisais pas.
Je vais tout de même essayer ton code il pourra m'inspirer.
 
Merci
 
Olivier

Reply

Sujets relatifs:

Leave a Replay

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