Ne pas tenir compte que le texte est en majuscule

For Each fichier In SourceFolder.Files
        If fichier Like "*_" & ref & ".jpg" Or fichier Like "*_" & ref & ".JPG" Or fichier Like LCase(ref) & ".JPG" Or fichier Like LCase(ref) & ".jpg" Then
            cheminETnom = Repertoire & "\" & fichier.Name
    End if

Bonjour

Dans un programme VBA, j'utilise une recherche de fichier en fonction du texte d'une cellule, or je veux faire en sort que le fait qu'il soit en majuscule ne soit pas pris en compte car les fichiers ont des noms en minuscule. Voici le code qui permet ça or ça ne fonctionne pas, les fichiers ne sont pas trouvés.

Y a t'il quelqu'un pour m'aider s'il vous plaît ?

Bonne fin d'après midi

bonjour,

une propoposition

For Each fichier In SourceFolder.Files
  If LCase(fichier.Name) Like LCase("*_" & ref & ".jpg") Then
     cheminETnom = Repertoire & "\" & fichier.Name
  End If

Bonjour,

Voir la remarque en vert tout en bas de cette page : https://www.excel-pratique.com/fr/vba/conditions_suite

Cordialement,

h2so4 merci pour ton aide mais ça ne va pas convenir à ma demande..

Sébastien, j'ai bien essayé cette commande , je l'ai placée au tout début de mon programme mais ça ne fonctionne pas ...

Bonjour,

Le problème vient d'ailleurs...

Le code de H2SO4 est fonctionnel.

La solution de Sébastien également.

Faites ce test, en changeant le répertoire de recherche et le contenu de la variable ref :

Sub essai()
Dim fichier As String, repertoire As String
Dim extension As String, ref As String
Dim debut As Long
    repertoire = "C:\Users\" & Environ("UserName") & "\Desktop\"    '**** A ADAPTER
    extension = "*.jpg"
    ref = "REFERENCE"                    '**** A ADAPTER

    fichier = Dir(repertoire & extension)
    If fichier <> vbNullString Then
        Do
            debut = Len(fichier) - Len(ref) - Len(extension)
            If debut > 0 Then
                If InStr(debut, fichier, ref, vbTextCompare) Then MsgBox repertoire & fichier
            End If
            fichier = Dir
        Loop While fichier <> vbNullString
    End If
End Sub

Je suis totalement d'accord avec le fait que c'est fonctionnel mais, je ne sais pas pourquoi dans mon cas ça ne l'est pas.

Ce code s'inscrit dans un programme, je ne peux pas me permettre de tout modifier cela impacterait toute la suite du programme... Il faudrait que je comprenne pourquoi la solution de h2so4 ne fonctionne pas. Par contre ta technique pour rentrer le répertoire sans avoir à mettre l'adresse dans le fichier excel m'intéresse.

Pour te répondre, nous aurions besoin, a minima, de l'intégralité de la Sub ou de la Function concernée...

Je suis en train de préparer un doc mais j'ai des informations confidentiels à retirer

Voilà une partie du code, en réalité j'ai 5 command_butonclick mais ça ne change rien, ils viennent tout dans la procédure ListeFichiers

Comme nous n'aurons pas accès à ton pc, il n'y a que toi qui puisse déterminer ce qui ne va pas.

Essaye donc cette boucle :

Sub ListeFichiers(Repertoire As String) 'procédure permettant de trouver le nom de l'image dans le répertoire ou sous répertoires, si il n'y a pas d'image trouvée la cellule est colorée

Dim fso, SourceFolder, SubFolder, fichier, cheminETnom
Set fso = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = fso.GetFolder(Repertoire)

    For Each fichier In SourceFolder.Files
        If LCase(fichier.Name) Like "*.jpg"
             MsgBox Repertoire & "\" & fichier.Name
        End If
    Next fichier

    For Each SubFolder In SourceFolder.subfolders
        ListeFichiers SubFolder.Path
    Next SubFolder

