recherche multicritères variable

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

armelle1303

XLDnaute Junior
Bonjour

je n'arrive pas à faire une recherche avec Find et certainement avec une boucle mais je ne maitrise pas du tout ceci
Voilà les données :
j'ai une base sur un classeur avec dans le 1er champ un N° de fiche de 1 à ...
c'est dans ce champ que je veux faire ma recherche.
Dans un autre classeur j'ai un formulaire de recherche dans lequel je viens saisir mes différentes fiches recherchées (ex : 1;3;5)
je récupère les valeurs via un Split ( code que j'ai trouvé sur le net) et ça marche (cela met chaque valeur trouvée dans une nouvelle feuille sur la 1ère ligne et à la suite).

le Problème : je sais trouver 1 valeur dans un champ mais comment faire pour toutes les valeurs que j'aurais saisies.
je pense qu'il faut les mettre dans une variable mais comment?
faire une boucle avec find comment?

au fur et à mesure je sélectionne chaque ligne correspondant au n° trouvé , copie la ligne et la colle sur une autre feuille.
Pour ça c'est ok

en Pj j'ai la base + form recherche avec le code que j'ai écrit et toutes les bêtises aussi.
Merci pour votre aide.
 
Dernière édition:
Re : recherche multicritères variable

Bonjour Armelle1303,

Ci-joint ton exemple modifié. J'ai supprimé la recopie des numéros choisis dans la feuille "Recup num fiche" car cela ne sert à rien à mon sens et remplacé la recherche et le copier/coller par le code suivant:

Code:
Lig = 0
With ActiveSheet.Range("A1:A100")
    For j = 0 To UBound(mesFichesSelec)
    
    Set c = .Find(What:=mesFichesSelec(j), LookIn:=xlFormulas, LookAt:=xlPart)
    
     'je sélectionne la ligne trouvée, la copie et la colle dans  ce classeur feuille 2
     If Not c Is Nothing Then
     Lig = Lig + 1
     Range(Cells(c.Row, 1), Cells(c.Row, 6)).Copy _
     Destination:=Workbooks("formulaire recherche et impression fiche.xls").Sheets(2).Range("A" & Lig)
     End If
Next j
End With

ATTENTION: le chemin d'accès au fichier BDD a été modifié.

@+

Gael
 

Pièces jointes

Re : recherche multicritères variable

salut Gael
Merci pour ta réponse
j'ai essayé : la boucle pour Find super ça marche.
petit problèmes :
il n'aime pas Destination := me dit erreur de syntaxe
et la sélection, copie et collage ne marche pas : en fait de Fi il passe directement à end if.
j'ai déja vu ce code : if not c is nothing sur des exemples de ce forum mais je ne comprends pas la fonction.
Si tu peux m'expliquer j'aimerai comprendre et si tu sais pourquoi cela ne marche pas cela m'interesse aussi mais peut être que quand j'aurais compris comment cela marche tout s'éclaircira.
en attendant, j'ai rajouté mes bouts de code aux tiens et cela marche (même si ce n'est pas du code très puriste).



mesFichesSelec = Split(txtMultNum, ";")
Application.DisplayAlerts = False 'supprime le message d'alerte bdd déja ouvert ...
Workbooks.Open "E:\essai base VBA\BDD"

On Error GoTo 1 'gère l'erreur si une fiche n'existe pas ou si pas de saisie

'Lig = 0
With ActiveSheet.Range("A1:a36000").Select

