Recherche d'un nom dans une cellule

bonjour

j'ai un fichier avec 3 onglets :

  • liste de pièce
  • face 1
  • face 2
ma référence est l'onglet "liste de pièce" avec une colonne "code article" et une colonne "nom du composant". bien sur plusieurs composants avec des noms différents peuvent avoir le même code article.

dans l'onglet "face 1" je connais les composants utilisés et je dois trouver leur code article

dans l'onglet "face 2" idem que face 1

les onglets Face 1 et face 2 ne peuvent pas être fusionné pour des question de compatibilité avec la machine qui va utiliser ces onglets

je dois donc rechercher dans l'onglet "liste de piece" colonne "nom du composant" , trouver le code article associé et le remplir dans l'onglet de la face concernée

problème :

  • dans une même cellule, plusieurs nom de composants, séparés par des ; ou : ou - ou "espace"
  • les noms des composants ont une syntaxe batarde du style C124 mais aussi C124E. seul point commun, ils commencent tous par une lettre (je ne sais pas si ca peut aider)

avez vous une idée sur la façon de faire et une formule?

merci de votre aide.

Bonjour,

Option Explicit

Sub macro()
Application.ScreenUpdating = False
Dim dlp As Long, inc As Long, i As Long
Dim bclf As Byte

For bclf = 1 To 2
Sheets(bclf).Select
inc = 4
dlp = Sheets("liste de piece").Range("c" & Rows.Count).End(xlUp).Row

While Sheets(bclf).Range("a" & inc) <> ""
    For i = 2 To dlp
    If InStr(Sheets("liste de piece").Range("d" & i), Sheets(bclf).Range("a" & inc)) <> 0 Then
    Sheets(bclf).Range("b" & inc) = Sheets("liste de piece").Range("c" & i)
    End If
    Next
    inc = inc + 1
    Wend

Next

Application.ScreenUpdating = True
End Sub

Se code à l'air d'être fonctionnel. Dans l'immédiat ce qu'il est important de faire c'est de respecter l'ordre des onglets (le face 1 le laisser en première position etc...)

bonjour

tout d'abord un grand merci pour cette macro qui a l'air de fonctionner.

je dis qui a l'air car je veux vraiment verifier point par point la concordance.

la formule que j'avais essaye de mon coté m'avait retourné des erreurs difficilement décelables vu le nombre de composants

a mon sens aucun probleme pour executer une autre macro sur la feuille n° 2, je vais encore essayer de tester ca.

je dois également encore rajouter des colonnes intermediaires

je dois dire que je n'ai pas encore tout compris et assimilé sur cette macro mais je vais perseverer!

je solderai alors ce topic.

encore merci et bonne journée

J'ai fait deux trois vérifications aléatoire avec une recherche manuelle et tout a été concordant.

Pour le code, désolé de ne pas avoir fourni d'explication car j'y suis allé à tâtons en testant plusieurs choses mais n'hésitez pas à demander ce que vous ne comprenez pas.

Grosso modo j'ai fait 3 boucles.

Une qui permet de changer de feuille avec la variable bclf (dans ma tête bclf = "boucle feuille")--> For bclf = 1 To 2

Une qui permet de lire chaque cellule non vide de la colonne A de chaque feuille (While...<>"")

Et une dernière qui va lire chaque cellule de la feuille "liste de pièce" pour voir si elle y trouve la valeur contenu dans la feuille 1 (For i = 2 To dlp...)

