VBA Excel - Ecrire dans fichier txt
Résolu
petitmarco
Messages postés
46
Statut
Membre
-
Tom Clancy -
Tom Clancy -
Bonjour à tous
Je dois exécuter 2 macros en vba Excel,
- une qui ouvre un fichier text et incrémente un tableau de variable, là pas de problème (voici le code épuré pour info)
---------------------
Private Sub Command6_Click()
On Error GoTo errCommand6_Click
txt = ActiveWorkbook.Path & "\config.ini"
fNum = FreeFile
Text4.Text = ""
Open txt For Input As #fNum
While Not EOF(fNum)
Line Input #fNum, Variable
Text4.Text = Text4.Text & Variable & vbCrLf
Wend
Close #fNum
errCommand6_Click:
Select Case Erreur("errCommand6_Click")
Case vbIgnore: Resume Next
Case vbRetry: Resume
Case vbAbort: Resume errCommand6_Click
End Select
End Sub
-------------------------
- la deuxième macro doit mettre à jour ce fichier texte en fonction des modifications apportées au tableau de variables (appelons le tab_txt() ), et c'est là que je bloque. J'ai bien trouvé des exemples pour insérer des lignes en fin de fichier, mais je souhaite comparer les valeurs de tab_txt() et soit ajouter une ligne, soit mettre à jour une ligne existante dans le fichier text
j'ai aussi trouvé une solution pour VB (ci dessous qui marche à condition d'avoir installé VB6, mais je maitrise pas du tout VB6 et ne souahite pas refaire mon projet a therme en VBA), mais elle ne marche pas en VBA ("bibliothèque introuvable"), existe - il une alternative VBA ou une adaptation de ce code
--------------------------------
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
--------
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
--------
Function LireINI(Entete As String, Variable As String, FichierINI As String) As String
Dim Retour As String
Retour = String(255, Chr(0))
LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), FichierINI)) ''Application.Path & "\" & FichierINI))
End Function
--------
Function EcrireINI(Entete As String, Variable As String, Valeur As String, FichierINI As String) As String
EcrireINI = WritePrivateProfileString(Entete, Variable, Valeur, FichierINI) ' Application.Path & "\" & FichierINI)
End Function
Je dois exécuter 2 macros en vba Excel,
- une qui ouvre un fichier text et incrémente un tableau de variable, là pas de problème (voici le code épuré pour info)
---------------------
Private Sub Command6_Click()
On Error GoTo errCommand6_Click
txt = ActiveWorkbook.Path & "\config.ini"
fNum = FreeFile
Text4.Text = ""
Open txt For Input As #fNum
While Not EOF(fNum)
Line Input #fNum, Variable
Text4.Text = Text4.Text & Variable & vbCrLf
Wend
Close #fNum
errCommand6_Click:
Select Case Erreur("errCommand6_Click")
Case vbIgnore: Resume Next
Case vbRetry: Resume
Case vbAbort: Resume errCommand6_Click
End Select
End Sub
-------------------------
- la deuxième macro doit mettre à jour ce fichier texte en fonction des modifications apportées au tableau de variables (appelons le tab_txt() ), et c'est là que je bloque. J'ai bien trouvé des exemples pour insérer des lignes en fin de fichier, mais je souhaite comparer les valeurs de tab_txt() et soit ajouter une ligne, soit mettre à jour une ligne existante dans le fichier text
j'ai aussi trouvé une solution pour VB (ci dessous qui marche à condition d'avoir installé VB6, mais je maitrise pas du tout VB6 et ne souahite pas refaire mon projet a therme en VBA), mais elle ne marche pas en VBA ("bibliothèque introuvable"), existe - il une alternative VBA ou une adaptation de ce code
--------------------------------
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
--------
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
--------
Function LireINI(Entete As String, Variable As String, FichierINI As String) As String
Dim Retour As String
Retour = String(255, Chr(0))
LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), FichierINI)) ''Application.Path & "\" & FichierINI))
End Function
--------
Function EcrireINI(Entete As String, Variable As String, Valeur As String, FichierINI As String) As String
EcrireINI = WritePrivateProfileString(Entete, Variable, Valeur, FichierINI) ' Application.Path & "\" & FichierINI)
End Function
A voir également:
- VBA Excel - Ecrire dans fichier txt
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier .dat - Guide
2 réponses
Bonjour
Si kernel32 n'est pas installé sur ta machine, tu peux toujours ré-écrire ton fichier complètement à chaque fois (il ne doit pas être si long que ça) sous un nom provisoire , puis utiliser quelques kill et quelque Name pour tout remettre en ordre.
Si kernel32 n'est pas installé sur ta machine, tu peux toujours ré-écrire ton fichier complètement à chaque fois (il ne doit pas être si long que ça) sous un nom provisoire , puis utiliser quelques kill et quelque Name pour tout remettre en ordre.
Bon, je répond un peu tard
Kernel32 est bien installé, ce sont des ocx et aitre dll associé à ma "commondilalog", dont la mise en place est un peu lourde si l'on veut simplement publier le classeur excel, j'ai donc ré-écrit mes procédures et chercher un peu a fait beaucoup de bien à ma connaissance
Si quelqu'un veut un aperçu du code, qu'il face signe
Merci encore et à bientôt peut - être ;-)
SUJET CLOT
Kernel32 est bien installé, ce sont des ocx et aitre dll associé à ma "commondilalog", dont la mise en place est un peu lourde si l'on veut simplement publier le classeur excel, j'ai donc ré-écrit mes procédures et chercher un peu a fait beaucoup de bien à ma connaissance
Si quelqu'un veut un aperçu du code, qu'il face signe
Merci encore et à bientôt peut - être ;-)
SUJET CLOT