Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

airvb

XLDnaute Nouveau
Bonjour,

A la fermeture d'un premier fichier (A) , j'enregistre une valeur ds un fichier fermé (48.xlsx)
via le code AAA ci dessous.


Je récupère les valeurs enregistrées avec le code BBB dans un autre tableau (B)

Le soucis, c'est que la valeur enregistrée dans le fichier fermé est un "nombre sous forme de texte".

Et bien évidemment la valeur récupérée par le code BBB dans le fichier (B) est mal interprétée .

Le format des cellules de la colonne ds le fichier fermé est bien "nombre"

Ds le fichier émetteur , la formule de la cellule ap8 du fichier A :

=CNUM(NB.SI(F10:F39;"48H")) qui donne une valeur numérique.



Comment faire pour enregistrer un nombre qui reste nombre ?

merci



Code AAA


Code:
Sub save48h()
    Dim Cn As ADODB.Connection
    Dim Cd As ADODB.Command
    Dim Rst As ADODB.Recordset
    Dim nomfich As String
    Dim cellule, feuille, dossier As String
    Dim ligne As Integer
    
    
'nomfich = ""V:\test\48h.xlsx"


feuille = "recap$"  'n'oubliez pas d'ajouter $ au nom de la feuille.
' on détermine la ligne à modifier ds recap
' on ajoute la différence à la date de référence
ligne = Range("AO8") - Range("AO9") + 2 ' + 1 pour la ligne des  noms + 1 offset
    
'Adresse de la cellule contenant la donnée à insérer ds le fichier recap
    cellule = "B" & ligne
   
    Set Cn = New ADODB.Connection
    
'--- Connexion ---
With Cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
& nomfich & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;"""
.Open
End With
'-----------------
    
'    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
'        "Data Source=" & nomfich & ";" & _
'        "Extended Properties=""Excel 8.0;HDR=No;"";"
'
    Set Cd = New ADODB.Command
    Cd.ActiveConnection = Cn
   
    Cd.CommandText = "SELECT * FROM [" & feuille & cellule & ":" & cellule & "]"
    
    Set Rst = New ADODB.Recordset
    Rst.Open Cd, , adOpenKeyset, adLockOptimistic
    Rst(0).Value = Range("AP8").Value
    Rst.Update
    
    Cn.Close
    Set Cn = Nothing
    Set Cd = Nothing
    Set Rst = Nothing
End Sub


code BBB


Code:
' mise à jour à l'ouverture des 48H

Sub maj48h()
Dim Cn As ADODB.Connection
Dim Fichier, alpha As String
Dim NomFeuille As String, texte_SQL As String
Dim Rst As ADODB.Recordset
Dim lastimmat, i, j, k, A, B, C As Integer
Dim nomfich As String
Dim recap48h, temp As Worksheet

'nom de la feuille qui récupère les datas
    Set recap48h = Worksheets("visite48h")
    Set temp = Worksheets("temp")
    
'Nom de la feuille dans le classeur fermé
NomFeuille = "recap"


 nomfich = "V:\test\48h.xlsx"

' va sur l'onglet caracteristique
recap48h.Activate

Set Cn = New ADODB.Connection

'--- Connexion ---
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & nomfich & ";Extended Properties=""Excel 12.0;HDR=NO;"""
        .Open
    End With
    '-----------------


'Set Cn = New ADODB.Connection
'
''--- Connexion ---
'    With Cn
'        .Provider = "Microsoft.Jet.OLEDB.4.0"
'        .ConnectionString = "Data Source=" & nomfich & _
'            ";Extended Properties=""Excel 8.0;HDR=No;"";"
'        .Open
'    End With
'
'    'Extended Properties=Excel 8.0 est utilisé pour les versions d'Excel 97, 2000 et 2002.
    
'-----------------

'Définit la requête.
'/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"

Set Rst = New ADODB.Recordset
Set Rst = Cn.Execute(texte_SQL)

'Ecrit le résultat de la requête dans la cellule A2
Range("A1").CopyFromRecordset Rst

'--- Fermeture connexion ---
Cn.Close
Set Cn = Nothing
' retour sur feuille mat

End Sub
 

Roland_M

XLDnaute Barbatruc
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

bonsoir,

un moyen simple pour régler ce problème

1' on load les données en chaine exemple A1 = 135,5
A$ = Range("A1")

2' on remplace la virgule par le point avant de replacer les données soit "135,5" en "135.5"
car de vb vers excel il faut le point qui redeviendra virgule sur la feuille (si toutefois la config est classique !)
A$ = Replace(A$, ",", ".")

Range("A2") = A$

et voilà !
 
Dernière édition:

airvb

XLDnaute Nouveau
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

Bonjour,
J'avais effectivement pensé pouvoir résoudre le problème en re-transformant les valeurs string en nombre.

Sauf que ,
lors de l'enregistrement la valeur est bien enregistrée , même si sous forme de txt.
En revanche lorsque je récupère les valeurs avec mon code BBB, les valeurs non numériques ne sont pas retrouvées.