For j = 0 To UBound(mesFichesSelec)
Cells.Find(What:=mesFichesSelec(j), LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Activate

'je sélectionne la ligne trouvée, copie et la colle : cela ne marcha pas à partir d'ici
'If Not c Is Nothing Then
'Lig = Lig + 1
'Range(Cells(c.Row, 1), Cells(c.Row, 6)).Copy
'Destination.Workbooks("formulaire recherche et impression fiche.xls").Sheets(2).Range ("A" & Lig)

'voici ce que j'ai rajouté et c'est ok

ActiveCell.EntireRow.Select
Selection.Copy
Workbooks("formulaire recherche et impression fiche.xls").Activate
Sheets(2).Select
ActiveSheet.Paste 'colle la ligne copiée
ActiveCell.Offset(1, 0).Select 'déplace la cellule active 1 cellule en dessous
Workbooks("BDD.xls").Activate
Next j
'end if
End With

1: MsgBox "Il y a une fiche qui n'existe pas ou vous n'avez rien saisi!"
 
Re : recherche multicritères variable

Bonjour Armelle1303, bonjour à tous,

J'ai bien testé le code chez moi avant de te l'envoyer et cela devrait marcher.

Vérifie si après le "Copy" il y a bien un espace suivi d'un "_" car Destination:=... est la suite de la ligne précédente et non pas une instruction indépendante.

Pour l'explication, "c" contient le résultat de la recherche. Si la valeur n'a pas été trouvée, c a la valeur "Nothing". "If not c is nothing" permet de vérifier que c n'est pas égal à "Nothing", donc contient un résultat.

J'ai testé aussi ton code, il marche bien également. Une petite amélioration serait de ne pas sélectionner la ligne entière alors que tu n'as besoin que de quelques cellules, c'est pourquoi j'avais redéfini un range plus précis.

Il manque également un message d'erreur si l'utilisateur ne saisit pas correctement les n°s séparés par des ";".

Je ne comprends pas l'utilité de la dernière procédure qui recopie des données dans BDD puis ferme BDD sans enregistrer les changements, mais c'est peut-être pour simplifier l'exemple.

Normalement, les 2 codes devraient marcher. As-tu testé l'exemple que je t'ai envoyé sans rien modifier?

@+

Gael
 
Re : recherche multicritères variable

bonjour

autant pour moi je n'avais pas vu le "_"

j'ai essayé ton exemple et ça marche
mais pas sur ma base
je vais ressayé ce soir si je peux

Merci pour l'explication du if not nothing

en fait l'exemple que j'ai mis sur le forum est très light car ma BDD contient beaucoup plus de champs et je ne veux pas modifier si j'ajoute un champ, c'est pour cela que je sélectionne la ligne entière.
A la fin je ferme la BDD sans enregistrer car je viens juste y chercher les données mais je ne veux pas qu'il y ai une modif enregistrée en cas de mauvaise manip.
J'ai inclus un bouton modifier qui demande une action volontaire dans mon form de recherche.
et mes données sont copiées dans le form recherche et non dans BDD.

A+
 
Re : recherche multicritères variable

bonjour

j'ai essayé ton code et ça marche nickel
j'ai du faire des erreurs en tapant ou mélanger ce qu'il ne fallait pas bref...
mais effectivement il reste le problème des erreurs :
j'ai essayé avec On Error Goto 1

1: Msgbox "saisie mauvaise ou vous n'avez rien saisi"

mais cela ne marcha pas en fait cela m'affiche tout le temps la Msg
je place pourtant le On Error avant le tri
et je mets le 1: après end if
j'ai essayé plusieurs endroits mais cela ne vas pas non plus
quelles sont les règles à respecter? pour une mauvaise saisie ou si rien n'est saisi

Si tu as des infos là dessus ou une adresse où je peux en trouver, merci
 
Re : recherche multicritères variable

Bonjour Armelle1303,

Même s'il y a une étiquette devant, la ligne Msgbox... est une instruction comme une autre et sera exécutée après le Endif.

Dans ce cas, il faut simplement contourner l'instruction avec un autre goto:

On error goto 1
...
Endif
Goto fin
1: Msgbox...
fin:
end sub

ou plus simplement avec un exit sub:

On error goto 1
...
Endif
Exit sub
1: Msgbox...
end sub


@+

Gael
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
256
Réponses
2
Affichages
117
Réponses
2
Affichages
283
Réponses
6
Affichages
97
Réponses
3
Affichages
103
Réponses
4
Affichages
144
Retour