OVH Cloud OVH Cloud

recherche valeur dans excel

16 réponses
Avatar
ephores
Bonjour j'ai besoin de l'aide d'un pro.
Je cherche le moyen de chercher une valeur dans un fichier excel saisie dans
une textbox.
Pour l'instant j'en suis à ce qu'il ouvre et ferme tous les fichier de ma
liste, reste a ce qu'il cherche dedans si la valeur de textbox1 est presente
dans la feuille ouverte. Merci par avance pour votre aide ;-)

voici mon bout de code :


i = 1
Dim Base As Object

For i = 1 To NbOccurence
prct = ((100 * i) / NbOccurence)
ProgressBar (prct)
URL = RTrim(ResultatRecherche.Chemin(i)) &
ResultatRecherche.Fichiers(i).cFileName
'Créer l'appli excel
Set Base = CreateObject("Excel.Application")

'Afficher l'appli excel
Base.Visible = False

'Ouvrir le fichier excel
Base.Workbooks.Open FileName:=URL

'---> C'est là que je bloque....

Base.ActiveWorkbook.Close False
Next

End Sub

6 réponses

1 2
Avatar
Zoury
Salut!

L'erreur signifie qu'objet (ws ou ws.Range("A1:C5") ou
ws.Range("A1:C5").Find("40")) renvoit Nothing et ne peux donc pas être
utilisé.

La méthode Find() renvoit un objet de type Range.. tu peut valider la valeur
de retour avant de l'utiliser comme ceci .. cela devrait t'éviter l'erreur..
:
'***
Dim rng As Range
Set rng = ws.Range("A1:C5").Find("40")
If (Not rng is Nothing) Then ' test si le Range existe
Debug.Print "Adresse de la cellule valant ""40"" : " & rng.Address
End If
'***

PS : toutes mes feuilles doivent faire la meme taille ?? si je ne connais
pas à l'avance le nombre de cellule.



Regarde l'exemple de François... il se fout du nombre de Worksheet ainsi que
du nombre de cellules qui sont utilisées..

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/
Avatar
ephores
HALELUIA François t'es un DIEU !!!! ça marche nikel !!!!!
trois semaine que je rames, et toi en deux secondes... t'es un bon !! un
GRAND MERCI !!

merci aux autres aussi mais , François ..... rien a dire ;-)


"François Picalausa" a écrit dans le message de
news:
Hello,

Voici une autre solution possible:
Dim Base As Object

Set Base = CreateObject("Excel.Application")
Base.Visible = False

Dim MyWorkbook As Object
'Ouvrir le fichier excel "c:tototata.xls"
Set MyWorkbook = Base.Workbooks.Open("c:tototata.xls")

Dim MySheet As Object
Dim FindRange As Object

'Parcourt toutes les feuilles
For Each MySheet In MyWorkbook.Sheets
'Cherche dans chaque feuille le text contenu dans la textbox Text1
Set FindRange = MySheet.Cells.Find(Text1.Text)

'Si trouvé
If Not FindRange Is Nothing Then
'On affiche le résultat
MsgBox "Trouvé dans " & MyWorkbook.Name & ", feuille " &
MySheet.Name & ", à l'endroit" & FindRange.Address
End If
Next MySheet 'Feulle suivante du classeur

'Ferme le classeur
MyWorkbook.Close

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:
> Merci pour vos réponses, mais je suis pas un as, alors vos solutions
> j'arrive pas à les faire fonctionner.
> Personne n'a eu à faire ce genre de chose ? un exemple comme j'en
> trouve par millier d'autre chose mais pas de ça.
> Pitié !!!
> Lourdage dans J-2.
>
> Merci
>
>
> "ephores" <ephores(at)free.fr> a écrit dans le message de
> news:
>> Bonjour j'ai besoin de l'aide d'un pro.
>> Je cherche le moyen de chercher une valeur dans un fichier excel
>> saisie dans une textbox.
>> Pour l'instant j'en suis à ce qu'il ouvre et ferme tous les fichier
>> de ma liste, reste a ce qu'il cherche dedans si la valeur de
>> textbox1 est presente dans la feuille ouverte. Merci par avance pour
>> votre aidionnee ;-)
>>
>> voici mon bout de code :
>>
>>
>> i = 1
>> Dim Base As Object
>>
>> For i = 1 To NbOccurence
>> prct = ((100 * i) / NbOccurence)
>> ProgressBar (prct)
>> URL = RTrim(ResultatRecherche.Chemin(i)) &
>> ResultatRecherche.Fichiers(i).cFileName
>> 'Créer l'appli excel
>> Set Base = CreateObject("Excel.Application")
>>
>> 'Afficher l'appli excel
>> Base.Visible = False
>>
>> 'Ouvrir le fichier excel
>> Base.Workbooks.Open FileName:=URL
>>
>> '---> C'est là que je bloque....
>>
>> Base.ActiveWorkbook.Close False
>> Next
>>
>> End Sub




