[VBA] Banaliser les guillemets dans un script
Résolu
lml-mike
Messages postés
487
Statut
Contributeur
-
Polux31 Messages postés 7219 Statut Membre -
Polux31 Messages postés 7219 Statut Membre -
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.
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 !
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:
- [VBA] Banaliser les guillemets dans un script
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Mas script - Accueil - Windows
- Guillemets anglais - Guide
- Excel compter cellule couleur sans vba - Guide
7 réponses
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 :
Il faudrait que cela soit :
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 ?
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 ?
lml-mike
Messages postés
487
Statut
Contributeur
121
up !
Salut,
tu ne manges jamais toi ???
essaies la fonction replace() : monTexte = Replace(ligne,""","""") ... je garantie rien, j'ai pas testé ...
;o)
polux
tu ne manges jamais toi ???
essaies la fonction replace() : monTexte = Replace(ligne,""","""") ... je garantie rien, j'ai pas testé ...
;o)
polux
Excuse-moi, je mange très vite et ne fais pas très attention à l'heure ^^
Après quelques petits essais, j'essaye :
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 ...
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 ...
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.
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 :
Toujours aucune garantie que ça marche ... je ne peux pas tester ... mais ça doit pas être loin ...
Bon courage
;o)
Polux
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
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 :
(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 :)
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 :)
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
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
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 :
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 :
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
annule et remplace le pécédent ... vivement les vacances ^^
Testé et approuvé ...
;o)
polux
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
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 !
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 !