Problème de recherche ("Find")

Bonjour à tous,

Voilà je bloque sur une recherche, le code est juste en dessous.

Pour faire simple je n'ai pas mis de fichier en pièce jointe pour garder l'anonymat des personnes concernées.

- ce que j'ai :

un tableau avec le nom et identifiant des personnels nommé "Administratif"

une feuille Excel dans laquelle je retrouve tous les noms de fichier (photo) ce trouvant dans le dossier "PHOTOS STAGIAIRES"

- mon soucis :

lorsque la recherche concerne le nom du personnel parfois il est trouvé et cela fonctionne. Parfois le nom n'est pas trouvé alors qu'il est identique.

J'ai vérifier ce n'est pas un problème de Majuscule ou Minuscule car pour certaine cela fonctionne.

et pour mettre un peu de difficulté j'ai remarqué un point commun le nom du fichier est uniquement le nom de la personne, lorsque je rajoute un caractère sur le nom du fichier ça fonctionne.

Ça aurait été simple si je m'arrêtai là mais certain fichier on eux aussi uniquement le nom du personnel en tant que nom et le code fonctionne immédiatement donc je ne comprend pas d'où vient le problème...

Il s'agit d'un code que j'utilise régulièrement donc modifier le nom des photos qui ne marche pas n'est pas la solution que je cherche bien entendu.

J’espère que quelqu'un pourra m'aider.

Merci à vous

For m = 5 To derlig                                     ' Boucle sur chaque ligne du tableau
    nom = Sheets("Administratif").Cells(m, 3).Value                         'identifie le nom
    identifiant= Sheets("Administratif").Cells(m, 3).Offset(0, 2).Value      ' identifie le matricule
With Sheets(1).Range("A:A")
    Set x = .Find(what:=identifiant, lookat:=xlPart)                              'cherche valeur dans la liste des nom de fichiers
        If x Is Nothing Then
            Set x = .Find(what:=nom, lookat:=xlPart)                            'si pas de matricule recherche nom
                If x Is Nothing Then
                    c = c + 1                                                   'identifie le nb de photo non trouvé
                End If
            nomfic = x.Value
        Else
            nomfic = x.Value
        End If
fichimg = ActiveWorkbook.Path & "\PHOTOS STAGIAIRES\" & nomfic     'L'image est dans le même dossier que le classeur
End With

Bonjour,

tu as cacafouillé avec nomfic = x.value

le premier est mal placé

après c=c+1 --> else et nomfic = x.value

@+JP

Salut,

Merci effectivement petit cafouillage réglé.

Le problème ne vient pas de là mais merci quand même.

re,

est ce que FSO et filesexist te pause un problème ?

@+JP

Bonjour,

voila un exemple que j'utilise

Public Sub DataActeurPhotoDossier(ByVal objForm As Object)
    FormDataWebActeur_IsChangeInProgress = True
    Dim FSO As Variant
    Dim PathSource As String
    Dim Nom As String
    Dim ImageName As String
    Dim ImgNumList As Integer
    '-------------------
    On Error GoTo GestionErreur
    '------------------- variable perso utilisée dans d'autres routines
    'pour bloquer les object interactif...option, check...
    'FormDataWebActeur_IsChangeInProgress = True
    '-------------------
    'charge les affiches qui correspondent au Nom de ObjForm.TxbNomList.Text
    'à partir de Dossier : PathSource = DriveValide & PathAffiche
    PathSource = DriveValide & PathActeurPhoto
    Nom = objForm.Caption
    ImageName = Nom & ".jpg"
    Set FSO = CreateObject("Scripting.FileSystemObject")
    'si image existe charge image
    If FSO.FileExists(PathSource & ImageName) Then
        objForm.ImgD.Picture = LoadPicture(PathSource & ImageName)
        objForm.TxbSizeD.Value = Int(objForm.ImgD.Picture.Width / 26.45) & " x " & Int(objForm.ImgD.Picture.Height / 26.45)
        objForm.Repaint
    End If
    Set FSO = Nothing
    FormDataWebActeur_IsChangeInProgress = False
    Exit Sub
GestionErreur:
    MsgBox Err
    Resume Next
