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
capture : extrait du tableau Excel, en jaune les cellules ou les valeurs sont erronées
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
Merci pour votre aide,
Eric.
Partager