valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
Modifié par valtrase le 7/05/2016 à 20:12
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
9 mai 2016 à 00:38
Bonjour a tous,
Ce que je cherche à faire:
J'ai deux liste :
- Fichiers présent dans ma base
- Fichiers présent sur le disque dur
je voudrais rajouter les nouveaux fichiers du disque dans ma base. jusque là pas de problème une comparaison de chaine suffit.
Mais j'aime bien me compliquer la vie, et voilà comment.
je veux pouvoir rajouter mes fichiers présent sur le disque dans ma base de donnée selon un critère "Qualité d'exactitude" c'est français ça ?
Trois critères "Faible, Moyen, Strict"
Strict les noms de fichiers sont égaux à 100%, Moyen à 50%, Faible à 15%.
Je suis en train de faire des test avec des Split() et des boucles imbriquées, mais là suis perdu dans les méandres de mes boucles.
je fais un Split() sur les deux noms de fichier et après je teste le nombre de mots qui correspondent. mais rien ne marche. je ne vois pas comment sortir de toutes ces boucles.
Si quelqu’un a une autre idée pour résoudre ce problème je suis preneur, je cherche juste l'idée de base je me débrouille avec le code. et tout ça en VBA.
Exemple:
- 10 000 (Nom de fichier de ma base de donnée)
- 10 000 bc (Nom de fichier présent sur le disque dur)
Là j'ai deux mot identiques sur trois donc avec un critère Faible ou Moyen le fichier est ajouté à ma base de donnée. (Arrondi supérieur)
Je peux travailler soit sur des listes soit des tables. mais une ni l'autre solution ne m'inspire.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 7 mai 2016 à 23:06
Bonjour,
Je retiens que c'est là ton plaisir et respecte ceci :
Mais j'aime bien me compliquer la vie, et voilà comment
et vais donc ne pas risquer de diminuer ce plaisir et me contenter de t'inviter à t'intéresser à l'utilisation d'un objet dictionnary et à te doter d'un excellent processeur.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 9 mai 2016 à 00:38
Merci de ta réponse ucfoutu
Je ne connais pas dictionnary et à y regarder de plus prés ça m'a l'air un tantinet compliqué.
j'ai codé ça, ça tourne mais si quelqu'un à une solution pour l'optimiser je suis preneur.
Private Sub R_cmdUpdateBase_Click() Dim SearchQuality Dim bolSelected As Boolean Dim strTextSearch, strText Dim MaxValue As Integer, TotalSelected As Integer Dim n, i, j, k
On Error Resume Next
'On récupère la valeur de SearchQuality dans la table de paramètres Select Case GetParam("Search.Quality", "Moyenne") Case "Faible" SearchQuality = 0.1 Case "Moyenne" SearchQuality = 0.5 Case " Stricte" SearchQuality = 1 Case Else SearchQuality = 1
End Select DoCmd.Minimize
With Me .R_lstFilmBase.Selected(0) = True .R_lstRecherche.Requery 'On ouvre le formulaire d'information d'avencement de la tache DoCmd.OpenForm "frmSearch", acNormal, , , , acWindowNormal Forms!frmSearch.ProgressBar2.Max = .R_lstRecherche.ListCount - 1 Forms!frmSearch.ProgressBar3.Max = .R_lstFilmBase.ListCount - 1
DoCmd.Hourglass True
' La zone de liste R_lstRecherche contient les fichiers .avi présents dans le répertoire ..\..\Récents" For n = 0 To .R_lstRecherche.ListCount - 1 Forms!frmSearch.ProgressBar2.Value = n Forms!frmSearch.etiTraitement.Caption = "n = " & n & "/" & Forms!frmSearch.ProgressBar2.Max & " Traitement de: " & .R_lstRecherche.Column(2, n)
' on charge le nom de fichier du disque dur strTextSearch = Split(.R_lstRecherche.Column(2, n), " ")
' La zone de liste R_lstFilmBase contient les fichiers .avi présents dans la base de donnée For i = 0 To .R_lstFilmBase.ListCount - 1
Forms!frmSearch.ProgressBar3.Value = i 'On charge le nom de fichier de la base
'Si les noms de fichiers sont égaux on le sélectionne dans la liste de recherche 'et on passe au fichier suivant If .R_lstRecherche.Column(2, n) = .R_lstFilmBase.Column(1, i) Then .R_lstRecherche.Selected(n) = True 'bolSelected = True: Exit For GoTo NextFile End If
'Sinon on boucle sur tous les mots du nom de fichier If UBound(strTextSearch) > 1 Then For k = LBound(strTextSearch) To UBound(strTextSearch) 'La recherche est plus longue alors on sort If k > UBound(strText) Then Exit For Else If strTextSearch(k) = strText(k) Then MaxValue = MaxValue + 1 Else Exit For End If End If Next k End If
If MaxValue > 1 And MaxValue >= CInt((UBound(strTextSearch) + 1) * SearchQuality) Then .R_lstRecherche.Selected(n) = True 'Exit For 'Else '.R_lstRecherche.Selected(n) = False End If
Next i NextFile: DoEvents Next n
MsgBox .R_lstRecherche.ItemsSelected.Count & " Titres de films correspondent a " & _ (SearchQuality * 100) & "% des critères de recherche"