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 18/12/2011, 10h11   #1
Nouveau Membre du Club
 
Inscription : juillet 2003
Messages : 115
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2003
Messages : 115
Points : 29
Points : 29
Par défaut Fonction de Cafeine sur seprateur decimal

Bonjour a tous,

en faisant quelques recherche sur comment déterminer le separateur decimal, je suis tombé sur la fonction de CAFEINE (grand merci pour ses contributions qui me sont toujours très utiles).
Le seul pb c'est que je n'arrive pas à comprendre comment l'utiliser

Donc j'ai la 1ere ligne qui peut contenir soit un ";" ou une "," comme séparateur de champ. Chaque ligne est de format string

Comment je peux utiliser le code de cafeine ci dessous pour déterminer mon séparateur ?
Code :
1
2
3
4
5
Function GiveSep() As String
 
GiveSep = Mid(3 / 2, 2, 1)
 
End Function
Merci d'avance pour votre aide

Anax
Anaxagore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 14h06   #2
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,

Ce code que tu cites ne fonctionne que pour le symbole décimal.
C'est à dire le caractère, entre la partie entière et la partie décimale d'un nombre.

Est-ce que tu veux "deviner" le séparateur de champ dans une chaîne de caractères ?

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 17h56   #3
Nouveau Membre du Club
 
Inscription : juillet 2003
Messages : 115
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2003
Messages : 115
Points : 29
Points : 29
Oui c'est exactement cela.
J'ai les mêmes informations dans le fichier mais parfois on me l'exporte avec un séparateur qui est une virgule et parfois un point virgule.
Je ne sais pas comment faire

Merci deja pour ta réponse

Anax
Anaxagore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 20h28   #4
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
Je pense qu'on pourrait compter le nombre d'occurrence des séparateurs potentiels et dire que celui qui a le plus gros compteur est le gagnant.

voila ce que j'ai fait pour trois séparateurs (tabulation, virgule, point-virgule) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Function DevinerSeparateur(sFile As String) As String
Dim lgTabCnt As Long, lgCommaCnt As Long, lgSemiColCnt As Long
Dim l As Long, lgMaxCnt As Long, sResult As String
Dim iFic As Integer, iRowCnt As Integer
Dim sText As String, sOneRow As String
 
On Error GoTo ErrH
 
' ouvrir fichier
iFic = FreeFile()
Open sFile For Input As iFic
' Lire les 10 1ères lignes
Do While (Not EOF(iFic)) And (iRowCnt < 10)
   iRowCnt = iRowCnt + 1
   Line Input #iFic, sOneRow
   sText = sText + sOneRow
Loop
Close iFic
' Compter séparateurs potentiels
For l = 1 To Len(sText)
    Select Case Mid(sText, l, 1)
        Case vbTab: lgTabCnt = lgTabCnt + 1
        Case ",": lgCommaCnt = lgCommaCnt + 1
        Case ";": lgSemiColCnt = lgSemiColCnt + 1
    End Select
Next
' Compteur Maxi
If lgTabCnt > lgMaxCnt Then lgMaxCnt = lgTabCnt
If lgCommaCnt > lgMaxCnt Then lgMaxCnt = lgCommaCnt
If lgSemiColCnt > lgMaxCnt Then lgMaxCnt = lgSemiColCnt
' Caractère correspondant au compteur maxi
If lgMaxCnt = lgTabCnt Then
    sResult = vbTab
ElseIf lgMaxCnt = lgCommaCnt Then
    sResult = ","
ElseIf lgMaxCnt = lgSemiColCnt Then
    sResult = ";"
Else
    sResult = ""
End If
 
Sortie:
Close iFic
' Retourner séparateur trouvé ou chaîne vide sinon.
DevinerSeparateur = sResult
Exit Function
 
ErrH:
MsgBox "Erreur No. " & Err.Number & " : " & Err.Description
Resume Sortie
End Function
Utilisation :
Code :
1
2
3
4
5
6
7
8
9
Sub testDevinerSeparateur()
Dim sSep As String
sSep = DevinerSeparateur("C:\Mon fichier.txt")
if sSep <> "" then
   ' la fonction a trouvé
else
   ' la fonction n'a rien trouvé
end if
End Sub
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 12h07   #5
Nouveau Membre du Club
 
Inscription : juillet 2003
Messages : 115
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2003
Messages : 115
Points : 29
Points : 29
merci bcp pour ta réponse
je teste cela dans la journée et si j'ai une question complémentaire sur quelque chose que je ne comprendrai pas, je reposterai un petit message
Encore merci pour ta réponse hyper rapide. c'est vraiment très appreciable

Anax
Anaxagore est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h58.


 
 
 
 
Partenaires

Hébergement Web