Boucle, Find, After, [VBA Excel] Help!

Jesusdenazarrete Messages postés 102 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 12 juin 2012 - 19 mars 2008 à 09:37
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 19 mars 2008 à 12:17
Bonjour

Je voudrais de l'aide pour ecrire ma boucle qui doit chercher une valeur à l'intérieur d'un mot dans une case excell

With worksheets("JASPE")
          .Activate
'Je me met dans la feuille qu'il faut
            Set vtrouve = .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Find(What:=vjaspe, LookAt:=xlPart)
'Je trouve ma valeur à l'intérieur du mot et me place sur sa cellule
           vdébut = vtrouve.Row
'Je stocke le numéro de ligne dnas vdébut
i = vdébut
'Je donne a i la valeur de la ligne
 
            While Not Cells.FindNext(After:=ActiveCell) = True
            i = i + 1
            Wend
 vfin = i
'La le but est de sélectionner la plage (les données sont triées et les lignes que je recherche à la suite) tant que la valeur vjaspe est trouvée dans le mot contenu dans la cellule... Mais j'y arrive pas...
 .Range(.Cells(vdébut, 1), .Cells(vfin, 16)).Copy

 Merci d'avance pour toutes vos pistes

7 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2008 à 10:41
tu peux faire:


Dim oTrouve As Range
Dim nDeb As Long
Dim nFin As Long
With Worksheets("JASPE")
.Activate
Set oTrouve = .Range(.Cells(1, 1), .Cells.SpecialCells(xlCellTypeLastCell)).Find(vjaspe, LookAt:=xlPart)
nDeb = oTrouve.Row
Do
nFin = oTrouve.Row
Set oTrouve = Cells.FindNext(After:=oTrouve)
Loop While oTrouve.Row > nDeb

.Range(.Cells(nDeb, 1), .Cells(nFin, 16)).Select
End With
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2008 à 10:45
gaffe, erreur 91 potentielle...

j'ai pas ajouté de test

If Not Nothing Is oTrouve Then

après le Set oTrouve = .Range(...

pour m'assurer qu'un résultat au moins existe.
0
Jesusdenazarrete Messages postés 102 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 12 juin 2012
19 mars 2008 à 11:00
Désolé mais cela ne fonctionne pas... mais c'est de ma faute, j'aurais du te dire :
Exemple, si on recherche 123 dans
A   B
12345   12345
12345   12345l

Il passe au suivant mais il est sur la meme ligne donc cela ne fonctionne pas
0
Jesusdenazarrete Messages postés 102 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 12 juin 2012
19 mars 2008 à 11:01
Je suis en traine de chercher c'est plus la manière que la fonction en elle meme qui me pose probleme
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2008 à 11:19
qu'est-il sensé faire face a un tel cas ?
0
Jesusdenazarrete Messages postés 102 Date d'inscription jeudi 22 juillet 2010 Statut Membre Dernière intervention 12 juin 2012
19 mars 2008 à 11:30
Bah en fait il est sencé copier les 2 lignes : il trouve la cellule 1,1 (sur l'exemple) donc il va a la cellule suivante mais elle est sur la meme ligne alors il s'arrete et copie la plage alors que je voudrais qu'il continue. le probleme c'est qu'on peut pas lui mettre un supérieur ou égal

les valeurs sont toujours placées comme ca, ligne x,x+1,x+2 colonne 1 et 2 (a et b)
donc je me suis penché sur un truc du genre loop while colonne = 2 et otrouve > ndeb mais ca marche pas, il copie toujours qu'une seule ligne.


je vais devenir fou si ca continue
 
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
19 mars 2008 à 12:17
cela ne suffit-il pas de faire

If nFin < oTrouve.Row Then
nFin = oTrouve.Row
End If

au lieu de

nFin = oTrouve.Row

?
0
Rejoignez-nous