recherche en VBA

Le
Olivier
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un exemple.
Merci
Olivier
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #18518281
J'ai supposé que tes boutons émanaient de la boîte à outils
"Formulaire", tu attaches à chacun des boutons la même
macro qui suit, elle te donnera ce qui est écrit sur la même
ligne E où l'information a été trouvé.
'---------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet

'Remplace "NomDeLaFeuille" par le nom de la
'feuille où sont tes données
Set Sh = Worksheets("NomDeLaFeuille")
With Sh
Mot = Shapes(Application.Caller).OLEFormat.Object.Caption
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
MsgBox Sh.Cells(Trouve.Row, "E").Value
Else
MsgBox "impossible de trouver : " & Mot
End If
End With
End With
End Sub
'---------------------------------



"Olivier" 4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un exemple.
Merci
Olivier
michdenis
Le #18518381
Il y a aussi cette version... selon ce que tu désires:

'---------------------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Mot = Sh.Cells(Trouve.Row, "E").Value
If Mot <> "" Then
MsgBox Mot
Exit Do
Else
Set Trouve = .FindNext(Trouve)
End If
Loop Until Trouve Is Nothing Or Adr = Trouve.Address
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub
'---------------------------------------------



"Olivier" 4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un exemple.
Merci
Olivier
michdenis
Le #18518371
Précision : J'ai écris cette macro dans le module
feuille où se retrouve les boutons, si tu la places
ailleurs regarde l'autre exemple fournit pour attribuer
correctement les objets aux bonnes feuilles.


"michdenis"
J'ai supposé que tes boutons émanaient de la boîte à outils
"Formulaire", tu attaches à chacun des boutons la même
macro qui suit, elle te donnera ce qui est écrit sur la même
ligne E où l'information a été trouvé.
'---------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet

'Remplace "NomDeLaFeuille" par le nom de la
'feuille où sont tes données
Set Sh = Worksheets("NomDeLaFeuille")
With Sh
Mot = Shapes(Application.Caller).OLEFormat.Object.Caption
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
MsgBox Sh.Cells(Trouve.Row, "E").Value
Else
MsgBox "impossible de trouver : " & Mot
End If
End With
End With
End Sub
'---------------------------------



"Olivier" 4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un exemple.
Merci
Olivier
Mishell
Le #18518591
Ou comme ceci pour trouver toutes les occurences du mot:

Sub Trouver_Mot()

Dim Mot As String, Adr As String, Adr1 As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)

If Not Trouve Is Nothing Then
Adr1 = Trouve.Address
While Adr <> Adr1
Mot = Sh.Cells(Trouve.Row, "E").Value
MsgBox Trouve.Address & " " & Mot
Set Trouve = .FindNext(Trouve)
Adr = Trouve.Address
Wend
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub



"Olivier" news:4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E
et continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un
exemple.
Merci
Olivier




Olivier
Le #18521271
Merci, cela me convient tout à fait.
Olivier

"Mishell"
Ou comme ceci pour trouver toutes les occurences du mot:

Sub Trouver_Mot()

Dim Mot As String, Adr As String, Adr1 As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)

If Not Trouve Is Nothing Then
Adr1 = Trouve.Address
While Adr <> Adr1
Mot = Sh.Cells(Trouve.Row, "E").Value
MsgBox Trouve.Address & " " & Mot
Set Trouve = .FindNext(Trouve)
Adr = Trouve.Address
Wend
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub



"Olivier" news:4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne
marchent pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E
et continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un
exemple.
Merci
Olivier








michdenis
Le #18525601
Dans la procédure proposée, il suffisait
d'effacer la ligne de code Exit Do dans la boucle
pour obtenir toutes les entrées si tel était ton désir !



"michdenis"
Il y a aussi cette version... selon ce que tu désires:

'---------------------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Mot = Sh.Cells(Trouve.Row, "E").Value
If Mot <> "" Then
MsgBox Mot
Exit Do
Else
Set Trouve = .FindNext(Trouve)
End If
Loop Until Trouve Is Nothing Or Adr = Trouve.Address
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub
'---------------------------------------------