Je suis surpris qu'on ne puisse pas enregistrer ds un fichier fermé des valeurs numériques qu'on puisse ensuite exploiter ds un autre fichier.

une autre piste ?



bonsoir,

un moyen simple pour régler ce problème

1' on load les données en chaine exemple A1 = 135,5
A$ = Range("A1")

2' on remplace la virgule par le point avant de replacer les données soit "135,5" en "135.5"
car de vb vers excel il faut le point qui redeviendra virgule sur la feuille (si toutefois la config est classique !)
A$ = Replace(A$, ",", ".")

Range("A2") = A$

et voilà !
 

Roland_M

XLDnaute Barbatruc
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

re

'je viens d'essayer comme ceci est ça marche
A$ = Range("A1") ' exemple source

'dans la routine ADODB...
Code:
If IsNumeric(A$) Then
   A$ = Replace(A$, ",", ".")
   Rst(0).Value = Val(A$)
Else
   Rst(0).Value = A$
End If
 

airvb

XLDnaute Nouveau
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

Merci de regarder mon problème.

Malgré l'application de ton code .... cela ne fonctionne pas chez moi.

Je joins les 2 fichiers en question pour test.


Merci

48.xlsx : fichier fermé
Test enregistrement : il faut juste faire évoluer la date en w8 et la valeur en W9 -- > bouton enregistrement
LA valeur W9 est un nombre entier.



re

'je viens d'essayer comme ceci est ça marche
A$ = Range("A1") ' exemple source

'dans la routine ADODB...
Code:
If IsNumeric(A$) Then
   A$ = Replace(A$, ",", ".")
   Rst(0).Value = Val(A$)
Else
   Rst(0).Value = A$
End If
 

Pièces jointes

  • 48h.xlsx
    22.3 KB · Affichages: 36
  • test enregistrement.xlsm
    47.9 KB · Affichages: 36
  • 48h.xlsx
    22.3 KB · Affichages: 38
  • test enregistrement.xlsm
    47.9 KB · Affichages: 39
  • 48h.xlsx
    22.3 KB · Affichages: 47
  • test enregistrement.xlsm
    47.9 KB · Affichages: 39

airvb

XLDnaute Nouveau
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

Quel boulet je fais !

Voici la v expurgée du mot de passe

désolé !


Bonjour,

Et le mot de passe pour voir ton code vba est : ________________

G
 

Pièces jointes

  • test enregistrement.xlsm
    47.8 KB · Affichages: 52
  • 48h.xlsx
    22.3 KB · Affichages: 44
  • test enregistrement.xlsm
    47.8 KB · Affichages: 50
  • 48h.xlsx
    22.3 KB · Affichages: 41
  • test enregistrement.xlsm
    47.8 KB · Affichages: 46
  • 48h.xlsx
    22.3 KB · Affichages: 44

Gelinotte

XLDnaute Accro
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

Bonjour,

Il est semble qu'il suffit, dans le fichier "48h.xlsx", colonne "B", de mettre le format "Nombre" au lieu de "Standard". Ainsi, lors de la récupération des données avec la macro "maj48h", les données sont lues.

Pour le nombre de décimales, c'est à toi de voir selon le besoin (contenu de la cellule "X8" du fichier "test enregistrement.xlsm".

Ou je suis complètement mêlé, ou ça fonctionne ... :rolleyes:

G

P.S. : Je te remercie grandement d'avoir soulevé ce problème. Car, je tentais de débugger un code pour écrire dans un fichier Excel fermé. Tu me fournis le dépannage pour mon fichier personnel. :cool:
 
Dernière édition:

Gelinotte

XLDnaute Accro
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

Bonjour,

Ça fonctionne avec des nombres entiers. Mais pas avec des décimales. Cellule "x8" bien entendu.

G

Je confirme, ça fonctionne avec des nombres entiers sous deux conditions :
1- dans le fichier "48h.xlsx" colonne "B" le format en nombre.
2- dans le fichier "test enregistrement.xlsm" onglet "visite48h" le format de la colonne "B" en nombre.

Pour les décilales, je cherche car l'écritue dans "48h.xlsx" se fait en format texte.

G
 

airvb

XLDnaute Nouveau
Re : Enregistrement d'une valeur numerique dans un fichier ferme via ADODB.

:eek:

Je crois que j'ai trouvé ce qui pose problème.

Ds le 48.xlxs, la première ligne B1 j'ai insérer le nom de la colonne --> 48H !

Depuis que j'ai retiré le nom du champ ça fonctionne !

Vas t en comprendre quelque chose Charles !

Je vais fouiller car je crois que le pramètre :HDR=NO;""" est responsable de la 1ere ligne.

Je vais mettre en production quelques jours pour vérifier que cela fonctionne.

Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 191
Membres
103 152
dernier inscrit
Karibu