Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
884 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Méthode Find avec condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Méthode Find avec condition

n°2088666
scaryfan
Apple Inside
Posté le 11-07-2011 à 13:52:18  profilanswer
 

:hello:  
Salut à tous !
Je découvre la méthode Find sous VBA qui est nettement plus rapide pour trouver une valeur dans une plage donnée... comparé avec une boucle Do... Loop.
Super génial !
 
Néanmoins, je voudrais utiliser cette méthode avec une condition...
Genre :  
   With Workbooks("TEST.xlsx" ).Sheets("TEST" ).Range(PLAGE)
      Set c = .Find(X > 599999 ; Lookln:xlValues)
      c.Select
   End With
 
Je traduis : je cherche dans la PLAGE la première valeur supérieure à 599999.
Et je ne vois pas comment y arriver...  :(  
 
De plus, est-il possible de chercher de bas en haut ???
 
;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
mood
Publicité
Posté le 11-07-2011 à 13:52:18  profilanswer
 

n°2088808
scaryfan
Apple Inside
Posté le 11-07-2011 à 21:50:42  profilanswer
 

UP  :hello:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2088811
scaryfan
Apple Inside
Posté le 11-07-2011 à 22:12:49  profilanswer
 

Pour être plus précis, j'ai un tableau avec beaucoup beaucoup de lignes (plus de 100 000) et utiliser le Do... Loop pour trouver la première ligne avec une valeur supérieure à 512999 est assez long... même en désactivant l'Application.ScreenUpDating.
Aussi, je me demandais si la fonction Find pouvait m'aider à faire cela...
J'utilise très bien cette fonction pour trouver la première valeur exacte... genre TOTO ou 401100... même trouver une valeur supérieure à une autre, je ne vois pas comment faire...
 
 :??:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2088818
Profil sup​primé
Posté le 11-07-2011 à 22:52:26  answer
 

J'ai aussi voulu utiliser cette fonction aujourd'hui, mais impossible de la faire marcher pour mon cas alors que d'autres tests marchaient bien.
 
En plus je faisais juste un simple
Range("Z:Z" ).Find("USD" ).Select
 
Donc si vous pouvez m'expliquer pourquoi ca serait chouette.
(mon 1er "USD" arrivait vers la ligne 700 et la commande me retournait une autre case n'ayant rien à voir. Sur une autre colonne avec des nombres, ca marchait bien  :heink: )

n°2088841
scaryfan
Apple Inside
Posté le 12-07-2011 à 07:03:26  profilanswer
 


 
Essaie ça :
 

Code :
  1. T = "USD"
  2. With ActiveWorkbook.Sheets(1).Columns("Z:Z" )
  3.     Set c = .Find(T, LookIn:=xlValues)
  4.     c.Select
  5. End With


 
 :)  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2088992
Profil sup​primé
Posté le 12-07-2011 à 16:01:26  answer
 

Merci, ca marche nickel,
 
Maintenant j'ai une autre question:
Disons que j'ai selectionne toutes les cellules avec la valeur "USD" dans ma colonne Z.
Dans une colonne a cote (AA par exemple), j'ai une autre colonne contenant des 0 et des 1.
J'aimerais ne garder selectionees que les cellules dont la valeur correspondante dans la colonne AA est 1.
 
En d'autre termes, je veux selectionner les cellules "USD" dans la colonne Z auxquelles correspondent la valeur "1" dans la colonne AA.
 
(pour selectionner les cellules USD, je triais par valeur, trouvais la 1ere et selectionner les x suivantes ou x est le nombre de cellules contenant "USD". Je sais pas si c'est la meilleure methode.
Pour faire ma selection sur 2 criteres, j'ai commence a coder une routine qui filtre le 1er critere, copie les donnes dans une feuille temp, puis refiltre. Cest un peu long et complique, je me suis dit qu il doit y avoir plus simple)
 
Merci

n°2089766
mmarle
Posté le 17-07-2011 à 13:10:02  profilanswer
 

Bonjour scaryfan,
 
J'espère que cette solution te conviendra.
Renommer une feuille en "MaFeuille".
En cellule A1:= Saisir la valeur que l'on cherche.
En cellule A2:= Saisir la condition pour effectuer la recherche (Dans ton cas 5999999).
Dans la colonne B:= Mettre la plage de valeur (exemple 1 à 7000000).
Dans la colonne C:= Le texte "Trouvée" est saisi à chaque itération positive.
 
Puis pour lancer la procédure il faut cliquer droit avec la souris.
 
Voici le code:
 

Code :
  1. Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  2. '******************'
  3. '* Initialisation *'
  4. '******************'
  5. 'Désactivation du menu contextuel'
  6. Cancel = True
  7. 'Efface le contenu de la colonne C'
  8. Columns("C:C" ).ClearContents
  9. '*****************************'
  10. '* Déclaration des variables *'
  11. '*****************************'
  12. 'Variable de la valeur recherchée'
  13. Dim X As Range
  14. 'Variable de la valeur de la condition'
  15. Dim Y As Range
  16. 'Variable de la valeur de la dernière ligne non vide de la zone de recherche'
  17. Dim Fin As Long
  18. 'Variable de la valeur reçue à l'issue de la méthode .Find'
  19. Dim MySearch As Variant
  20. 'Variable d'incrémentation de la valeur reçue'
  21. Dim I as Long
  22. '***************************'
  23. '* Attribution des valeurs *'
  24. '***************************'
  25. 'Valeur recherchée'
  26. Set X = Range("A1" )
  27. 'Valeur de la condition'
  28. Set Y = Range("A2" )
  29. 'Valeur de la dernière ligne non vide de la zone de recherche'
  30. Fin = Worksheets("MaFeuille" ).UsedRange.Rows.Count
  31. '*************'
  32. '* Procédure *'
  33. '*************'
  34. With Worksheets("MaFeuille" ).Range("B1:B" & Fin)
  35.     If X > Y Then
  36.         Set MySearch = .Find(X, LookIn:=xlValues, SearchDirection:= xlPrevious)
  37.         If Not MySearch Is Nothing Then
  38.             firstAddress = MySearch.Address
  39.             Do
  40.                 I = I + 1
  41.                 MySearch.Offset(0, 1) = I & " - Trouvée"
  42.                 Application.Wait (Now + TimeValue("0:00:1" )) 'Sert uniquement à voir la recherche'
  43.                 Set MySearch = .FindPrevious(MySearch)
  44.             Loop While Not MySearch Is Nothing And MySearch.Address <> firstAddress
  45.         End If
  46.     Else
  47.         MsgBox "La recherche est inférieure à la condition: " & X & " < " & Y
  48.     End If
  49. End With
  50. End Sub

 
 
Il est toujours bon de bien détailler son code car ça favorise la lecture et la compréhension.
 
@ bientôt

Message cité 1 fois
Message édité par mmarle le 18-07-2011 à 10:53:25
n°2091243
scaryfan
Apple Inside
Posté le 24-07-2011 à 21:53:13  profilanswer
 

mmarle a écrit :

Bonjour scaryfan,
 
J'espère que cette solution te conviendra.
Renommer une feuille en "MaFeuille".
En cellule A1:= Saisir la valeur que l'on cherche.
En cellule A2:= Saisir la condition pour effectuer la recherche (Dans ton cas 5999999).
Dans la colonne B:= Mettre la plage de valeur (exemple 1 à 7000000).
Dans la colonne C:= Le texte "Trouvée" est saisi à chaque itération positive.
 
Puis pour lancer la procédure il faut cliquer droit avec la souris.
 
Voici le code:
 

Code :
  1. Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
  2. '******************'
  3. '* Initialisation *'
  4. '******************'
  5. 'Désactivation du menu contextuel'
  6. Cancel = True
  7. 'Efface le contenu de la colonne C'
  8. Columns("C:C" ).ClearContents
  9. '*****************************'
  10. '* Déclaration des variables *'
  11. '*****************************'
  12. 'Variable de la valeur recherchée'
  13. Dim X As Range
  14. 'Variable de la valeur de la condition'
  15. Dim Y As Range
  16. 'Variable de la valeur de la dernière ligne non vide de la zone de recherche'
  17. Dim Fin As Long
  18. 'Variable de la valeur reçue à l'issue de la méthode .Find'
  19. Dim MySearch As Variant
  20. 'Variable d'incrémentation de la valeur reçue'
  21. Dim I as Long
  22. '***************************'
  23. '* Attribution des valeurs *'
  24. '***************************'
  25. 'Valeur recherchée'
  26. Set X = Range("A1" )
  27. 'Valeur de la condition'
  28. Set Y = Range("A2" )
  29. 'Valeur de la dernière ligne non vide de la zone de recherche'
  30. Fin = Worksheets("MaFeuille" ).UsedRange.Rows.Count
  31. '*************'
  32. '* Procédure *'
  33. '*************'
  34. With Worksheets("MaFeuille" ).Range("B1:B" & Fin)
  35.     If X > Y Then
  36.         Set MySearch = .Find(X, LookIn:=xlValues, SearchDirection:= xlPrevious)
  37.         If Not MySearch Is Nothing Then
  38.             firstAddress = MySearch.Address
  39.             Do
  40.                 I = I + 1
  41.                 MySearch.Offset(0, 1) = I & " - Trouvée"
  42.                 Application.Wait (Now + TimeValue("0:00:1" )) 'Sert uniquement à voir la recherche'
  43.                 Set MySearch = .FindPrevious(MySearch)
  44.             Loop While Not MySearch Is Nothing And MySearch.Address <> firstAddress
  45.         End If
  46.     Else
  47.         MsgBox "La recherche est inférieure à la condition: " & X & " < " & Y
  48.     End If
  49. End With
  50. End Sub

 
 
Il est toujours bon de bien détailler son code car ça favorise la lecture et la compréhension.
 
@ bientôt


 
Merci mmarie pour ton code... je vais voir cela demain.
 ;)  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
n°2091970
mmarle
Posté le 28-07-2011 à 16:17:23  profilanswer
 

Pour nofreelunch
 

Code :
  1. T = "USD"
  2. With ActiveWorkbook.Sheets(1).Columns("Z:Z" )
  3.    Set c = .Find(T, LookIn:=xlValues)
  4.    If c.Offset(0,1)=1 Then
  5.       c.Select
  6.    End If
  7. End With


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Méthode Find avec condition

 

Sujets relatifs
Excel et SQL requete avec deux condition?Probléme avec la methode insert() de DataRepository C# de NetTiers C#
[Résolu] " update or insert " selon une conditionerreur methode java
[résolu] ld.exe cannot find -lfileComment copier une partie d'une colonne avec condition?
Effectuer une somme avec condition sous excelExcel : boucle copie de plages sous condition
fonction find vbaconstruire une plage de cellules qui répondent à la même condition
Plus de sujets relatifs à : Méthode Find avec condition


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR