Problème d'importation de données

GEODDE Messages postés 1 Date d'inscription vendredi 27 octobre 2017 Statut Membre Dernière intervention 27 octobre 2017 - Modifié le 27 oct. 2017 à 18:35
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 30 oct. 2017 à 18:05
Bonjour,

J'ai créé une macro me permettant d'importer des données (fichiers en .dat) dans un classeur excel via un formulaire. Tout fonctionne sauf que ma colonne de profondeur (Depth) partant de 0 avec un pas d'environ 0.30m déconne dès que la valeur atteint 1 et une décimale.

En gros au lieu de m'afficher 1,006, il est écrit 1 006 alors que pour les autre s colonnes tout fonctionne.

Enfin, mon fichier de données est un fichier txt séparé par des tabulations.

Merci de votre aide.

Voici le code:

Dim ligne_debut As Integer: Dim colonne_debut As Integer
Dim ligne_fin As Integer: Dim colonne_fin As Integer
Dim ligne_enCours As Integer: Dim colonne_enCours As Integer

Private Sub logviewer_Click()
Shell "C:\Program Files (x86)\Geoprobe\DI Viewer\DisplayLog.exe"
End Sub


Private Sub exporter_Click()
ligne_debut = 1: colonne_debut = 1
ligne_enCours = ligne_debut: colonne_enCours = colonne_debut
Cells.Clear
For i = 0 To liste_fichiers.ListCount - 1
    lecture (liste_fichiers.List(i))
Next i
End Sub

Private Sub fermer_Click()
liste_fichiers.Clear
formulaire.Hide
End Sub

Private Sub importer_Click()
Dim fichier_choisi As String
fichier_choisi = Application.GetOpenFilename("Text Files (*.dat), *.dat", , "Sélectionner le fichier DAT")
liste_fichiers.AddItem (fichier_choisi)
End Sub
Private Sub lecture(fichier As String)
Dim depart As Integer, position As Integer
Dim texte As String, tampon As String

Open fichier For Input As #1
Do While Not EOF(1)
Line Input #1, texte
depart = 1: position = 1
Do While (position <> 0)
position = InStr(depart, texte, vbTab, 1)
If position = 0 Then
tampon = Mid(texte, depart)
Sheets("Import").Cells(ligne_enCours, colonne_enCours).Value = tampon
Exit Do
Else
tampon = Mid(texte, depart, position - depart)
End If

Sheets("Import").Cells(ligne_enCours, colonne_enCours).Value = tampon
depart = position + 1
colonne_enCours = colonne_enCours + 1
Loop

colonne_enCours = colonne_debut
ligne_enCours = ligne_enCours + 1
Loop
Close #1

End Sub

Private Sub ecriture(fichier As String)
Dim ligne As Integer, colonne As Integer
Dim texte As String

ligne = ligne_debut: colonne = colonne_debut

If LCase(fichier) <> "faux" Then
Open fichier For Output As #1
While Cells(ligne, colonne).Value <> ""
While Cells(ligne, colonne).Value <> ""
texte = texte & Cells(ligne, colonne).Value & vbTab
colonne = colonne + 1
Wend

Print #1, texte
texte = ""
colonne = colonne_debut
ligne = ligne + 1
Wend

Close #1
End If
End Sub

Private Sub traitement()
Dim ligne As Integer: Dim colonne As Integer
ligne = ligne_debut: colonne = colonne_debut

Cells(ligne, colonne).Sort Cells(ligne, colonne), xlAscending, Header:=xlNo

While Cells(ligne, colonne).Value <> ""
If (Cells(ligne, colonne).Value = Cells(ligne - 1, colonne).Value) Then
Cells(ligne, colonne).EntireRow.Delete
ligne = ligne - 1
End If

ligne = ligne + 1
Wend
End Sub




EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
27 oct. 2017 à 18:49
Bonjour,

A première vu ce qui "déconne" c'est pas à partir de A68 mais jusqu'à A67 et toute la colonne B, à cause de la virgule qui n'est pas reconnue (il faudrait la remplacer par un point avant l'import)
0
Bonjour,

Merci de votre réponse.

Néanmoins, je préférerais une autre solution.

Est-ce que mon code déconne ou pas.? Ya-t-il un pb de déclaration de variable ?

JE vous remercie de jeter un oeil à mes lignes de code.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21
Modifié le 30 oct. 2017 à 14:26
Bonjour,

Est-ce que mon code déconne ? Oui

La virgule n'est pas reconnue comme séparateur décimal, autrement dit, la lecture binaire du fichier ne tient pas compte des paramètres locaux.

Ton fichier est un simple fichier .txt français enregistré avec une extension .dat dans lequel le séparateur décimal est la virgule (et pas le point !).

Il serait plus simple d'ouvrir directement le fichier .dat avec Excel qui se chargera de la conversion linguistique avec :
Set wbk = Workbooks.Open(Filename:=fichier, Format:=1, local:=True)

Cdlt
Patrice
0
GEODDE > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
30 oct. 2017 à 15:13
Ok je vais essayer cela. Je vous dirais si ça fonctionne.

Néanmoins cette solution n'explique pas pourquoi l'importation fonctionne au niveau de la colonne B et pas pour la colonne A...Mystère ?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21 > GEODDE
30 oct. 2017 à 16:58
Mais elle ne fonctionne pas au niveau de la colonne B !!!!

Ne vois tu pas que ce sont pas des nombres qui sont importés mais des textes !
0
GEODDE > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié le 30 oct. 2017 à 17:10
Merci d'ouvrir mes yeux de taupe sur une évidence !

Je demande de l'aide pas un dénigrement...

Je vous remercierai de vous abstenir de répondre.


Je change de forum..
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 21 > GEODDE
Modifié le 30 oct. 2017 à 18:05
Il n'y a là aucun dénigrement, simplement une évidence que je l'ai vu au premier coup d'oeil sur l'image du résultat, sans regarder le code.:

c'est le b.a.ba d'Excel ; les textes sont alignés à gauche et les nombres à droite.
0
Rejoignez-nous