End Sub

@+JP

OULA!!!!

Je suis pas expert, je vais regarder ça dans la soirée et je te tiens au courant d'ici demain.

Merci encore

Bonjour,

'L'image est dans le même dossier que le classeur

fichimg = ActiveWorkbook.Path & "\PHOTOS STAGIAIRES\" & nomfic

en voulant t'expliquer mon code , je m'aperçois de quelque chose ...

nomfic ... c'est quoi comme image ?

il te manque ".jpg" qui n'est pas pareil que ".jpeg"

essais en corrigeant çà ...

@+JP

Bonjour,

donc , pour l'explication

dans le cas ou nomfic n'est pas vide

If nomfic <> "" Then ... End If

le chemin du dossier photo

PathSource = ActiveWorkbook.Path & "\PHOTOS STAGIAIRES\"

le nom de la photo (jpg,png,bmp,...)

ImageName = nomfic & ".jpg"

on crée un objet système de fichier

Set FSO = CreateObject("Scripting.FileSystemObject")

dans le cas ou l'image / photo existe

If FSO.FileExists(PathSource & ImageName) Then ... End If

on charge l'image dans le contrôle image ImgD

objForm.ImgD.Picture = LoadPicture(PathSource & ImageName)

si l'image ne s'affiche pas correctement , on peut redessiner le form (pas obligatoire)

objForm.Repaint

quand on a fini ,

Set FSO = Nothing

objForm est un objet , "un double" du form

ICI , il est passé en paramètre avec l'option ByVal qui représente "une copie" à l'inverse de ByRef qui représente l'original

quand tu charges ton form qui s’appelle par exemple "USF" tu peux ,

après avoir déclaré en "Public" l'objet : Public objForm as Object ,

"remplir" l'objet avec ton form "USF" : Set objForm = USF

maintenant , n'importe où dans ton fichier tu peut utiliser

objForm.Contrôls("Textbox" & 1).value

pour la valeur de la textbox 1

@+JP

merci c'est un peu plus clair que le code brute car je ne suis que débutant

mais l'explication est parfaite.

Mais malheureusement ce n'est pas la solution, je vais essayer d'être plus clair désolé :

