IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Utiliser des fichiers ASC


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club Avatar de Leusca
    Homme Profil pro
    Ingénieur d'études conception mécanique
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études conception mécanique

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Utiliser des fichiers ASC
    Bonjour à tous,

    Plan du post

    Intro
    Les fichiers à lire
    L'automatisation à réaliser
    Le code
    Remarque importante


    Intro

    Dans le cadre de la conception d'un projet de génie civil, il est primordiale de connaitre la topographie du terrain.

    Ces données peuvent être obtenu par mesures ponctuelles avec un théodolythe si votre terrain n'est pas très grand ni très complexe dans sa topographie. Pour le reste des cas, la technique moderne à des moyens bien meilleurs.

    Les données peuvent être aujourd'hui obtenue par mesure aéroporté, technique Lidar (LIght Detection And Ranging) ou photogramétrie. Ces deux techniques permettent de scanner des zones immenses avec une forte résolution et forte précision.

    Des sociétés spécialisées proposent la réalisation de scan si une très forte résolution et très forte précision est necessaire, de l'ordre du centimètre, mais les tarifs sont assez prohibitifs (environ 10k€ pour une zone de 20km2).

    Dans le cas d'un besoin ne necessitant pas de tels précisions, il est interessant de savoir que l'IGN met à disposition gratuitement les relevés topographiques nationaux. Il est possible à tous d'acceder à ces données d'une resolution d'un mètre, et d'une précision de l'ordre de la dixaine de centimètre.

    Ces data sont sous la forme de fichier .asc (American Standard Code), il s'agit de de données appelées MNT (Modèle Numérique de Terrain).

    Ces fichier peuvent être ouvert aisément avec le logiciel INGMap, fourni par l'IGN mais aussi avec des soft comme QGIS, ou SAGA. Ces softs sont assez complexe à utiliser pour des non spécialistes du sujet de la géomatique. Pas mal d'info sur le sujet sont disponible sont le forum Géorézo.

    Mon but n'étant pas de devenir cartographe, je laisse à ceux qui veulent, le soin d'utiliser ces logiciels.

    Mon besoin est de concevoir une maquette numérique d'un projet de génie civil dans un logiciel de conception comme CATIA V5 ou Sketchup, malheureusement je ne maitrise pas REVIT qui est spécialisé pour ce besoin.

    Sur le site de l'IGN pro on peut télécharger (via filezilla) un MNT correspondant aux découpage des départements. Deux choix de résolution sont possible : des carrées de 5 ou 1 mètre de coté.

    Une fois le MNT reçu, il contient des milliers de fichiers .asc (5700 pour le departement 08 par exemple), chacun d'environ 6Mo.

    Vu la taille, il faut un très bon PC si l'on souhaite afficher un département entier. Pour ceux qui comme moi ne disposent pas de telles machines, je n'ai pas de meilleurs solution que d'ouvrir des portions et de chercher la zone d'intérêt.

    Après une longue recherche, j'ai fini par identifier les 50 fichiers qui couvre la zone (40km2) de mon étude. C'est à ce moment que l'automatisation avec Excel VBA devient indispensable.

    Les fichiers à lire

    Les fichier .asc peuvent être ouvert avec le bloc note ou notepad. Ils sont tous écrit suivant la même organisation :
    Nom : Capture d’écran 2021-04-04 161629.png
