Comment afficher tous les résultats qui contients la valeur d'une celllule

Résolu/Fermé
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 - 11 avril 2021 à 10:40
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 - 12 avril 2021 à 10:10
Bonjour,

Cela fait plusieurs jours et nombreuses heures que je me creuse la tete pour trouver la solution :)

Dans la colonne A j'ai une liste des noms des photos:
ABC123.jpg
ABC123 (1).jpg
ABC123 (2).jpg
DEF456.jpg
DEF456 (1).jpg
DEF456 (2).jpg

Dans la colonne B j'ai la liste des références:
ABC123
DEF456

Comment faire pour que l'excel cherche dans la colonne A la référence de la colonne B et affiche les résultats séparés par la virgule, dans une cellule de la colonne C à côté de la référence correspondante. Je travaille avec plusieurs fichiers qui sont pas forcément tous formatés de même façon, il serait donc souhaitable que la macro me demande dans quelle plage se trouvent les noms et dans quelle plage se trouvent les références.



Merci d'avance pour votre aide.

5 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
11 avril 2021 à 16:09
Bonjour,

un essai:

Option Explicit
Sub For_X_to_Next_Ligne()
Dim FL1 As Worksheet, NoCol As Integer, col As Integer
Dim NoLig As Long, Var As Variant, ligne As Long
Dim nombre As Integer, mafeuille As String
Dim nom As String

mafeuille = InputBox("Nom de la feuille", "Feuille", "Feuil1")
col = InputBox("Numero colonne nom", "Colonne nom", "1") 'col lecture de la colonne nom
NoCol = InputBox("Numero colonne reference", "Colonne reference", "2") 'NoCol lecture de la colonne reference
    Set FL1 = Worksheets(mafeuille)
    For NoLig = 1 To Cells(Rows.Count, NoCol).End(xlUp).Row  'boucle colonne reference
        Var = FL1.Cells(NoLig, NoCol)
        nombre = Len(Var) 'nombre caracteres
        For ligne = 1 To Cells(Rows.Count, col).End(xlUp).Row 'boucle colonne nom
         nom = Left(FL1.Cells(ligne, col), nombre) 'nombre caracteres à gauche
       If nom = Var Then
   Range("C" & NoLig) = Range("C" & NoLig) & FL1.Cells(ligne, col) & ", "
    End If
    Next
    Next
    Set FL1 = Nothing
End Sub


voilà
1
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1
11 avril 2021 à 16:23
@cs_Le Pivert
Vous êtes une machine de guerre ! Ca marche à merveille si je copie la liste des noms des fichiers dans l'excel à côté des références ! résultat est la, bravo et merci !
0
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1
Modifié le 11 avril 2021 à 21:41
RE @cs_Le Pivert,
Est-ce qu'il y a moyen de rajouter l'option "not case sensitive"??
MErci en tout cas vous m'avez épargnés bcp de temps déjà !!!
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728 > perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021
12 avril 2021 à 08:22
tout simplement en mettant en début de module:

Option Explicit
Option Compare Text


Si ce post est résolu, pense à cliquer sur Marquer comme résolu en début de post

@+ Le Pivert
0
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1
12 avril 2021 à 10:10
merci !!!!!

@+
1
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 avril 2021 à 11:21
bonjour,
qu'as-tu essayé pendant ces journées?
si tu avais une colonne par référence, tu pourrais faire cela plus simplement, avec des formules.
0
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1
11 avril 2021 à 11:24
J'ai essayé cela aussi, mais je n'ai pas trouvé la bonne formule ou des fois je n'ai pas réussi à la faire fonctionner :/
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 avril 2021 à 11:25
montre-nous ce que tu as essayé, nous pourrons sans doute te donner un coup de pouce pour t'aider à progresser.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1
11 avril 2021 à 12:08
Le code VBA c-dessous m'a donné des meilleurs résultats, mais dès fois pour je ne sais pas quelle raison il n'affiche pas des résultats alors le fichiers correspondant est bien présent dans le dossier spécifié. -> la fonction qui me permet de chercher dans les noms des fichiers présents dans un dossier spécifié est vraiment géniale, car cela m'évite de copier la liste des noms à chaque fois dans l'excel manuellement.

Ce n'est pas mon code du coup j'essaye de l'adapter pour mon besoin mais je galère :/

