[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 -
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.
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
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Guillemets anglais - Guide
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
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
455
Date d'inscription
Statut
Contributeur
Dernière intervention
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 !