"Olivier" 4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un exemple.
Merci
Olivier
Olivier
Le #18527581
Excusez moi, je n'avais pas fait attention qu'il y avait deux auteurs
différents.
Le merci s'adresse donc au deux :-)
Olivier


"michdenis"
Dans la procédure proposée, il suffisait
d'effacer la ligne de code Exit Do dans la boucle
pour obtenir toutes les entrées si tel était ton désir !



"michdenis" discussion :

Il y a aussi cette version... selon ce que tu désires:

'---------------------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Mot = Sh.Cells(Trouve.Row, "E").Value
If Mot <> "" Then
MsgBox Mot
Exit Do
Else
Set Trouve = .FindNext(Trouve)
End If
Loop Until Trouve Is Nothing Or Adr = Trouve.Address
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub
'---------------------------------------------



"Olivier" de discussion :
4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E
et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un
exemple.
Merci
Olivier



Mishell
Le #18528911
Bonjour Denis.
J'ai essayé d'enlever le code Exit Do, mais ca n'a pas fonctionné.

Mishell

"michdenis" news:
Dans la procédure proposée, il suffisait
d'effacer la ligne de code Exit Do dans la boucle
pour obtenir toutes les entrées si tel était ton désir !



"michdenis" discussion :

Il y a aussi cette version... selon ce que tu désires:

'---------------------------------------------
Sub Trouver_Mot()

Dim Mot As String, Adr As String
Dim Trouve As Range, Sh As Worksheet
Dim Ok As String

'Feuille où sont les boutons
With Worksheets("Feuil2")
Mot = .Shapes(Application.Caller).OLEFormat.Object.Caption
End With

'Feuille où se retrouvent les données
Set Sh = Worksheets("Feuil1")
With Sh
With .Range("a1:G200")
Set Trouve = .Find(Mot, , xlValues, xlWhole)
If Not Trouve Is Nothing Then
Adr = Trouve.Address
Do
Mot = Sh.Cells(Trouve.Row, "E").Value
If Mot <> "" Then
MsgBox Mot
Exit Do
Else
Set Trouve = .FindNext(Trouve)
End If
Loop Until Trouve Is Nothing Or Adr = Trouve.Address
End If
End With
End With
If Mot = "" Then MsgBox "Désolé, mais pas trouver."
End Sub
'---------------------------------------------



"Olivier" de discussion :
4980f38e$0$28674$
Bonjour,
un petit soucis d'utilisation de Find en VBA.
Voici mon soucis (excel 2003) :
En feuille1 j'ai une liste de mot (disons de A1 à G200)
En feuille2, j'ai des boutons qui doivent lancer une macro qui ne marchent
pas !
Cette macro doit rechercher dans la feuille1, le mot inscrit sur bouton
(caption) et donner le nom qui se trouve sur la même ligne à la colonne E
et
continuer tant que l'on trouve le mot en question.
Si mon problème n'est pas assez clair dites le moi, je donnerais un
exemple.
Merci
Olivier



michdenis
Le #18530811
| J'ai essayé d'enlever le code Exit Do, mais ca n'a pas fonctionné.

Si quelqu'un efface bêtement la ligne exit do et qu'il n'a pas tenté
de comprendre le fonctionnement de la macro, peut être sera-t-il
déçu du résultat. Si tu veux passer à l'occurrence suivante du même
mot, encore faut-il que tu indiques à excel où il devra le trouver et
dans cette macro, c'est la responsabilité de la ligne de code suivante:
Set Trouve = .FindNext(Trouve). Comment peut-elle s'exécuter après
le Msgbox si tu n'as pas pris le temps de l'inscrire ? Ceci étant je n'ai
pas testé cet aspect de la procédure car je n'avais pas compris que le
demandeur voulait trouver toutes les occurrences.
Le copier-coller donne souvent des résultats étonnants et il n'y a
pas grand apprentissage à y retenir !

Do
Mot = Sh.Cells(Trouve.Row, "E").Value
If Mot <> "" Then
MsgBox Mot
Exit Do
Else
Set Trouve = .FindNext(Trouve)
End If
Loop Until Trouve Is Nothing Or Adr = Trouve.Address
Publicité
Poster une réponse
Anonyme