Merci pour votre temps!


Public Sub MatchListWithPics()
'look for a string to search (list of references)
'and search all files in a folder and look inside names

Dim SuppRefLst As Range
Set SuppRefLst = Application.InputBox("Please select the cells with Supplier References", Type:=8)

maxFiles = 5 'upload up to 5 files to the website
'select folder with pics to look into names
searchIn = ListFilesinFolder

'add reference and result
ReDim finalResult(1 To SuppRefLst.Rows.Count, 0 To maxFiles) As String '0 is for initial reference

For I = 1 To SuppRefLst.Rows.Count

StrToSearch = SuppRefLst(I, 1).Value

ReDim Res(1 To maxFiles) As Variant
Res = FindText_IgnoreCase(StrToSearch, searchIn, maxFiles)

For j = 1 To maxFiles
If j = 1 Then finalResult(I, 0) = StrToSearch
finalResult(I, j) = Res(j)
Next j
Next I


'to write Results inside new book
Workbooks.Add
Range("A1").Resize(SuppRefLst.Rows.Count, maxFiles + 1) = finalResult '+1 for supplier reference
Cells.Columns.AutoFit

Erase finalResult
End Sub
Public Function ListFilesinFolder()
'ONLY PICTURES

Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim I As Integer

fLocation = SelectFolder("please select a folder!")

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(fLocation)


ReDim Result(1 To oFolder.Files.Count, 1 To 1) As String

For Each oFile In oFolder.Files
If LCase(Split(oFile.Name, ".")(1)) = "jpg" Or LCase(Split(oFile.Name, ".")(1)) = "jpeg" _
Or LCase(Split(oFile.Name, ".")(1)) = "bmp" Or LCase(Split(oFile.Name, ".")(1)) = "png" _
Or LCase(Split(oFile.Name, ".")(1)) = "ico" Or LCase(Split(oFile.Name, ".")(1)) = "gif" Then

Result(I + 1, 1) = oFile.Name
I = I + 1
End If
Next oFile

ListFilesinFolder = Result

Erase Result
End Function

Public Function FindText_IgnoreCase(ByVal searchWhat As String, ByVal SearchArray As Variant, ByVal maxF As Integer) As Variant
ReDim Result(1 To maxF) As Variant
Dim cpt As Integer
cpt = 1

For I = 1 To UBound(SearchArray, 1)
'replace special characters in both string for more accurate search
sourceStr = ReplaceSpecialCharacters(SearchArray(I, 1))
whatStr = ReplaceSpecialCharacters(searchWhat)
whatStrShort = ReplaceSpecialCharacters(searchWhat, 12)

If InStr(1, sourceStr, _
whatStr, vbTextCompare) _
> 0 Then 'no case Sensitivity

'add to result if < maxFiles
If cpt <= maxF Then
Result(cpt) = SearchArray(I, 1)
cpt = cpt + 1
End If
ElseIf sourceStr Like "*" & whatStrShort & "*" = True _
And SearchArray(I, 1) <> "" Then

'add to result if < maxFiles
If cpt <= maxF Then
Result(cpt) = SearchArray(I, 1)
cpt = cpt + 1
End If

End If
Next I

FindText_IgnoreCase = Result
Erase Result
End Function

Public Function ReplaceSpecialCharacters(ByVal myString As String, Optional ByVal lengthOutput As Integer = 0)
Dim SpecialCharacters As String
SpecialCharacters = "-,_,#" 'modify as needed

Dim newString As String
Dim char As Variant

'pass the value
newString = myString
For Each char In Split(SpecialCharacters, ",")
'change characters one by one, replace it by space
newString = Replace(newString, char, " ")
Next


If lengthOutput > 0 Then
ReplaceSpecialCharacters = Left(newString, lengthOutput)
Else
ReplaceSpecialCharacters = newString
End If

End Function
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
11 avril 2021 à 12:18
peux-tu utiliser les balises de code quand tu partages du code? explications: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

as-tu un soucis avec le fonctionnement de ce code?
0
perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021 1 > yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
11 avril 2021 à 12:23
Oui il n'affiche pas tjrs les noms des fichiers correspondants à la référence, alors que si je cherche manuellement dans le dossier je trouve les fichiers correspondants.


Public Sub MatchListWithPics()
'look for a string to search (list of references)
'and search all files in a folder and look inside names

