Une rechercheV améliorée en quelque sorte....
RésoluNiconz Messages postés 313 Date d'inscription lundi 16 juin 2014 Statut Membre Dernière intervention 13 août 2024 - 13 août 2024 à 13:53
- Une rechercheV améliorée en quelque sorte....
- Paramétrez l'impression de ce document de telle sorte que les 5 colonnes occupent toute la largeur de la page (orientation portrait, format a4). combien de pages seront imprimées ? ✓ - Forum Excel
- 2 recherchev dans une formule - Forum Excel
- Recherchev dans un tableau croisé dynamique - Forum Excel
- Si(recherchev vrai alors) ✓ - Forum Excel
4 réponses
9 août 2024 à 12:49
bonjour,
Je ferais cela en deux étapes:
- ajouter, en colonne E de Nomenclature, pour chaque ligne, une liste des mots "utiles" à rechercher dans le texte des commandes. Les noms en colonnes A à C ne me semblent pas adéquats. Cela peut s'automatiser, si souhaité, à partir des colonnes A à C.
- pour chaque commande, chercher quelle ligne de Nomenclature contient, en colonne E, le maximum de mots communs avec le texte de la commande, et adapter la famille de la commande.
9 août 2024 à 13:46
Bonjour yg_be,
Merci pour ton retour.
Sur le principe, ce serait pertinent, mais vu le nombre de lignes totales à gérer, et de texte de commande différents, je ne vois pas comment définir une liste de mots utiles. Il y en aurait beaucoup trop au final. > Raison pour laquelle je préfererai qu'Excel me renvoie une nomenclature (même approximative) en fonction des mots qui correspondent entre les 2 onglets.
Cela me permettra ensuite d'affiner par famille, et de trouver la nomenclature précise.
Merci,
Modifié le 9 août 2024 à 16:48
Voilà déjà le code qui va mettre les mots pertinents en colonne E.
Option Explicit Sub motsutiles() Const spec As String = "(:)/&- " Dim fl As Worksheet, cl As Range, i As Integer, src As String, pos As Integer, mot As String Set fl = ThisWorkbook.Sheets("Nomenclature") Set cl = fl.[a2] Do While cl <> "" cl.Offset(, 4) = "" For i = 0 To 2 src = Trim(cl.Offset(, i)) Do While src <> "" pos = 1 Do While pos <= Len(src) And InStr(spec, Mid(src, pos, 1)) = 0 Debug.Print pos, Mid(src, pos, 1), InStr(spec, Mid(src, pos, 1)) pos = pos + 1 Loop mot = Left(src, pos - 1) If mot <> "" Then cl.Offset(, 4) = cl.Offset(, 4) + "|" + mot End If If pos < Len(src) Then src = Trim(Right(src, Len(src) - pos)) Else src = "" End If Loop Next i Set cl = cl.Offset(1) Loop End Sub
Modifié le 12 août 2024 à 11:12
suggestion:
Option Explicit Sub categorie() Dim flnom As Worksheet, flcomm As Worksheet, clcomm As Range, clnom As Range, cnt As Integer Dim lnom() As String, lcomm() As String, maxc As Integer, maxlig As Long, comm, nom Call motsutiles Set flnom = ThisWorkbook.Sheets("Nomenclature") Set flcomm = ThisWorkbook.Sheets("Liste commande") Set clcomm = flcomm.[c2] Do While clcomm <> "" lcomm = Split(clcomm, " ") Set clnom = flnom.[e2] maxc = 0 maxlig = -1 Do While clnom <> "" lnom = Split(clnom, "|") cnt = 0 For Each comm In lcomm For Each nom In lnom If LCase(comm) = nom Then cnt = cnt + 1 End If Next nom Next comm If cnt > maxc Then maxc = cnt maxlig = clnom.Row End If Set clnom = clnom.Offset(1) Loop If maxlig > 0 Then clcomm.Offset(, -1) = flnom.Cells(maxlig, "d") End If Set clcomm = clcomm.Offset(1) Loop End Sub Private Sub motsutiles() Const spec As String = "(:)/&- " Dim fl As Worksheet, cl As Range, i As Integer, src As String, pos As Integer, mot As String Set fl = ThisWorkbook.Sheets("Nomenclature") Set cl = fl.[a2] Do While cl <> "" cl.Offset(, 4) = "" For i = 0 To 2 src = Trim(cl.Offset(, i)) Do While src <> "" pos = 1 Do While pos <= Len(src) And InStr(spec, Mid(src, pos, 1)) = 0 pos = pos + 1 Loop mot = LCase(Left(src, pos - 1)) If mot <> "" Then If cl.Offset(, 4) = "" Then cl.Offset(, 4) = mot Else cl.Offset(, 4) = cl.Offset(, 4) + "|" + mot End If End If If pos < Len(src) Then src = Trim(Right(src, Len(src) - pos)) Else src = "" End If Loop Next i Set cl = cl.Offset(1) Loop End Sub
13 août 2024 à 13:53
Bonjour yg_be,
Merci beaucoup pour ta suggestion, ca marche assez bien.
Cela devrait faire l'affaire, il ne me reste plus qu'à dupliquer sur toutes mes lignes et affiner en fonction.
Encore merci, très bonne journée.