Bonsoir à tous,

J'ai récupéré un tableau Excel avec du VB et contenant une "ADODB.Connection" permettant de me connecter à un AS400 et de récupérer les données d'un fichier. En fonction des critères indiqués dans 2 cellules de la feuille Excel, je récupère bien mes données. Mais j'ai un problème sur les données numériques du fichier AS400 qui sont placées dans les cellules au format TEXTE. Ce qui est étonnant, cela se passe bien sur les zones numériques sans décimale par contre, "ça foire" dès que j'ai 3 décimales. Exemple dans la colonne prix d'achat, les données sont correctes sur les 26 premières lignes (mais au format texte quand même) puis la ligne suivante, je devrai avoir 1,908€ et j'ai au format texte toujours 1908,000 (comme s'il avait multiplié par 1000 !)

Que faut-il faire pour lui dire que ce sont des chiffres et non du texte dans la requête ou ailleurs ?
Je précise que :
- les zones sont bien définies en numérique sur l'AS400 et avec des décimales.
- ce code VB est exécuté avec Office 365.

Extrait de code VB

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
52
53
54
55
56
57
58
59
60
61
62
63
 
Public Sub Conect(mon_sql As String, adresse_IP As String)
Dim Con As New ADODB.Connection
Dim Cmd As New ADODB.Command
Dim Rs As ADODB.Recordset
Dim txtc As String
 
.../...
 
txtc = "provider=IBMDA400;data source=" & was400 & ";Force Translate=65535"
Con.Open txtc
 
Set Cmd.ActiveConnection = Con
mon_sql = "SELECT * FROM BIB_DATA.STOCK_MAGS WHERE nummag = '111' and secteur='10' and rayon='074' "
Cmd.CommandText = mon_sql
 
Set Rs = Nothing
Set Rs = Cmd.Execute()
 
rowCount = 6
For colCount = 0 To Rs.Fields.Count - 1
    Sheets.Item(2).Cells(rowCount, colCount + 1).Value = Rs.Fields(colCount).Name
    Sheets.Item(2).Cells(rowCount, colCount + 1).Font.Bold = True
Next colCount
 
While Not Rs.EOF
 
    rowCount = rowCount + 1
    For colCount = 0 To Rs.Fields.Count - 1
        If Rs.Fields(colCount).ActualSize = -1 Then
            text = ""
        Else
            val = Rs.Fields(colCount).Value
            If VarType(val) = vbNull Then
                text = ""
            Else
                text = val
            End If
        End If
    Sheets.Item(2).Cells(rowCount, colCount + 1).Value = text
    Next colCount
    Rs.MoveNext
Wend
 
 
Set Rs = Nothing
Con.Close
Sheets.Item(2).Cells.Columns.AutoFit
Sheets.Item(2).Activate
Sheets.Item(2).Cells(1, 1).Activate
FINI:
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
 
'Ajouté pour mise en forme couleur + filtre auto
    Range("A6:U6").Select
    With Selection.Font
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0.399975585192419
    End With
    Selection.AutoFilter
capture : extrait du tableau Excel, en jaune les cellules ou les valeurs sont erronées

Nom : capture extraction excel.png
Affichages : 478
Taille : 31,1 Ko

Merci pour votre aide,
Eric.