Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 15h16   #1
Invité de passage
 
Inscription : juin 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 10
Points : 3
Points : 3
Par défaut Conversion Latin-1 pour console.

Bonjour,
j'ai crée un beau petit programme qui envoie des messages netsend entre postes. Malheureusement, la langue française comporte des accents "È" qui ne peuvent s'afficher dans le service de message windows car il utilise le typer de texte Latin-1, et la console utilise le type ASCII. Comment puis-je transformer un texte en type Latin-1 pour que les accents fonctionnent?

Le rapport avec VB est que l'utilisateur entre un texte dans un textbox, puis en clickant sur send, un .bat est créé et exécuté. (Je sais, c'est lourd mais c'est le seul moyen avec la sécurité ici).

Edit: Aceess 2002, pas dotnet. Dsl pour la mauvaise section du post.
pasdoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 16h28   #2
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 702
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 702
Points : 26 658
Points : 26 658
Citation:
Envoyé par pasdoy Voir le message
et la console utilise le type ASCII
Sûrement pas ASCII, sinon on ne pourrait jamais afficher d'accents dans la console... ça utilise l'encodage ibm850 (du moins sous Windows XP en français)

Pour écrire ton fichier bat, il faut donc utiliser cet encodage :

Code :
1
2
3
4
5
6
Dim ibm850 = Encoding.GetEncoding("ibm850")
Using writer As New StreamWriter(cheminDuFichier, ibm850)
 
    writer.WriteLine(...)
 
End Using
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h46   #3
Invité de passage
 
Inscription : juin 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 10
Points : 3
Points : 3
Salut voici mon code :
Code :
1
2
3
4
5
6
7
8
' Création & Écritue dans le fichier
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("mess.bat", True)
a.Close
F = FreeFile
Open "mess.bat" For Append As #F
Print #F, Envoi
Close #F
Je ne crois pas que cette solution puisse s'appliquer a mon problème.
pasdoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 18h32   #4
Responsable .NET
 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 16 702
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur .NET
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2004
Messages : 16 702
Points : 26 658
Points : 26 658
Ah ok, le sujet a été déplacé dans Access.... Ma solution supposait que c'était du VB.NET, donc effectivement elle ne s'applique pas.
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !

Envie de contribuer à la rubrique .NET ?
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 20h03   #5
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Essaie ceci.

Ajoute cette déclaration de la fonction API CharToOem :
Code :
1
2
3
Public Declare Function CharToOem Lib "user32" Alias "CharToOemA" ( _
    ByVal strIn As String, _
    ByVal strOut As String) As Long
Exemple d'utilisation :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub TestCharOem()
Dim fl As Integer
Dim strRow, strRowOem As String
 
fl = FreeFile()
Open "C:\Chemin\Test.bat" For Output As #fl
' Ligne 1
strRow = "@Echo Off"
Print #fl, strRow
' Ligne 2
strRow = "Echo é-è-à-ç"
strRowOem = String(Len(strRow), vbNullChar)
CharToOem strRow, strRowOem
Print #fl, strRowOem
'
Close #fl
End Sub
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 27/05/2011, 15h48   #6
Invité de passage
 
Inscription : juin 2010
Messages : 10
Détails du profil
Informations forums :
Inscription : juin 2010
Messages : 10
Points : 3
Points : 3
Salut,
Avec les examens et tout je m'étais absenté du boulot depuis longtemps. Ta solution fonctionne parfaitement merci beaucoup a toi! Par contre j'aimerais bien comprendre cette ligne:
Code :
strRowOem = String(Len(strRow), vbNullChar)
À quoi sert-elle? Je me suis rendu compte de son importance, est-ce pour le nombre de caractères dans la chaine?
pasdoy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/05/2011, 18h34   #7
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,
Citation:
Envoyé par pasdoy Voir le message
j'aimerais bien comprendre cette ligne:
Code :
strRowOem = String(Len(strRow), vbNullChar)
À quoi sert-elle? Je me suis rendu compte de son importance, est-ce pour le nombre de caractères dans la chaine?
Oui, ça sert à remplir la chaîne de caractères Visual Basic, avant d'appeler la fonction de l'API Windows.
Il faut que chaîne VB ait réservé un espace suffisant, correspondant au nombre de caractères que la fonction API va renvoyer.
C'est dû au fait que l'API Windows est constituée en grande partie, de fonctions destinées au langage C, dans lequel il n'y a pas de type String.
En C, les chaînes de caractères sont juste des tableaux de caractères.
On ne connait que l'adresse du premier caractère, et la fin de chaîne de caractères est repérée par le code 00.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h35.


 
 
 
 
Partenaires

Hébergement Web