Loop fonction .Find VBA

JFLord

XLDnaute Nouveau
Bonjour tout le monde,

J'ai un petit bogue que je n'arrive malheureusement pas à régler.

J'ai écrit un code .find pour trouver la première ligne d'un type de données, mais je n'arrive pas à creer la boucle pour trouver la ligne de fin

J'ai le code suivant

With Range([B10], [B65536].End(xlUp))
Set produit = .Find("MO_IB", LookIn:=xlValues)
If Not produit Is Nothing Then
ligdeb3 = produit.Row
End If
End With


Ca me donne la premiere ligne de la valeur MO_IB...À partir de la, il faut que je trouve la dernière ligne (si possible avec la fonction .find aussi)

Si vous vous demandez pourquoi une fonction find, c'est que j'ai environ 14 valeurs différentes dans la colonne B (les données sont triées par ordre alphabétique.

MErci
 
C

Compte Supprimé 979

Guest
Re : Loop fonction .Find VBA

Salut JFLord

Peut-être avec un code de ce type
Code:
Sub Test()
  Dim DerLig As Long, LigDeb3 As Long
  DerLig = 0: LigDeb3 = 0
  With Range([B10], [B65536].End(xlUp))
    Do
    Set produit = .Find("MO_IB", LookIn:=xlValues)
    If Not produit Is Nothing Then
      LigDeb3 = produit.Row
    End If
    ' Si dernière ligne est inférieure à ligne trouvée
    ' alors dernière ligne = ligne trouvée
    If DerLig < LigDeb3 Then DerLig = LigDeb3
    ' Sort de la boucle si on est revenu sur la première valeur
    If LigDeb3 <= DerLig Then Exit Do
    Loop
  End With
End Sub

A tester ;)

A+
 

JFLord

XLDnaute Nouveau
Re : Loop fonction .Find VBA

Malheureusement, les deux données ligdeb3 et Derlig me rapporte le même numéro de ligne.

Je continue à creuser pour voir, mais je crois qu'il est possible d'y arriver avec une loop et la fonction .findnext
 

JFLord

XLDnaute Nouveau
Re : Loop fonction .Find VBA

J'ai une piste de solution supplémentaire!

J'ai réussi à faire la loop qui parcourt la même donnée sur la colonne B

Par contre, je n'ai pas été encore capable de faire arrêter la loop à la bonne place pour qu'elle me donne la dernière ligne.


Voici le code au complet (avec la partie du début)

With Range([B10], [B65536].End(xlDown))
Set produit = .Find("MO_IB", LookIn:=xlValues)
If Not produit Is Nothing Then
ligdeb3 = produit.Row

Do Until produit Is Nothing
Set produit = .FindNext(produit)
ligfin3 = produit.Row
If produit Is Nothing Then Exit Do
Loop

End If
End With
 

Pierrot93

XLDnaute Barbatruc
Re : Loop fonction .Find VBA

Bonjour JFLord, Bruno:),

pas tout suivi, mais pour trouver la première et la dernière valeur, peut être une solution comme suit qui permet d'éviter une boucle...

Code:
Option Explicit
Sub test()
Dim x As Range, y As Range

'trouve la première valeur
Set x = Range("B10:B27").Find("MO_IB", , xlValues, xlWhole, 1, 1, 0)
If Not x Is Nothing Then MsgBox "première valeur trouvée sur ligne : " & x.Row

'trouve la dernière valeur
Set y = Range("B10:B27").Find("MO_IB", , xlValues, xlWhole, 1, 2, 0)
If Not y Is Nothing Then MsgBox "dernière valeur trouvée sur ligne : " & y.Row

End Sub

bonne journée
@+
 
Dernière édition:

JFLord

XLDnaute Nouveau
Re : Loop fonction .Find VBA

Je n'ai pas essayé ta méthode puisque j'ai trouvé un autre moyen d'y parvenir.

Voici le code

With Range([B10], [B65536].End(xlUp))
Set produit = .Find("MO_PB", LookIn:=xlValues)
If Not produit Is Nothing Then
ligdeb4 = produit.Row

Do Until produit Is Nothing
Set produit = .FindPrevious(produit)
ligfin3 = produit.Row
If produit > ligdeb3 Then Exit Do
Loop

End If

Bonne journée
 

Discussions similaires

Réponses
2
Affichages
197
Réponses
12
Affichages
645