Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENCODER UNE URL EN UTF8 DEPUIS WORD


Information sur la source

Catégorie :VBA Classé sous : word, utf8, URL, encode, macro Niveau : Débutant Date de création : 19/03/2008 Date de mise à jour : 19/03/2008 14:11:01 Vu : 3 354

Note :
Aucune note

Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Si on veut créer des URL correctes dans Word, il est nécessaire d'encoder convenablement tout ce qui n'est pas un caractère ASCII.
Pour tous les caractères de plus de 7 bits, il faut utiliser le codage UTF8.
Voir à ce sujet l'exellente page de Wikipedia http://fr.wikipedia.org/wiki/Utf8
Cette fontion n'existe pas en VB6. J'en ai écrit une, EncodeUTF8 ci-dessous, qui à l'air de bien marcher.

Nota pour les curieux :
Il y a des bien fonctions pour cela en .net, mais depuis les applications Office (même Office 2007 !), c'est du VB6 qui est utilisé pour programmer les macros.

Au hasard, copier, coller, sélectionner dans Word un peu de Chinois pour essayer

西藏精神领袖达赖喇嘛八日呼吁藏人冷静
 

Source

  • Sub Google()
  • '
  • ' Google Macro
  • ' Macro enregistrée le 21/02/2008 par VBsnail
  • Dim Utf8 As String
  • TexteSelectionne = ""
  • Text = Selection.Text
  • i = 1
  • For i = 1 To Len(Text)
  • car = Mid(Text, i, 1)
  • TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
  • Next i
  • 'debug MsgBox (TexteSelectionne)
  • ' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
  • URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
  • ' MsgBox (Len(URL))
  • ' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
  • ' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
  • ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
  • URL, SubAddress:="", ScreenTip:="", _
  • TextToDisplay:=Selection.Text
  • End Sub
  • Public Function EncodeUTF8(ByVal car As String) As String
  • CarVal = AscW(car)
  • If CarVal < 0 Then CarVal = CarVal + 65536
  • 'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
  • If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
  • EncodeUTF8 = car
  • Exit Function
  • End If
  • If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
  • Sextet = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Quintet = 192 + CarVal
  • EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
  • Exit Function
  • End If
  • 'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
  • Sextet2 = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Sextet1 = 128 + CarVal Mod 64
  • CarVal = CarVal \ 64
  • Quartet = 224 + CarVal
  • EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
  • ' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
  • ' de toutes façons, l'Unicode est codé sur 2 octets !!!
  • ' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
  • End Function
Sub Google()
'
' Google Macro
' Macro enregistrée le 21/02/2008 par VBsnail
    Dim Utf8 As String
    TexteSelectionne = ""
    Text = Selection.Text
    i = 1
    For i = 1 To Len(Text)
      car = Mid(Text, i, 1)
      TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
    Next i
'debug    MsgBox (TexteSelectionne)

' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
     URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
'  MsgBox (Len(URL))
' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        URL, SubAddress:="", ScreenTip:="", _
        TextToDisplay:=Selection.Text
End Sub

Public Function EncodeUTF8(ByVal car As String) As String
        CarVal = AscW(car)
        If CarVal < 0 Then CarVal = CarVal + 65536
        'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
        If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
            EncodeUTF8 = car
            Exit Function
        End If
        If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
            Sextet = 128 + CarVal Mod 64
            CarVal = CarVal \ 64
            Quintet = 192 + CarVal
            EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
            Exit Function
        End If
        'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
        Sextet2 = 128 + CarVal Mod 64
        CarVal = CarVal \ 64
        Sextet1 = 128 + CarVal Mod 64
        CarVal = CarVal \ 64
        Quartet = 224 + CarVal
        EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
' de toutes façons, l'Unicode est codé sur 2 octets !!!
' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
End Function

Conclusion

Je sais, je sais, ce code n'est pas optimal, ni très propre.
mais enfin il a l'air de marcher.
 

Historique

19 mars 2008 14:10:26 :
Cas codage sur deux octetes: correction de la constant pour les poids forts du premier octet.
19 mars 2008 14:11:01 :
Cas codage sur deux octets: correction de la constant pour les poids forts du premier octet.

Commentaires et avis

signaler à un administrateur
Commentaire de VBsnail le 19/03/2008 01:13:22

Heu, je vous prie de m'excuser, la phrase en Chinois n'est pas passé.
Mais enfin, vous êtes assez grand pour aller sur pêcher un ou deux caractères Chinois, Japonais, Arabe ou Cyrilique sur le net.

signaler à un administrateur
Commentaire de VBsnail le 19/03/2008 08:32:40

Désolé, mais les caractères Chinois ne sont pas passés.
Mais pour ici,
http://www.smarthanzi.net/
on peut trouver des références à des sites en Chinois, et en plus, ce site remarquable permet de comprendre de quoi ça parle !! Si, si.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Lancer une macro au démarrage d'un fichier Word [ par Super Franck ] Comment lancer automatiquement une macro au démarrage d'un fichier Word Macro Word: insertion champs de fusion [ par Laurent ] J'ai besoin d'écrire une macro qui me permette d'insérer dans mon document word un champ de fusion qui pourra prendre deux valeurs lors de la fusion e executer macro word à l'ouverture de word [ par kkm ] SVP,Je souhaite executer une fusionde doc sous word en la lançant à partir d'un formulaire vb. Par exemple un utilisateur A clique sur un bouton qui f editer un formulaire WORD depuis macro EXCEL [ par Yann ] Bonjour tous,De cherche désespérément la commande qui me permettra de modifier un texte dans un fichier word en mode formulaire.j'arrive à atteindre l pb de macro word + formulaire [ par steph ] Bonjour Ce que je veux faire : Je rempli un formulaire (fait sous vb editor)Puis chaque zone de ce formulaire je le positionnne a un endroit bien pr Lancer macro word automatiquement [ par one ] Bonjour,Je suis un debutant en VBA. Voila j'ai developpe une appli avec word (alt+f11). Le probleme est que pour lancer cet appli je suis oblige de pa MACRO WORD !! need help !! [ par kimsRE ] help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui MACRO WORD !! need help !! [ par kimsRE ] help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui Pb de bibliothèque dans une macro Word [ par rutabaga ] J'ai écrit une macro Word AutoNew. Elle fonctionne parfaitement sur ma bécanne. Quand j'installe le .dot contenant cette macro sur d'autres bécannes a Pb Word vba et impression en nombre [ par Lunacy ] j'utilise NT4 SP6 Word 2000J'ai une imprimante ( par défaut ) pour convertir en PDF ( type PDFWRITER )j'ai fait une macro qui automatise le traitement


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,38 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.