Avatar
François Picalausa
Hello,

"Zoury" a écrit dans le message de
news:
PS : toutes mes feuilles doivent faire la meme taille ?? si je ne
connais pas à l'avance le nombre de cellule.



Regarde l'exemple de François... il se fout du nombre de Worksheet
ainsi que du nombre de cellules qui sont utilisées..



En relisant de plus près la documentation, find n'est peut-être pas la
meilleure méthode:

<quote src="Aide VBA sur Find">
Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase,
MatchByte, SearchFormat)

Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont
enregistrés chaque fois que vous utilisez cette méthode. Si vous ne
spécifiez aucun paramètre pour ces arguments lors du prochain appel de la
méthode, les paramètres enregistrés sont utilisés. Le fait de définir les
paramètres de ces arguments modifie les paramètres de la boîte de dialogue
Rechercher, ce qui a pour effet de changer les paramètres enregistrés qui
sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute
ambiguïté, définissez ces arguments de façon explicite chaque fois que vous
utilisez cette méthode.
</quote>

Le for each proposé dans ta première solution est donc sans doutes plus
appropriée.
Voici une adaptation de ton exemple, avec u pour utiliser toute la plage de
recherche utile:
'----------------------------------------------
Dim Base As Object

Set Base = CreateObject("Excel.Application")
Base.Visible = False

Dim MyWorkbook As Object
'Ouvrir le fichier excel "c:tototata.xls"
Set MyWorkbook = Base.Workbooks.Open("c:tototata.xls")

Dim MySheet As Object

'Parcourt toutes les feuilles
For Each MySheet In MyWorkbook.Sheets
For Each rng In MySheet.Cells.SpecialCells (xlCellTypeLastCell)
If rng.Text = Text1.Text Then 'Compare sur le texte.
'On pourrait utiliser
'If rng.Text = Text1.Formula Then
'pour chercher dans la formule

Debug.Print "Adresse : " & rng.Address, "Text : " & rng.Text
End If
Next rng
Next MySheet 'Feulle suivante du classeur

'Ferme le classeur
MyWorkbook.Close'
'----------------------------------------------

Sinon, il est aussi possible de spécifier en dur les arguments LookIn,
LookAt et MatchByte, si on peut modifier les paramètres de l'utilisateur.

Voici les valeurs possibles:
LookIn:
Const xlComments = -4144 (&HFFFFEFD0) 'Chercher dans les commentaires
Const xlFormulas = -4123 (&HFFFFEFE5) 'Chercher dans les formules
Const xlValues = -4163 (&HFFFFEFBD) 'Chercher dans les valeurs

LookAt:
Const xlPart = 2
Const xlWhole = 1 'Totalité du contenu de la cellule

SearchOrder:
Const xlByRows = 1 'Rechercher par lignes
Const xlByColumns = 2 'Rechercher par colonnes

MatchByte:
Cet argument est utilisé uniquement si vous avez sélectionné ou installé la
prise en charge des langues codées sur deux octets. Affectez-lui la valeur
True pour que les caractères codés sur deux octets ne correspondent qu'aux
caractères codés sur deux octets. Affectez-lui la valeur False pour que les
caractères codés sur deux octets correspondent à leurs équivalents codés sur
un octet.

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Avatar
François Picalausa
Heu...
si...
j'ai moi même à redire sur Find....
et je l'ai redis en réponse à Zoury...
Mais l'autre code marche bien aussi... (mieux en fait)
Donc, jette un oeil à mon autre post aussi :-)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:%
merci aux autres aussi mais , François ..... rien a dire ;-)


Avatar
ephores
est il possible d'ouvrir la feuille trouvé et se positionner sur l'occurence
trouvé directement ?
T'es tellement balaise que je pose la question au cas où...
En tous cas merci infiniment.



"François Picalausa" a écrit dans le message de
news:
Heu...
si...
j'ai moi même à redire sur Find....
et je l'ai redis en réponse à Zoury...
Mais l'autre code marche bien aussi... (mieux en fait)
Donc, jette un oeil à mon autre post aussi :-)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:%
> merci aux autres aussi mais , François ..... rien a dire ;-)




Avatar
ephores
Merci je viens de trouver:
FindRange.Select

Pardon du dérangement ;-)


"François Picalausa" a écrit dans le message de
news:
Heu...
si...
j'ai moi même à redire sur Find....
et je l'ai redis en réponse à Zoury...
Mais l'autre code marche bien aussi... (mieux en fait)
Donc, jette un oeil à mon autre post aussi :-)

--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net

"ephores" <ephores(at)free.fr> a écrit dans le message de
news:%
> merci aux autres aussi mais , François ..... rien a dire ;-)




1 2