Impossible de remplacer le caractère tiret par un autre caractère

bonjour à tous,

pour expliquer un peu mon problème, je suis entrain de faire un tableau qui va prendre des informations dans un document ou j'ai copier l'HTML d'une page internet, sur ce document j'ai ceci:

</span>

Contínua Armadilha

</div>

on voit bien que la lettre í est inscrit correctement, puis quand je met "Contínua Armadilha" dans une variable en STRING, sa devient ceci "ContÃ-nua Armadilha". jusqu'à la pas de souci j'ai remplacer les saut de ligne, les espace début et fin de ligne pour avoir que le texte.

puis je lancer un petit module ou je remplace les caractère et la j'ai donc

contenu = Replace(contenu, "Ã-", "í") 'le contenu est le texte trouvé

mais cela ne fonctionne pas, et je ne comprend pas pourquoi, est-ce que le caractère tiret HTML n'est pas le même que ASCII? car si j'écris moi même une phrase ou je place le caractère "Ã-" et la ca fonctionne très bien. donc je ne comprend vraiment pas haha

est-ce que vous arriveriez à m'éclaircir sur le sujet?

dors et déjà merci de votre temps passé sur mon problème

Salutation

L0ki

Bonjour,

Essayez ceci:

    contenu = Replace(contenu, Chr(195) & "-", Chr(205))

Cdlt

bonjour,

merci de votre réponse Arturo83, mais même avec votre essai ca ne fonctionne pas, le problème vient du "tiret" car si je fait remplacer chr(195) par le chr(205) le à se transforme bien en í, si je fait remplace "-" par autre chose, impossible sa fonctionne pas. alors que si j'écrit moi même le texte avec le tiret la sa le remplace, c'est comme si le tiret qui c'est transformer entre le site HTM et mon excel n'a pas la même valeur qu'un simple tiret sur excel, vraiment bisarre.

voici la fonction exacte que j'utilise pour modifier les caractère spéciaux de plusieur langue, et tout fonctionne parfaitement juste ce fameux caractère je ne comprend pas.

Function remplacer_caractere_speciaux()

Dim Txt
Dim Htm

'------------------------------------------------------------------------------------------------
'------------ remplacement des différents carractère mal écrit -----------------------------------
'------------------------------------------------------------------------------------------------

Txt = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$" & vbCrLf & "$&$oe$Y$Ñ$ñ"
Txt = Txt & "$è$ê$é$É$E$•$" & Space(1) & "$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$à"
Htm = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì"
Htm = Htm & "$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï"
Htm = Htm & "$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$<br>;$&$œ$Ÿ$Ñ"
Htm = Htm & "$ñ$è$ê$é$É$È$â—$<br>$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$Ã"
Txt = Split(Txt, "$")
Htm = Split(Htm, "$")

'txt $í
'HTM $Ã-

For I = 0 To UBound(Txt)
contenu_a_modifier = Replace(contenu_a_modifier, Htm(I), Txt(I), 1, Compare:=vbBinaryCompare)
Next

End Function

actuellement j'ai enlevé ce fameux caractère de la liste c'est pourquoi on le trouve en texte sous la liste

encore merci

Cordialement

Parmi vos textes, où puis-je trouver un "Ã" suivi d'un tiret? Je n'en vois pas.

je les avais enlevé. voici le code avec les lettre incluse:

Function remplacer_caractere_speciaux()

Dim Txt
Dim Htm

'------------------------------------------------------------------------------------------------
'------------ remplacement des différents carractère mal écrit -----------------------------------
'------------------------------------------------------------------------------------------------

Txt = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$" & vbCrLf & "$&$oe$Y$Ñ$ñ"
Txt = Txt & "$è$ê$é$É$E$•$" & Space(1) & "$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$í$à"
Htm = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì"
Htm = Htm & "$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï"
Htm = Htm & "$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$<br>;$&$œ$Ÿ$Ñ"
Htm = Htm & "$ñ$è$ê$é$É$È$â—$<br>$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$Ã-$Ã"
Txt = Split(Txt, "$")
Htm = Split(Htm, "$")

For I = 0 To UBound(Txt)
contenu_a_modifier = Replace(contenu_a_modifier, Htm(I), Txt(I), 1, Compare:=vbBinaryCompare)
Next

End Function

et ici la partie texte copie d'un site internet sur un document texte, puis je vais chercher se texte "Contínua Magia" pour le mettre dans une variable string

<div class="item_box t_center">
                                    <span class="item_box_title">
                                        <b>Ícone</b>
                                    </span>

                                    Contínua Magia

                                </div>

a se moment dans la variable sa s'écrit "ContÃ-ua Magia"

d'où le remplacement mais qui ne fonctionne pas.

Comme je n'ai pas le texte HTML, j'ai copié le texte en A1, pas sûr que cela reproduise le même phénomène, essayez quand même.

Function remplacer_caractere_speciaux(contenu As String) As String
    Dim Txt
    Dim Htm
    '------------------------------------------------------------------------------------------------
    '------------ remplacement des différents carractère mal écrit -----------------------------------
    '------------------------------------------------------------------------------------------------

    Txt = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$" & vbCrLf & "$&$oe$Y$Ñ$ñ"
    Txt = Txt & "$è$ê$é$É$E$•$" & Space(1) & "$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$í$à"
    Htm = "Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì"
    Htm = Htm & "$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï"
    Htm = Htm & "$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$<br>;$&$œ$Ÿ$Ñ"
    Htm = Htm & "$ñ$è$ê$é$É$È$â—$<br>$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$Ã-$Ã"
    Txt = Split(Txt, "$")
    Htm = Split(Htm, "$")

    For I = 0 To UBound(Txt)
        contenu = Replace(contenu, Htm(I), Txt(I), 1, Compare:=vbBinaryCompare)
    Next
    remplacer_caractere_speciaux = contenu
End Function

et en B1 la formule:

=remplacer_caractere_speciaux(A1)

alors le souci là c'est que c'est vous qui avez écrit le texte dans la cellule, et dans se cas là sa fonctionne. mais si on va rechercher le texte avec les fonction instr dans le document texte ou j'ai copié le HTML, et que je fait mid de mes position pour l'introduire dans ma variable il se transforme.

texte dans un documents texte

<table id="details">
                        <tr>
                            <td>
                                <div class="item_box t_center">
                                    <span class="item_box_title">
                                        <b>Ícone</b>
                                    </span>

                                    Contínua Magia

                                </div>
                            </td>
                        </tr>
                        <tr>
Function recherche_texte ()

position_debut = InStr(1, contenu, "<table id=")
    position_inter = InStr(position_debut, contenu, "</span>") + 8
    position_inter_2 = InStr(position_inter, contenu, ">") + 1
    position_inter_3 = InStr(position_inter_2, contenu, "</span>")

    contenu_attribut = Mid(contenu, position_inter_2, position_inter_3 - position_inter_2)

End function

ici ma fonction ou je vais rechercher le texte de mon contenu (la variable contenu est la totalité de mon texte HTML) puis la mettre dans ma variable "contenu_attribut" qui est en string

et c'est a se moment la que le "í" se transforme en "Ã-" comme pas mal de caractère, donc c'est pour cela que j'utilise ma fonction de remplacement pour que ce caractère redevienne un "í" ou autre. et c'est ceci qui ne fonctionne pas. vraiment uniquement se caractère "-" qui bloque! si je veux remplacer uniquement le "-" sa fonctionne pas alors que si je remplace uniquement "Ã" la sa fonctionne, comme les autre caractère de la table déjà partagé.

d'ou mon problème ou je suis bloqué je ne comprend vraiment pas. merci de votre aide et patience!

PS: désolé mais le texte HTML est vraiment conséquent et je prend uniquement cette partie du document donc je copie seulement cette partie.

Il y a quelque chose qui ne va pas dans le nombre de caractères à comparer.

Il faut que nombre de Txt soit égal à celui des Htm sinon la boucle n'ira pas jusqu'au bout puisque dans le cas présent le nombre de caractères de Htm est bien supérieur à celui des Txt, donc cela génère une erreur et le programme s'arrêtera là. Il faut ajouter dans Txt autant de termes manquants.

Le code avec lequel j'ai fait les essais

Function remplacer_caractere_speciaux(contenu_attribut)
    Dim Txt
    Dim Htm
    Txt = "$Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$&$oe$Y$Ñ$ñ"
    Txt = Txt & "$è$ê$é$É$E$•$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$à"
    NbCarTxt = Len(Txt)
    Htm = "$Á$á$É$é$Í$í$Ó$ó$Ú$ú$Ý$ý$À$à$È$è$Ì$ì"
    Htm = Htm & "$Ò$ò$Ù$ù$Â$â$Ê$ê$Î$î$Ô$ô$Û$û$Ä$ä$Ë$ë$Ï$ï"
    Htm = Htm & "$Ö$ö$Ü$ü$Ÿ$ÿ$Ã$ã$Õ$õ$Ç$ç$<br>;$&$œ$Ÿ$Ñ"
    Htm = Htm & "$ñ$è$ê$é$É$È$â—$<br>$ô$á$ü$„$“$ã$ç$ó$ä$ö$ß$ù$Ó$ñ$ò$ú$Ã"
    NbCarHtm = Len(Htm)

    Txt = Split(Txt, "$")
    Htm = Split(Htm, "$")
    On Error GoTo Sortie
    For I = 0 To NbCarTxt
        contenu_attribut = Replace(contenu_attribut, Htm(I), Txt(I), 1, Compare:=vbBinaryCompare)
    Next

    Exit Function
Sortie:
    Stop
End Function

alors effectivement il n'y a pas le même nombre de caractère et ceci est normale, car nous allons spliter entre chaque signe $ (séparer ou couper) la chaine de caractères txt et HTM dans un tableau.

c'est a dire que dans mon tableau txt j'aurai:

txt(0) = "Á"

txt(1) = "á"

txt(2) = "É"

etc etc et pareil avec HTM

htm(0) = "& Aacute;"

htm(1) = "& aacute;"

htm(2)= "& Eacute;"

etc etc donc ce qui est important c'est pas le nombre de caractère dans mes chaine txt et htm mais le nombre totale de ligne dans mon tableau et dans se cas là je suis égale entre txt et htm.

et ma fonction de remplacement sera de remplacer le caractère htm(0) par le caractère txt(0), puis on boucle pour passer à 1 puis 2 puis 3 etc jusqu'au maximum de ligne qu'a mon tableau après le split.

PS: je vient de me rendre compte que quand j'ai copié coller ma partie de programme les caractères "& Aacute;" se sont inscrit "Á"!!! dans ma ligne de caractère sous htm c'est les caractère comme "& Aacute;" "& aacute;" etc etc

Bonjour,

J'ai très bien compris comment fonctionne la boucle, mais si le nombre de caractères à tester est différent entre Txt et Htm que ce passe -t-il?

Prenons l'exemple avec NbCarTxt=157 et NbCarHtm=191, 2 case de figure suivant ce que l'on prend comme butée max.

1er cas:

- on boucle avec I= de 0 à NbCarTxt soit de 0 à 157, donc quand I = 158 on sort de la boucle et les caractères HTM de 158 à 191 ne seront pas lus

2ème cas:

- on boucle avec I= de 0 à NbCarHtm soit de 0 à 157, donc quand I = 158 , il n'y a plus de caractère Txt qui y corresponde, ce qui génère une erreur et fait sortir de la boucle, les caractères HTM de 158 à 191 ne seront pas lus.

Dans le fichier ci-joint, j'ai mis mis tous les caractères bout à bout pour TXT et HTM (j'ai supprimé CRLF et Espace) et on voit bien que le nombre de caractères est différent.

Dans tous les cas, tous les caractères ne seront pas lus.

Cdlt

alors justement le nombre caractère de LA CHAINE est différente c'est normale, se qui est important c'est le nombre de ligne dans le tableau créer. mon tableau txt va de 0 à 79 variable, et mon tableau htm va de 0 à 79 variable aussi donc nous avons le bon nombre de remplacement entre le txt et htm c-a-dire que ma boucle n'aura pas de souci quand on demandera de remplacer la variable htm(79) par la txt(79) sa fonctionne correctement et après le programme s'arrête.

j'ai testé d'écrire dans la colonne A chaque ligne le txt(I) et dans la colonne B chaque ligne qui correspond a mon caractère que je voudrais modifier le htm(I) et j'arrive au même nombre on split la chaine en supprimant les $ et chaque valeur se trouvant entre ses signe sera ajouter dans mes tableau.

j'ai fait un petit fichier pour tester.

donc je suis désolé si je ne vous comprend pas mais j'ai pas l'impression que sa soit faux

Cordialement

11classeur1.xlsm (23.26 Ko)

Bonjour,

pouvez vous mettre en ligne un classeur avec votre valeur en cellule A1 issue de votre extraction de texte ? Merci.
Voir votre fichier Excel ou une version simplifiée avec votre fichier texte où il va chercher les données, comme cela nous serions sur le même "format".

@ bientôt

LouReeD

merci de votre participation LouReeD

quelle est ma surprise après avoir fait ce que vous m'avez demandé, je remarque que visuellement je vois le tiret dans la cellule mais si je clique sur la cellule je vois dans la zone d'écriture que le tiret n'y est pas... c'est un tiret virtuel c'est sa?

voici le document avec le texte copie de mon document HTML.

18classeur1.xlsm (23.37 Ko)

merci énormément LouReeD!!!!

Grâce à votre idée j'ai pu remarquer cette petite subtilité! et j'ai testé de remplacer comme suite "Ã" & Chr(173) et cela à fonctionné à merveille!

merci beaucoup!!!

Si la demande est que le " í- " soit remplacé par " ì " alors il vous faut dans la variable htm remplacé le deuxième igrave par ce double caractère.
Il faut faire surement la même chose pour le second caractère qui vous pose problème...

Le fichier ainsi modifié :

10igrave.xlsm (23.15 Ko)

@ bientôt

LouReeD

Encore merci beaucoup de votre aide!

Merci @ vous pour les remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "impossible remplacer caractere tiret"