Dim SuppRefLst As Range
Set SuppRefLst = Application.InputBox("Please select the cells with Supplier References", Type:=8)

maxFiles = 5 'upload up to 5 files to the website
'select folder with pics to look into names
searchIn = ListFilesinFolder

'add reference and result
ReDim finalResult(1 To SuppRefLst.Rows.Count, 0 To maxFiles) As String '0 is for initial reference

For I = 1 To SuppRefLst.Rows.Count

StrToSearch = SuppRefLst(I, 1).Value

ReDim Res(1 To maxFiles) As Variant
Res = FindText_IgnoreCase(StrToSearch, searchIn, maxFiles)

For j = 1 To maxFiles
If j = 1 Then finalResult(I, 0) = StrToSearch
finalResult(I, j) = Res(j)
Next j
Next I


'to write Results inside new book
Workbooks.Add
Range("A1").Resize(SuppRefLst.Rows.Count, maxFiles + 1) = finalResult '+1 for supplier reference
Cells.Columns.AutoFit

Erase finalResult
End Sub
Public Function ListFilesinFolder()
'ONLY PICTURES

Dim oFSO As Object
Dim oFolder As Object
Dim oFile As Object
Dim I As Integer

fLocation = SelectFolder("please select a folder!")

Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(fLocation)


ReDim Result(1 To oFolder.Files.Count, 1 To 1) As String

For Each oFile In oFolder.Files
If LCase(Split(oFile.Name, ".")(1)) = "jpg" Or LCase(Split(oFile.Name, ".")(1)) = "jpeg" _
Or LCase(Split(oFile.Name, ".")(1)) = "bmp" Or LCase(Split(oFile.Name, ".")(1)) = "png" _
Or LCase(Split(oFile.Name, ".")(1)) = "ico" Or LCase(Split(oFile.Name, ".")(1)) = "gif" Then

Result(I + 1, 1) = oFile.Name
I = I + 1
End If
Next oFile

ListFilesinFolder = Result

Erase Result
End Function

Public Function FindText_IgnoreCase(ByVal searchWhat As String, ByVal SearchArray As Variant, ByVal maxF As Integer) As Variant
ReDim Result(1 To maxF) As Variant
Dim cpt As Integer
cpt = 1

For I = 1 To UBound(SearchArray, 1)
'replace special characters in both string for more accurate search
sourceStr = ReplaceSpecialCharacters(SearchArray(I, 1))
whatStr = ReplaceSpecialCharacters(searchWhat)
whatStrShort = ReplaceSpecialCharacters(searchWhat, 12)

If InStr(1, sourceStr, _
whatStr, vbTextCompare) _
> 0 Then 'no case Sensitivity

'add to result if < maxFiles
If cpt <= maxF Then
Result(cpt) = SearchArray(I, 1)
cpt = cpt + 1
End If
ElseIf sourceStr Like "*" & whatStrShort & "*" = True _
And SearchArray(I, 1) <> "" Then

'add to result if < maxFiles
If cpt <= maxF Then
Result(cpt) = SearchArray(I, 1)
cpt = cpt + 1
End If

End If
Next I

FindText_IgnoreCase = Result
Erase Result
End Function

Public Function ReplaceSpecialCharacters(ByVal myString As String, Optional ByVal lengthOutput As Integer = 0)
Dim SpecialCharacters As String
SpecialCharacters = "-,_,#" 'modify as needed

Dim newString As String
Dim char As Variant

'pass the value
newString = myString
For Each char In Split(SpecialCharacters, ",")
'change characters one by one, replace it by space
newString = Replace(newString, char, " ")
Next


If lengthOutput > 0 Then
ReplaceSpecialCharacters = Left(newString, lengthOutput)
Else
ReplaceSpecialCharacters = newString
End If

End Function
0
yg_be Messages postés 22719 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > perica_12 Messages postés 7 Date d'inscription dimanche 11 avril 2021 Statut Membre Dernière intervention 12 avril 2021
11 avril 2021 à 14:36
peux-tu spécifier "basic" dans les balises quand tu partages du VBA?
tu écris "il n'affiche pas tjrs les noms des fichiers correspondants à la référence": dans quel cas n'affiche-t-il pas tout? ne se limite-t-il pas à cinq noms?
0