Boucle de recherche sur fichier Excel avec VB6, pour appli pro (Urgentisime) [Résolu]

Kouran666 20 Messages postés samedi 26 juin 2004Date d'inscription 14 décembre 2004 Dernière intervention - 22 nov. 2004 à 17:21 - Dernière réponse : valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention
- 23 nov. 2004 à 20:37
Bonjours à tous,

Comme indiquer dans le titre je bosse sur une appli pro, et mon prob est la réalisation d'une boucle de recherche dans un fichier Excel avec un facteur "textbox", puis l'insertion dans une flexgrid des lignes résultats. voici mon code :

compteur2 = 1

Dim CellRecherche As Excel.Range

'Recherche de la 1ère cellule contenant le texte
Set CellRecherche = Cells.Find(What:=Textbox1.Text, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If Not (CellRecherche Is Nothing) Then

For i = 0 To nbCols

'La cellule existe
CellRecherche.Columns(i + 1).Activate

'transfert dans la flexgrid
With MSFlexGrid3
.Rows = compteur2 + 1
.Col = i
.Row = compteur2
.Text = CellRecherche.Columns(i + 1).Value
End With

Next i
compteur2 = compteur2 + 1
Else
'Pas de cellule avec cette valeur
MsgBox "Pas de Code correspondant"
End If

Or ce code ne me donne que la première ligne qui contient le texte rechercher. comment puis-je obtenir une boucle qui me récupérera tte les lignes du fichier contenant le texte rechercher, sachant que le texte rechercher se trouve toujours dans la colonne A ?

Merci d'avance à tte personne pouvant me renseigner.
Afficher la suite 

9 réponses

Meilleure réponse
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 23 nov. 2004 à 13:59
3
Merci
Houla la j'ai besoin de faire la sièste......

[code]compteur2 = 1

Dim CellRecherche As Excel.Range
Dim MonAdresse
'Recherche de la 1ère cellule contenant le texte
Set CellRecherche = Cells.Find(What:=Textbox1.Text, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If Not (CellRecherche Is Nothing) Then
'*****On Mémorise l'adresse
MonAdresse = CellRecherche.Adress
do
For i = 0 To nbCols

'***** La cellule existe
'***** en VB ce n'est pas la peine de pointer sur la cellule
'CellRecherche.Columns(i + 1).Activate

'transfert dans la flexgrid
With MSFlexGrid3
.Rows = compteur2 + 1
.Col = i
.Row = compteur2
.Text = CellRecherche.Columns(i + 1).Value
End With

Next i
compteur2 = compteur2 + 1
Set CellRecherche = Cells.FindNext(CellRecherche)
Loop While Not CellRecherche Is Nothing And _ CellRecherche.Address <> MonAddresse

Else
'Pas de cellule avec cette valeur
MsgBox "Pas de Code correspondant"
End If
_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé

Merci valtrase 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

ptite_para 6 Messages postés mardi 11 mai 2004Date d'inscription 22 novembre 2004 Dernière intervention - 22 nov. 2004 à 21:06
0
Merci
c'est à cause du IF si tu sors de la boucle et que ca ne vérifie pas le reste de ta feuille.

compteur2 = 1

Dim CellRecherche As Excel.Range

'Recherche de la 1ère cellule contenant le texte
Set CellRecherche = Cells.Find(What:=Textbox1.Text, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

For i = 0 To nbCols

If Not (CellRecherche Is Nothing) Then

'La cellule existe
CellRecherche.Columns(i + 1).Activate

'transfert dans la flexgrid
With MSFlexGrid3
.Rows = compteur2 + 1
.Col = i
.Row = compteur2
.Text = CellRecherche.Columns(i + 1).Value
End With

End if

Next i

If compteur2 = 1 then
'Pas de cellule avec cette valeur
MsgBox "Pas de Code correspondant"
End if

g pas essayé ce code, alors j'espère ca fonctionne !
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 22 nov. 2004 à 23:09
0
Merci
Salut,
Si je ne m'abuse la propriété .Find te renvoie l'adresse de la première occurence pour l'insertion des autres utilise la propriété .FindNext avec un boucle Do While par exemple

_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 22 nov. 2004 à 23:28
0
Merci
Voilà essayes ça pour voir

compteur2 =  1

Dim CellRecherche As Excel.Range
 Dim MonAdresse 
'Recherche de la 1ère cellule contenant le texte
Set CellRecherche  = Cells.Find(What:=Textbox1.Text, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If Not (CellRecherche Is Nothing) Then
'*****On Mémorise l'adresse
MonAdresse = CellRecherche.Adress
do
For i = 0 To nbCols

'***** La cellule existe
'***** en VB ce n'est pas la peine de pointer sur la cellule
'CellRecherche.Columns(i + 1).Activate

'transfert dans la flexgrid
With MSFlexGrid3
.Rows = compteur2 + 1
.Col = i
.Row = compteur2
.Text = CellRecherche.Columns(i + 1).Value
End With

Next i 
compteur2 = compteur2 + 1
CellRecherche.FindNext(CellRecherche)
Loop While Not CellRecherche Is Nothing And _ CellRecherche.Address <> MonAddresse

Else
'Pas de cellule avec cette valeur
MsgBox "Pas de Code correspondant"
End If


_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
Kouran666 20 Messages postés samedi 26 juin 2004Date d'inscription 14 décembre 2004 Dernière intervention - 23 nov. 2004 à 09:15
0
Merci
Tout d'abord un grand merci pour ta construction algorythmique valtrase, elle m'a bien aider dans la compréhension des lien Excel-VB.

Mais, sans vouloir abuser de ton temps, une erreur survient lors du .FindNext. Il me dit :

Erreur '1004' : la méthode FindNext de la classe Range à échoué.

Et il me pointe la ligne : "CellRecherche.FindNext (CellRecherche)"

Si tu pouvais m'explique ce phénomène, je t'en serais reconnaissant. Merci d'avance.
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 23 nov. 2004 à 13:30
0
Merci
Salut si je ne rentre pas trop tard ce soir je me pencherais sur ton code. Je te tiens au courant
_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 23 nov. 2004 à 13:52
0
Merci
Oups j'ai vu une petite erreur
Si ça ne marche pas avec ça dis le moi je me pencherais dessus ce soir

compteur2 = 1

Dim CellRecherche As Excel.Range
Dim MonAdresse
'Recherche de la 1ère cellule contenant le texte
Set CellRecherche = Cells.Find(What:=Textbox1.Text, After:=Cells(1, 1), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False)

If Not (CellRecherche Is Nothing) Then
'*****On Mémorise l'adresse
MonAdresse = CellRecherche.Adress
do
For i = 0 To nbCols

'***** La cellule existe
'***** en VB ce n'est pas la peine de pointer sur la cellule
'CellRecherche.Columns(i + 1).Activate

'transfert dans la flexgrid
With MSFlexGrid3
.Rows = compteur2 + 1
.Col = i
.Row = compteur2
.Text = CellRecherche.Columns(i + 1).Value
End With

Next i 
compteur2 = compteur2 + 1
 Set CellRecherche.FindNext(CellRecherche)
Loop While Not CellRecherche Is Nothing And _ CellRecherche.Address <> MonAddresse

Else
'Pas de cellule avec cette valeur
MsgBox "Pas de Code correspondant"
End If

_______________________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé
Kouran666 20 Messages postés samedi 26 juin 2004Date d'inscription 14 décembre 2004 Dernière intervention - 23 nov. 2004 à 14:43
0
Merci
Grand merci à toi Valtrase !!!

cela tourne parfaitement grâce à toi, à noter 2 petites fautes de frappe dans 2 mots adresse :
1:
"MonAdresse = CellRecherche.Address"

2:
"Loop While Not CellRecherche Is Nothing And _ CellRecherche.Address <> MonAdresse"

sinon c'est parfait, encore merci valtrase.
valtrase 936 Messages postés lundi 19 janvier 2004Date d'inscription 17 mars 2017 Dernière intervention - 23 nov. 2004 à 20:37
0
Merci
Juste un petit mot pour finir
pour optimiser ton code utilises un Objet Range à la place de Cells qui te renvoi la colection complète des cellules.

Bonne prog
_______________________________________

Jean-Paul

Le Savoir n'a de valeur que s'il est partagé

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.