Private Function ModifValeur(pathFichierTxt As String, separateurData As String, texteRecherche As String, numColRecherche As Long, texteModif As String, numColModif As Long) As Boolean
Dim fso As Object, fichTxt As Object, pathFichTxtTmp As String, fichTxtTmp As Object, tabElLigne() As String, ligne As String, flagModif As Boolean
ModifValeur = True
On Error GoTo gestionErreur
'ouvrir le fichier texte en lecture seule et créer un fichier temporaire à la racine du classeur
Set fso = CreateObject("Scripting.FileSystemObject")
Set fichTxt = fso.OpenTextFile(pathFichierTxt, 1)
pathFichTxtTmp = ThisWorkbook.Path & "\FichTxtTmp_" & Format(Now, "yyyymmddhhnnss") & ".txt"
Set fichTxtTmp = fso.CreateTextFile(pathFichTxtTmp, True)
flagModif = False
'boucler sur chaque ligne du fichier texte
While Not fichTxt.AtEndOfStream
'récupérer la ligne courante
ligne = fichTxt.ReadLine
'récupérer chaque élément de la ligne dans un tableau (on éclate la ligne en fonction du séparateur)
tabElLigne = Split(ligne, separateurData)
'si l'élément de la la ligne correspondant à la colonne cherchée équivaut au texte recherché
If tabElLigne(LBound(tabElLigne) - 1 + numColRecherche) = texteRecherche Then
'modifier la valeur dans la colonne à modifier
tabElLigne(LBound(tabElLigne) - 1 + numColModif) = texteModif
flagModif = True
'reconstituer la ligne (avec les séparateurs)
ligne = Join(tabElLigne, separateurData)
End If
'écrire la ligne dans le fichier temporaire
fichTxtTmp.WriteLine ligne
Wend
'fermer les fichiers
fichTxt.Close: fichTxtTmp.Close
'si une modification a été apportée au fichier de base
If flagModif Then
'supprimer le fichier de base
fso.DeleteFile pathFichierTxt, True
'le remplacer par le fichier temporaire (contenant les modifications)
fso.MoveFile pathFichTxtTmp, pathFichierTxt
End If
GoTo finProcedure
gestionErreur:
ModifValeur = False
finProcedure:
'détruire les objets
Set fso = Nothing: Set fichTxt = Nothing: Set fichTxtTmp = Nothing
End Function