Créer une macro de recherche avec un bouton et un UserForm [Fermé]

Signaler
Messages postés
5
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
29 janvier 2015
-
Messages postés
7196
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 janvier 2021
-
Bonjour,

Étant novice sur Excel, je viens vous demander de l'aide, mon problème est le suivant :
- J'ai un fichier Excel avec dans une colonne des adresses qu'avec des chiffres et dans une autre colonne des numéros de palettes (uniquement des chiffres aussi)
-J'aimerais créer un bouton qui m'ouvre un UserForm ou je rentre un numéro de palette, puis j'appuie sur entrée et la j'aimerais qu'un MsgBox apparait avec l'adresse ou se situe la palette.
-Tout d'abord, j'aimerais savoir si c'est possible.
-Si c'est possible j'aimerais qu'on m'aide pour le code sur VB, car je sais créer le bouton, l'UserForm et le MsgBox mais je ne sais pas coder le tout.

En vous remerciant d'avance pour l'aide et le temps que vous me consacrez.

9 réponses

Messages postés
12904
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
11 janvier 2021
2 098
Bonjour

Avec Uerform et bouton c'est possible mais un peu lourd peut être pour ce que c'est surtout si tu dois faire plusieurs recherches à la suite

Tu peux très bien avoir le même résultat par formule dans 2 cellules de ta feuille

En supposant les adresses en colonne A et les n° de palette en colonne B
Dans une autre cellule, en D1 par ex, tu entres le n° de palette et en E1 tu mets la formule : = INDEX(B:B;EQUIV(D1;A:A;0)

Cdlmnt
Messages postés
3334
Date d'inscription
samedi 20 juillet 2013
Statut
Membre
Dernière intervention
9 décembre 2016
508
Bonjour,

Pour nous permettre de t'aider efficacement, il faudrait tu joignes un fichier exemple.
Pour cela, tu peux utiliser https://www.cjoint.com/

A+
bonjour

il faut faire une listview pour la recherche

mes pour ca il faut au moin un modele de ton fichier

A+
Maurice
Messages postés
7196
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 janvier 2021
597
Bonjour,

Mettre dans l'userForm 2 boutons et 2 textBox avec ce code:

Option Explicit
Private Sub CommandButton1_Click()
Cherche_adresse
End Sub
Sub Cherche_adresse()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot
Valeur_Cherchee = TextBox1.Text
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(1) 'colonne A
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub
Private Sub CommandButton2_Click()
Cherche_palette
End Sub
Sub Cherche_palette()
'déclaration des variables :
Dim Trouve As Range, PlageDeRecherche As Range
Dim Valeur_Cherchee As String, AdresseTrouvee As String

'********* à adapter ***********
'affectation de valeurs aux variables :
    'on cherche le mot
Valeur_Cherchee = TextBox2.Text
    'dans la première colonne de la feuille active
Set PlageDeRecherche = ActiveSheet.Columns(2) 'colonne B
'*******************************

'méthode find, ici on cherche la valeur exacte (LookAt:=xlWhole)
Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)

'traitement de l'erreur possible : Si on ne trouve rien :
If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Address
End If
MsgBox AdresseTrouvee
'vidage des variables
Set PlageDeRecherche = Nothing
Set Trouve = Nothing
End Sub


adapter les colonnes
Messages postés
5
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
29 janvier 2015

Bonjour,
Je vous remercie pour vos réponses si rapide.
Je ne peux pas utiliser la fonction EQUIV car ma plage de données est trop grande, la fonction n'arrive pas à la gérer.
Et je préférerais le faire avec un userform car ce fichier sera utilisé par une multitude de personne dont des personnes pas forcémment à l'aise avec excel, donc plus mon fichier sera simple mieux cela sera.
Je vais essayer avec le code de @cs_Le Pivert, si je n'y arrive pas je vous joindrai mon fichier.

Cordialement
Messages postés
5
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
29 janvier 2015

Donc me revoilà, je tiens a remercier Le Pivert, ça fonctionne à merveille, mais j'aimerais apporté une légère modification, en effet quand je recherche une palette, il me met la cellule dans laquelle le numéro de palette se situe, j'aimerais qu'a la place , ca soit le numero d'adresse qui se situe dans la cellule de gauche à coté (même ligne, colonne-1)

Merci d'avance !
Messages postés
7196
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 janvier 2021
597
Par exemple si palette est dans la colonne B tu mets ceci:

If Trouve Is Nothing Then
    'ici, traitement pour le cas où la valeur n'est pas trouvée
    AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
Else
    'ici, traitement pour le cas où la valeur est trouvée
    AdresseTrouvee = Trouve.Address
End If
AdresseTrouvee = Replace(AdresseTrouvee, "B", "A")
MsgBox AdresseTrouvee
Messages postés
5
Date d'inscription
vendredi 9 janvier 2015
Statut
Membre
Dernière intervention
29 janvier 2015

Merci cela fonctionne mais j'ai du mal me faire comprendre, je ne veux pas l'emplacement de la cellule (ex : $A$24) mais la valeur dans la cellule.

Merci d'avance
Messages postés
7196
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
13 janvier 2021
597
AdresseTrouvee = Replace(AdresseTrouvee, "B", "A")
MsgBox Range(AdresseTrouvee).Value