GEODDE
Messages postés1Date d'inscriptionvendredi 27 octobre 2017StatutMembreDernière intervention27 octobre 2017
-
Modifié le 27 oct. 2017 à 18:35
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDerniè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
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDernière intervention 2 mars 202321 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)
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.
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDernière intervention 2 mars 202321 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
GEODDE
>
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDerniè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 ?
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDernière intervention 2 mars 202321
>
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 !
GEODDE
>
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDerniè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..
Patrice33740
Messages postés8556Date d'inscriptiondimanche 13 juin 2010StatutMembreDernière intervention 2 mars 202321
>
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.