End Sub

Une fois que tu auras déterminé ce qui ne va pas, dans l'orthographe des chemins (qui DOIVENT se terminer par "\"), des fichiers, etc, tu te pencheras sur la méthode FileExists du modèle fso, ceci pour éviter la boucle For Each fichier. Mais, ne fait ça qu'après...

Je ne comprends pas pourquoi je dois changer ça ? Cela fonctionne très bien et j'ai besoin de tester ref pour connaitre quelle image je cherche, je ne pense pas qu'on se comprenne. Je n'ai pas de problème avec ce code et je ne peux pas me permettre de le modifier je cherche uniquement à ne pas prendre en compte les majuscules.

Je ne comprends pas pourquoi je dois changer ça ?

Si tu parles de la méthode FileExists, c'est pour que ton programme tourne mieux, plus vite.

Au lieu d'une boucle sur TOUS les fichiers du répertoire, la méthode FileExists se fait en une ligne de code.

Mais, si tu veux garder ton code, garde le...

Si tu parles du test que je te demande de faire, c'est pour savoir ou ton code "merdouille".

Si tu ne veux pas le faire, ne le fais pas. Mais sache également que l'on ne peut pas tester à ta place...

Voici comment tester en fonction de ref majuscule, .

For Each fichier In SourceFolder.Files
    If InStr(1, Repertoire & "\" & fichier.Name, ref, vbTextCompare) > 0 Then
        cheminETnom = LCase$(Repertoire & "\" & fichier.Name)
    End if
'etc...
Next

Je ne suis pas une pro excel, je ne comprend rien à ce que je dois faire mon code fonctionne, je ne comprends pas pourquoi il faut que je test tout, ok peut-être que votre méthode est plus rapide mais pour l'instant ce n'est pas ce problème que j'ai à résoudre ... vous m'avez totalement perdue

Bonjour,

Dans votre code de base, celui que vous nous donnez dans votre question, remplacez :

        If fichier Like "*_" & ref & ".jpg" Or fichier Like "*_" & ref & ".JPG" Or fichier Like LCase(ref) & ".JPG" Or fichier Like LCase(ref) & ".jpg" Then
            cheminETnom = Repertoire & "\" & fichier.Name
    End if

par :

    If InStr(1, Repertoire & "\" & fichier.Name, ref, vbTextCompare) > 0 Then
        cheminETnom = LCase$(Repertoire & "\" & fichier.Name)
        MsgBox CheminETnom
    End if

Si vous voyez le message, c'est qu'il aura trouvé votre fichier dont le nom contient le contenu de la variable ref...

C'est bon j'ai bien reçu le message

C'est bon j'ai bien reçu le message

Donc sujet résolu?

non pas du tout, j'ai fait votre test je reçois bien le message et ensuite ?

Si j'intègre ce que vous avez envoyé à mon code en enlevant la msgbox et en mettant le end if après mon select case j'ai une erreur dans le select case car il ne sait plus ce qu'il doit indiquer dans la cellule

image

il ne sait plus ce qu'il doit indiquer dans la cellule

Je dois dire que, moi également, je ne sais pas ce qu'il faut indiquer dans la cellule. Tu ne me l'as pas dit.

Je supposes, au vue du code, que tu dois y placer le nom du fichier?

Si oui, alors ton Select Case devient :

Select Case ValRef
  Case 3: Cells(k, 9).Value = fichier.Name
  Case 18: Cells(k, 19).Value = fichier.Name
  Case 22: Cells(k, 23).Value = fichier.Name
  Case 38: Cells(k, 45).Value = fichier.Name
End Select

A la condition que k soit égal à une ligne valide...

Sinon, merci de bien vouloir nous indiquer ce qu'il convient de saisir dans lesdites cellules...

Rechercher des sujets similaires à "pas tenir compte que texte majuscule"