Importer les image et les mettre dans mon fichier excel pas de soucis (voir mon code en dessous, je ne pense pas qu'il y ai un soucis )

dans un autre code j'obtiens tous les noms des fichiers image que je copie dans une feuille excel

(je peux envoyer mon fichier alléger mais il y a le nom des personnes donc ca sera uniquement en MP si cela peux t'aider.)

Mon soucis est que ma recherche ne retrouve pas le nom cherché dans la liste excel (pour certain fichier ça fonctionne et pour d'autres ca ne marche pas) donc ce n'est pas un problème de type de fichier ou d'importation mais uniquement de recherche dans une liste de nom.

Comme je ne sais pas d'où vient le problème je ne peux pas faire une exemple avec d'autre nom que ceux que j'utilise car il doit y avoir un truc en particulier, donc la création d'un fichier exemple me semble inutile.

J’espère avoir été plus clair, et merci de prendre du temps pour me répondre.

Sub Attrib_photo()
    Dim m As Long, x As Variant, c As Integer
    Dim derlig As Long, réponse As Variant
    Dim Tbl() As String, nom As String, matricule As Long, nomfic As String, fichimg As String

'------------------------------------Attribution_photos--------------------------------------------
Application.ScreenUpdating = False

derlig = Sheets("Administratif").Range("C" & Rows.Count).End(xlUp).Row        ' identifie le numero de la dernière ligne rempli
c = 0
For m = 5 To derlig                                     ' Boucle sur chaque ligne du tableau
    nom = Sheets("Administratif").Cells(m, 3).Value                         'identifie le nom
    identifiants= Sheets("Administratif").Cells(m, 3).Offset(0, 2).Value      ' identifie le matricule
With Sheets(1).Range("A:A")
    Set x = .Find(what:=identifiants, Lookat:=xlPart)                              'cherche valeur dans la liste des nom de fichiers

        If x Is Nothing Then
            Set x = .Find(what:=nom, Lookat:=xlPart)                            'si pas de matricule recherche nom

                        If x Is Nothing Then
                            c = c + 1                                                                      'identifie le nb de photo non trouvé
                            GoTo vide
                        Else
                            nomfic = x.Value
                        End If

        Else
            nomfic = x.Value
        End If

fichimg = ActiveWorkbook.Path & "\PHOTOS STAGIAIRES\" & nomfic 'L'image est dans le même dossier que le classeur
End With

Worksheets("Trombinoscope").Activate
    With Range("A:K")
        Set x = .Find(what:=nom, Lookat:=xlPart)                    ' recherche le nom dans la feuille Trombinoscope
            With Sheets("Trombinoscope").Pictures.Insert(fichimg)   'insert la photo
                .Name = nom                                             'nomme la photo en fonction du nom
                .Left = Range(x.Address).Offset(-2, 0).Left             'centre la photo
                .Top = Range(x.Address).Offset(-2, 0).Top
                .Height = Range(x.Address).Offset(-2, 0).Height  ' hauteur de la cellule
                .Width = Range(x.Address).Offset(-2, 0).Width       ' largeur de la cellule
            End With
    End With

vide:
Next m

Application.DisplayAlerts = False
Sheets(1).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True

réponse = MsgBox("il y a " & c & " personnel(s) à qui aucune photo n'a été attribuée", vbOKOnly + vbInformation)

End Sub

Bonjour,

ok , je comprend

je pense que tu as le même problème que j'ai rencontré avec ma liste de titre de film ,

un espace en trop ou en moins , un accent , ... et on retrouve plus rien

l'astuce que j'ai utilisée ,

mettre tout en minuscule simple (sans accent)

supprimer tous les espaces , les signes autre que des lettres ou chiffres

on se retrouve avec une suite de caractères pas très lisible , mais c'est temporaire et c'est pas nous , c'est le code qui va lire !!

Le Nom et le Prénom ---> lenometleprenom

et là tu retrouves ce que tu veux avec InStr() ,

c'est à dire que tu ne cherches pas une égalité , tu cherches si la source est dans la cible,... et c'est très important

lenometleprenom --> est dans --> lenometleprenom2

je posterais un code ... dans un moment ...

@+JP

Merci je vais tenter de mon côté également.

En vérifiant je n'ai pas vu de signe particulier ni d'espace dans les noms cherché mais ça ne coute rien de tenter....

Mon code est pourri donc je ne le met pas en ligne mais il a le mérite d'avoir testé si cela réglait le problème :

mais non ça ne fonctionne pas

Bonjour,

j'ai regardé la fonction Find() ,

et par défaut MatchCase = False et donc ne regarde pas la casse , ...

mais la casse c'est "A" et "a" non ? et "â" ou "à" ?

dans immédiat , tu peu essayé Lookat:=xlWhole qui recherche "à l' intérieur" comme je t'ai expliqué

"nom" peut être à l’intérieur de "nom "

pour ce problème il y a Trim() , Trim(" nom ") --> "nom"

une autre facette du problème

dans un autre code j'obtiens tous les noms des fichiers image que je copie dans une feuille excel

est ce que ta liste est : "nom.jpg" ?

avec xlPart "nom" et "nom.jpg" c'est faux

avec xlWhole "nom" et "nom.jpg" c'est vrai

@+JP

Merci de ta réponse et désolé du temps de la mienne.

J'ai été très pris ce mois ci et je n'ai pas eu le temps de me pencher sur le problème.

Donc j'ai fait le test pour xlpart et xlwhole mais le problème est le même, les nom ne sont pas trouvé...

Si quelqu'un à une autre idée je suis preneur et je suis moins chargé en ce moment donc répondrai rapidement.

merci

Eh bien finalement cette longue absence de ma part a été bénéfique et donc je répond tout seul à mon problème.

la réponse est toute bête comme d'habitude.

je ne pensais pas que les nom de mon tableau initiale pouvait comporter des espace donc de là vient mon erreur.

J'ai donc tout simplement utiliser la fonction Trim()

merci de l'aide

Rechercher des sujets similaires à "probleme recherche find"