[VBA] Banaliser les guillemets dans un script

Résolu
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   -  
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai un script VBA qui me permet de générer du code VBA à coller avec du texte dedans (venant d'un fichier), pour le recracher dans une textbox.

On Error GoTo Err_modifier_Click

Dim i, j, k
Dim config, texte
Dim IP, login, IP_public

chemin_conf = InputBox("Saisir le chemin d'accès exact de la configuration en .txt, et normalisé")
Open chemin_conf For Input As #1

Open chemin_conf & "_generated.txt" For Output As #2

j = 1
While Not EOF(1)
        For i = 1 To 23
             If EOF(1) Then Exit For
             Line Input #1, texte
             If i = 1 Then
                config = "conf" & j & " = " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
                j = j + 1
             Else
                config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _"
                Print #2, config
             End If
         Next i
         If EOF(1) Then
           config = " & Chr(13) & Chr(10) & " & Chr(34) & Chr(34)
           Print #2, config
           Print #2, ""

         Else
           Line Input #1, texte
           config = " & Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " & chr(13) & chr(10)"
           Print #2, config
           Print #2, ""
         End If
Wend

config = "conf = conf"
For k = 1 To j - 2
    config = config & k & " & conf"
Next
config = config & j - 1
Print #2, config
Close
MsgBox ("Fichier texte généré dans le meme dossier avec succès !")
Exit Sub

Exit_ajout_Click:
        Exit Sub
        
Err_modifier_Click:
    MsgBox Err.Description
    Resume Exit_ajout_Click

End Sub


Le problème, c'est qu'il m'arrive d'avoir dans ce texte des guillemets, qui me sont entièrement indispensable...

Comment je pourrais optimiser mon code, pour qu'à chaque ligne de texte inscrite dès qu'il detecte un guillemet il me le banalise ?

J'avais pensé bien sûr au chr(34), mais pour coder un remplacement de " par " & chr(34) & " tout en ayant coupé la ligne en deux...sachant également qu'il peut y avoir jusqu'à 10 guillemets par ligne...je suis complètement perdu ...:^)

Une idée ?

Merci infiniment !
A voir également:

7 réponses

lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
Ok, j'ai trouvé comment banaliser les guillemets, mais pas comment inclure cela dans le script...

en fait c'est très simple il suffit de les dédoubler. Si par exemple dans

Chr(13) & Chr(10) & " & Chr(34) & texte & Chr(34) & " _"

Je rencontre :
Chr(13) & Chr(10) & "chat-script ORANGE "" "ATT*64***4#" TIMEOUT 10 "CONNECT"" _

Il faudrait que cela soit :
Chr(13) & Chr(10) & "chat-script ORANGE """" ""ATT*64***4#"" TIMEOUT 10 ""CONNECT"" " _

Ce qui donne en alogrithme :

Lire fichier
Pour chaque ligne de fichier
Si ligne contient "
alors
remplacer " par ""
fin si
fin pour

Quelqu'un sait retranscrire cela en VBA ?
0
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
up !
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Salut,

tu ne manges jamais toi ???

essaies la fonction replace() : monTexte = Replace(ligne,""","""") ... je garantie rien, j'ai pas testé ...

;o)

polux
0
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
Excuse-moi, je mange très vite et ne fais pas très attention à l'heure ^^

Après quelques petits essais, j'essaye :
texte = Replace(texte, """", """""")


et ça marche :P


Puis-je en profiter pour poser encore une question bête, sur ces petites variables

numéro = 251
nom = de-la-villa

y a t il une fonction pour extraire le 1 de 251, et le villa de de-la-villa ?

Je sais, c'est honteux de ne pas savoir ça ...
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
re,

Content que tu ais trouvé ...

Pour l'autre question, oui il existe plusieurs fonctions qui permettent d'extraire une partie d'une chaîne de caractères.
Pour le numéro, si c'est d'un type entier, long ou double (décimal), il faut d'abord le convertir en chaîne de caractères.
num = Right(CStr(monNum),1)

Ici la fonction Right retourne le dernier caractère de la chaîne monNum. CStr est la fonction qui transforme une variable de type entier, long ou double en chaîne de caractère.
Pour le deuxième, c'est un peu plus compliqué, même si le principe est pratiquement le même. Comment savoir quels caractères extraire ? Y-a-t'il toujours un "-" ? si oui, il faut faire une boucle :
Public Function SearchNom (ByVal nom As String) As String
Dim i As Integer
Dim c As String
For i = Len(nom) to 1   'pour i allant de la longueur de la chaîne à 1. Ici nom = 11 caractères
    If Chr$(nom, Len(nom), i) <> "-" Then
        SearchNom = c
        Exit Function
    Else
        c = Chr$(nom, Len(nom), i) & c
    End If
Nexi i
End Function

Toujours aucune garantie que ça marche ... je ne peux pas tester ... mais ça doit pas être loin ...

Bon courage

;o)

Polux
0
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
Merci pour le coup de main !!!

Je ne pourrai tester ta fonction que cette après midi, mais a ce que j'en ai compris :
Pour i de long(nom) à 1  'par ordre décroissant
       si extraire(nom, long(nom), i) <> "-" alors
          mot = c
          fin
       sinon
          c = chaine(nom, long(nom), i) & c
       fin si
fin pour

(je me lis en essayant de comprendre en même temps :P)

T'es sûr que c'est pas plutot l'inverse ??? " si extraire(nom, long(nom), i) = "-" alors"

Mais sinon j'ai compris et c'est une super idée...parce que j'ai oublié de le préciser, mais oui, il y a toujours un séparateur "-" et je veux toujours le dernier mot :)
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
salut,

Oui tu as raison ... c'est : "si extraire(nom, long(nom), i) = "-" alors" ... voilà ce que c'est de ne pas faire de test ... je pense que tu as pigé le principe ... à toi de jouer maintenant

N'oublie pas de mettre résolu ...
bon courage

;o)

Polux
0
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
Je l'aurais mis avec plaisir, malheureusement ce n'est pas le cas...

Lorsque j'ai applique ta fonction à mon projet, j'ai un message d'erreur pour Chr$ me disant :
Erreur de compilation :
Nombre d'arguments incorrect où affectation de propriété incorrecte


Quelqu'un sait d'où ce problème peut venir ?

Sachant que j'ai viré le début et la fin de la fonction publique, qui elle aussi me posait problème :

For i = Len(DNS) To 1
    If Chr$(DNS, Len(DNS), i) <> "-" Then
        lieu = c
        Exit Function
    Else
        c = Chr$(DNS, Len(DNS), i) & c
    End If
Nexi i
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Bonjour,

Pfffff je dois avoir besoin de repos moi .. remplace Chr$ (qui n'a rien avoir là dedans) et met Mid(DNS, Len(DNS), i) = "-" Then ....

;o)

polux
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
annule et remplace le pécédent ... vivement les vacances ^^

For i = Len(DNS) To 1 Step -1
        If Mid(DNS, i, 1) = "-" Then
            lieu = c
            Exit Function
        Else
            c = Mid(DNS, i, 1) & c
        End If
Next i


Testé et approuvé ...

;o)

polux
0
lml-mike Messages postés 455 Date d'inscription   Statut Contributeur Dernière intervention   121
 
Tout fonctionne absolument à merveille :)

Merci pour tout tes conseils, problème résolu ;-)

P.S.: j'ai remplacé le exit function par exit for, le fait d'avoir mis une fonction dans mon sub m'a crée plein de merdes (remplacement du end sub par end function, ajout d'un exit function a l'avant derniere ligne) bref...c'est reglé, et c'est le principal !
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Content pour toi et désolé pour les bourdes que j'ai commises ... (c'est quand les vacances ??? ... par encore ? .. bon ok, je sors ...)

;o)

polux
0