(pas évident d'être clair désolé..°

wouhhhhh

je crois que j'ai pigé la (les)formule ou différentes boucles

effectivement ca fait le boulot sur les 2 pages en 1 fois

je me suis "amusé" a rajouter des colonnes a gauche et au milieu ainsi que des lignes au dessus voire de deplacer ou rajouter des onglets

ca m'a l'air robuste et tres leger comme macro.

je vais essayer de passer ca sur les machines prochainement

merci beaucoup et bonne soirée

SI vous voulez rajouter d'autres onglets du genre " FACE 3" "FACE 4" il faudra modifier le code

For bclf = 1 To 2

en

For bclf = 1 To Sheets.Count -1 

Ainsi cela agira sur toutes les feuilles placées avant la dernière

Si il n'y a pas beaucoup de donnée ça va mais sur des gros fichiers avec beaucoup de ligne il faudra étudier une autre macro car le traitement durera assez longtemps je pense.

Vous pouvez rajouter autant de ligne que vous voulez, par contre, si vous changez de colonne les données c'est évident que la macro ne fonctionnera plus

bonjour

pas besoin de boucler sur d'autres feuilles car je ne peux avoir que 2 faces donc le temps de la macro reste tout a fait correct.

j'ai inséré des colonnes ou décalé le tout mais j'ai modifié la macro et tout fonctionne.

par contre j'ai rencontré ce bug :

  • le composant C6 me retourne un code PH08.81.0008 au lieu de PH08.81.0016 il se trouve en D2 de l'onglet liste de pièces et en A92 de l'onglet Face 2
  • un autre fichier ouvert avec un nom complètement différent mais les mêmes onglets fait tourner en boucle=>pas grave on en ouvre qu'un seul

question: qu'est ce qui dans la macro fait le distingo des différents composants etant donné la syntaxe et le séparateurs aléatoire?

merci

Bonjour

J'ai éventuellement cette solution qui semble pallier au problème des inconcordances, supprimer tous les séparateurs dans la feuille liste de pièce en colonne D et refaire la recherche. Ca fonctionne et cela a supprimé les deux bug trouvé.

J'ai modifié le fichier avec la nouvelle macro car je l'ai un peu modifié

Pour éviter que la macro travaille sur d'autres fichiers, à chaque occurence de "Sheets.(..." il faut rajouter devant workbook(nom_ du fichier).sheets(...

La fonction qui permet la recherche Instr() qui veut dire In String et qui permet de cherche un string dans un string (du texte dans un texte). Je ne sais pas comment la fonction prends en compte les séparateurs par contre désolé

Cordialement

hummm bizarre

avec cette nouvelle macro je decelle a priori beaucoup plus d'erreur

B5 est correcte et me retourne une valeur juste, B6 ne me retourne rien!

pourtant c'est le meme composant, sur la meme face.

sur la face 1, j'ai trouvé environ 20 composants dans ce cas la, qui ne me remontent pas de valeur alors qu'ils sont dans l'onglet liste de piece

curieux et la j'en perds mon latin.

J'ai vu d'ou venez l'erreur, donc j'ai corrigé et il ne devrait plus y en avoir beaucoup ! Enfin j'espère !

Mais s'il y en a , on trouvera une solution croyez moi !

alors aux dernieres nouvelles tous les bugs identifiés ont ete corrigé avec cette nouvelle macro.

afin d'en etre bien sur rien ne vaut la bonne vielle methode de controler tous ces composants a la main.

on a relativement autant de composant avec des appellations aussi tordues et des separateurs aussi anarchiques!

mais au moins ca a l'avantage de tester la robustesse de cette macro

merci beaucoup en tous les cas.

je vous retiens au courant de la finalité des choses!

Si de nouveaux séparateurs arrivent vous pouvez les shunter dans la macro "remplace" en copiant cette ligne de code en dessous des autres du même type

Selection.Replace What:="-", Replacement:="  ", LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

Vous devez juste mettre votre nouveau séparateur à la place du - (après le what)

J'ai envie de dire qu'il faut laisser se fil ouvert et esperer que des codeurs plus talentueux que moi trouvent une meilleure solution et pourquoi pas beaucoup plus fiable. :/ Bonne continuation à vous et bon courage dans le traitement :/ et à bientôt si vous revenez alimenter se fil des nombreux autres bug qui apparaitront !

bonjour

alors après vérification minutieuse c'est tout OK

je valide donc ce topic

merci beaucoup

Merci du retour j'espère qu'il n'y aura pas d'autre bug !

Rechercher des sujets similaires à "recherche nom"