Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recherche en VBA

9 réponses
Avatar
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

9 réponses

Avatar
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" a écrit dans le message de groupe 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
Avatar
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" a écrit dans le message de groupe 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
Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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" a écrit dans le message de groupe 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
Avatar
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" wrote in message
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




Avatar
Olivier
Merci, cela me convient tout à fait.
Olivier

"Mishell" a écrit dans le message de news:

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" wrote in message
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








Avatar
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" a écrit dans le message de groupe de 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" a écrit dans le message de groupe 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
Avatar
Olivier
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" a écrit dans le message de 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" a écrit dans le message de groupe de
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" a écrit dans le message de groupe
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



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

Mishell

"michdenis" wrote in message
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" a écrit dans le message de groupe de
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" a écrit dans le message de groupe
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



Avatar
michdenis
| 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