Affichages : 990
Taille : 38,0 Ko

    Dans la capture d'écran ci-dessus, on ne voit pas la ligne 8 qui est situé bien plus bas. La ligne 7 représentant 1000 valeurs. Et comme vous l'aurez compris il y'a 1000 lignes.

    L'automatisation à réaliser

    Étape 1 : Il faut que Excel
    - ouvre chaqu'un des 50 fichier .asc, dont le nom est en hexadecimal,
    - lise les 1 million de valeur en y associant la coordonnée X Y qu'il faut calculer en corrigeant le séparateur de décimal de point vers virgule
    étape 2 : il faut créer ces points dans CATIA ou Sketchup
    - créer les points
    - créer une surface à partir de ces points

    L'étape 1 et la création de point me semble être de l'ordre du possible. L'obtention d'une surface à partir de tous ces points en revanche risque d'être impossible. J'ai lu quelque part que Catia avait un atelier capable de faire cette manip, mais il est rare d'avoir cet atelier. De plus il serait préférable de créer les points directement dans sketchup. Encore une fois difficile de passer de catia à Sketchup. Tous les éditeurs choisissent de verrouiller leur format.

    Le code

    Les bouts de code que j'ai commencé à réunir :

    Lire un fichier ligne par ligne

    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
    Sub LireFichierTexteParLigne()
    'par: https://excel-malin.com
     
    Application.ScreenUpdating = False
    On Error GoTo CodeErreur
     
    Dim IndexFichier As Integer
    Dim MonFichier As String
    Dim ContenuLigne As String
     
    MonFichier = "C:\MonDossier\MonFichier.txt" '<-- mettez ici le nom du fichier à lire
    IndexFichier = FreeFile()
    Open MonFichier For Input As #IndexFichier 'ouvre le fichier
     
    While Not EOF(IndexFichier) '
        Line Input #IndexFichier, ContenuLigne     ' lecture du fichier ligne par ligne: la variable "ContenuLigne" contient le contenu de la ligne active
     
        'ajoutez ici votre code à appliquer pour chaque ligne
        '...
     
    Wend
     
    Close #IndexFichier ' ferme le fichier
    Application.ScreenUpdating = True
    Exit Sub
     
    CodeErreur:
    MsgBox "Une erreur s'est produite..."
    Application.ScreenUpdating = True
    End Sub

    Ouvrir les fichiers d'un repertoire

    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
    Sub Macro1()
    Dim BDD As FileDialog 'déclare la variable BDD (Boîte de Dialogue Dossier)
    Dim CA As String 'déclare la variable CA (Chemin d'Accès)
    Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim FS As String 'décalre la variable FS (Fichier Source)
    Dim CS As Workbook 'déclare la variable CS (Classeur Source)
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim DEST As Range 'déclare la variable DEST (celllue de DESTination)
     
    Set CD = ThisWorkbook 'définit la classeur destination CD
    Set OD = CD.Sheets(1) 'définit l'onglet destination OD (à adapter à ton cas, ici j'ai mis le premier onglet)
    FS = Dir(CA & "*.xlsx") 'définit le premier fichier source Excel contenu dans le dossier ayant CA comme chemin d'accès
    Do While FS <> "" ' exécute tant qu'il existe des fichiers source
        Workbooks.Open CA & FS 'ouvre le fichier source FS
        Set CS = ActiveWorkbook 'définit la classeur source CS
        Set OS = CS.Worksheets(1) 'définit l'onglet source OS (à adapter à ton cas, ici j'ai j'ai mis le premier onglet)
     
     
        CS.Close False 'ferme le classeur source CS (sans enregistrer)
        FS = Dir 'définit le prochain fichier source excel du dossier ayant CA comme chemin d'accès
    Loop 'boucle
    End Sub
    Création de points CATIA V5

    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
    Sub CreationPoint()
     
        'Get CATIA
        Dim PtDoc As Object
        Set PtDoc = GetCATIAPartDocument
     
        ' Get the HybridBody
        Dim myHBody As Object
        Set myHBody = PtDoc.Part.HybridBodies.Item("GROUPE N°1")
     
        Dim iLigne As Integer
        Dim iValid As Integer
        Dim X As Double
        Dim Y As Double
        Dim Z As Double
        Dim Point As Object
     
        iLigne = 1
        'Analyze file
        While iValid <> Cst_iEND
            'Read a line
            ChainAnalysis iLigne, X, Y, Z, iValid
            iLigne = iLigne + 1
     
            'Not on a startcurve or endcurve -> valid point
            If (iValid = 0) Then
                Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(X, Y, Z)
     
                .... ??? ...        
     
                myHBody.AppendHybridShape Point
     
            End If
        Wend
     
        'Model update
        PtDoc.Part.Update
    End Sub
    'creation du point
    Set Point = PtDoc.Part.HybridShapeFactory.AddNewPointCoord(x, y, z)
    myHBody.AppendHybridShape Point
    Point.Name = nom
     
     'creation sphere + nom
    Set Sphere = PtDoc.Part.HybridShapeFactory.AddNewSphere(Point, Nothing, R, -90#, 90#, 0#, 360#)
    myHBody.AppendHybridShape Sphere
    Sphere.Name = nom
    Remarque importante

    Si quelqu'un sait comment faire sans passer par l'ecriture d'une macro, évidemment je suis preneur. Mais aujourd'hui j'ai installer pas mal de softs sans réussir à créer un lien entre le monde des topographes et le monde des concepteurs. J'ai testé en prenant le dernier sketchup (trial 30 jours), le dernier Autocad 3D MAX (trial 30 jours).
    C'est à se demander pourquoi l'IGN fournie ce format ? C'est en tout cas vraiment frustrant d'avoir les datas sans pouvoir rien en faire.
    Je précise aussi que Sketchup pro (300$/an) permet d'importer en 2 secondes la topographie de n'importe quelle zone du monde, mais le précision est tellement mauvaise que c'est inexploitable.

    Merci à vous, j'espère trouver une solution à ce problème qui concerne beaucoup de monde

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 448
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 448
    Points : 16 314
    Points
    16 314
    Par défaut
    Bonjour

    Il pourrait être intéressant de tester avec PowerQuery au moins pour la récupération des fichiers (je n'ai pas encore regardé le détail la conversion)

    Peux-tu joindre 2 fichiers txt
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 448
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 448
    Points : 16 314
    Points
    16 314
    Par défaut
    Bonjour

    Il pourrait être intéressant de tester avec PowerQuery (intégré à Excel 2016 et +, en add on sur 2010 et 2013) au moins pour la récupération des fichiers (je n'ai pas encore regardé le détail la conversion)

    Peux-tu joindre 2 fichiers txt
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Candidat au Club Avatar de Leusca
    Homme Profil pro
    Ingénieur d'études conception mécanique
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études conception mécanique

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Je ne connais pas PowerQuery, je vais regarder pour en savoir plus. Merci

    Malheureusement je ne peux pas insérer de fichier .asc en pièce jointe sur le forum : fichier non reconnu.

    J'ai tenté de remplacer l'extention par .txt mais la limite est de 64ko pour les fichiers texte, et le .asc fait 6.4Mo

    Je te propose de télécharger directement un MNT de la Guadeloupe (le moins gros en volume) à cette adresse :
    https://geoservices.ign.fr/documenta...l#rge-alti-1-m

    ou lien direct : ftp://RGE_ALTI_ext:Thae5eerohsei8ve@..._2014-01-15.7z

  5. #5
    Candidat au Club Avatar de Leusca
    Homme Profil pro
    Ingénieur d'études conception mécanique
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études conception mécanique

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    PowerQuery est génial, je pense que ça me servira pour bien plus que ce sujet de topo. Merci

    En cherchant, j'ai trouver une fonction dans le logiciel QGIS (gratuit) qui permet de convertir le fichier .asc en .xyz

    Ça peut rendre le traitement des données d'entrée encore plus simple.
    Exemple avec les premières lignes du fichier .xyz (longitude, latitude, altitude, le tout en mètre).
    Le fichier fait un million de ligne, proche des limites de Excel.

    838000 6960000 150.470001220703125
    838001 6960000 150.490005493164063
    838002 6960000 150.550003051757813
    838003 6960000 150.3800048828125
    838004 6960000 150.3800048828125
    838005 6960000 150.389999389648438
    838006 6960000 150.3800048828125
    838007 6960000 150.410003662109375

  6. #6
    Candidat au Club Avatar de Leusca
    Homme Profil pro
    Ingénieur d'études conception mécanique
    Inscrit en
    Mars 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études conception mécanique

    Informations forums :
    Inscription : Mars 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Solution
    À force de chercher, j'ai fini par trouver la solution à mon problème.

    Dans Sketchup 2017 (gratuit) il faut installer l'extension t4su (toujours gratuit). Une doc online complète expose très bien toutes les possibilités de cette extension. Pour le sujet de ce post, elle permet d'importer des fichiers .asc dans sketchup.
    Nom : t4su.png
Affichages : 903
Taille : 19,7 Ko

    En revanche pour afficher dans Sketchup une zone aussi grande que celle dont j'ai besoin, il me faudrait un ordinateur extrêmement performant (genre le supercalculateur de météoFrance). Donc pour mon projet je change de méthode et je vais plutôt utiliser IGNMAP, ce sera suffisant.
    Nom : zone moulin.png
Affichages : 886
Taille : 63,0 Ko

    Ci dessus un exemple d'importation de MNT. Lors de l'export j'ai volontairement baissé la résolution à 10m car le pc portable que j'ai aujourd'hui n'arrivait pas à charger la même zone (52900m2) avec la résolution maximale 1m.

    Pour ceux qui souhaitent modéliser leur maison sur un terrain de 1000 à 2000m2 ça ne devrait pas poser de problème.
    Un géomètre vous demandera 2000 à 3000 euros pour vous fournir un plan beaucoup moins précis que ça.

Discussions similaires

  1. [C#][Vs2005] utilisation des fichiers resx
    Par camilero dans le forum Windows Forms
    Réponses: 12
    Dernier message: 13/04/2006, 14h43
  2. Est-il possible d'utiliser des fichiers xsl en cascade ?
    Par Faekk dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/08/2005, 12h34
  3. Copie de 2 bases SQLserver en utilisant des fichiers
    Par dimdidi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 17/08/2005, 09h26
  4. [NASM] Utiliser des fichiers ressources
    Par trax44 dans le forum Assembleur
    Réponses: 8
    Dernier message: 26/09/2004, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo