Comment programmer un calcul de surface ? [Résolu/Fermé]

Signaler
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015
-
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
-
Bonjour à toutes et à tous,

Autant préciser tout de suite que je ne connais pas trop Excel (j'utilise la version 97) et encore moins Open Office] (j'utilise la version 3.3), mais j'ai un problème récurent que je souhaiterai éliminer, alors je lance une bouteille sur le net :-)

Voilà mon soucis :

Je reçois régulièrement des listings de coordonnées au format "nxy.txt" (où n est un numéro de point, x et y ses coordonnées cartésiennes) le tout avec un séparateur "espace".
Mon problème est de calculer la surface de polygones à partir de ces fichiers (en s'appuyant sur une documentation papier précisant la liste des points formants les différents polygones à calculer). Il s'agit en fait d'une vérification de calculs topométriques.

J'ai trouvé une formule permettant de faire le calcul sur un forum :

"c'est facile : soit un polygone de n points (le dernier a les mêmes
coordonnées que le premier, sinon, on ajoute le premier point à la liste)

soit X[1] et Y[1] les coordonnées du premier point et n le nombre de
points (donc X[n] = X[1] et Y[n] = Y[1])

la surface est la valeur absolue (le signe du résultat dépend du sens de
parcours du polygone) de la somme pour i variant de 1 à n de
( X[i+1] - X[i] ) * ( (Y[i] + Y[i+1] - 2*Y[1] ) / 2

Bref, c'est plus long à expliquer qu'à programmer..."


J'ai alors essayé de jouer aux apprentis programmeur sur Excel, et comme l'avais si bien souligné mon interlocuteur, bien plus facile à dire qu'à faire :-(

J'aimerai vous transmettre ma modeste ébauche pour voir s'il serait possible d'améliorer cet essai :-)
Malheureusement, je ne sais pas comment il faut faire :-(

je souhaiterai :

1) Que l'on vérifie que mes calculs sont corrects, le plus souvent tout se passe bien, mais parfois je trouve des résultats bizarres (je suis alors obligé d'utiliser un logiciel de Dessin Assisté par Ordinateur, relier tous ces points dans le bon ordre, puis de demander un calcul de surface. Le résultat confirme souvent mon intuition à savoir que mon fichier excel déconne, du coup je ne suis jamais vraiment sûr de mon coup)

2) Remplir directement le tableau en sélectionnant le fichier ".txt" (et non : l'ouvrir dans excel puis copier et coller les valeurs dans mon tableau). Ce qui au passage résoudrait les problèmes liés à la taille de mon tableau (j'ai prévu 200 lignes pour être tranquille, mais parfois les listings de points sont très long et je dois faire une sélection en amont)

3) Le calcul nécessite de désigner l'ordre d'apparition des points (le parcours du périmètre du polygone). J'ai donc prévu à cet effet une colonne "N° d'Ordre".
Y-a-t'il une possibilité de remplir cette colonne à la souris ? En prévoyant un retour au point précédent en cas d'un clic hasardeux (très ennuyeux de tout recommencer quand on en est au 98ième point ....)

Voilà, par avance merci à tous d'avoir lu ce message, merci à ceux qui pourront m'aider et j'espère à très bientôt ;-)






120 réponses

Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
une version corrigée de quelques bugs et réorganisée (je me suis permis de ...) mais qui ne règle pas le problème de l'importation des données
si c'est la boite de dialogue qui ne passe pas, on pourrait envisager de donner le nom du fichier source en F6, l'importation se ferait alors depuis ce nom là

https://www.cjoint.com/?3InkWYid7h0
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
bonjour à tous

une fonction trouvée ici https://en.wikipedia.org/wiki/Polygon#Properties
une exemple https://www.cjoint.com/?0IlsylqZg2V

RQ. le polygone ne doit pas avoir d'arêtes qui se croisent

bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

Merci pour ta réponse, je ne connaissais pas cette façon de calculer l'aire du Polygone.
L'exemple est super, surtout avec "en cerise sur le gâteau" le graphe (ça c'est vraiment trop Top).
Par contre je ne suis pas sûr de pouvoir adapter cette solution a mon fichier. Comme je disais en préambule je suis vraiment novice : les macros ont été réalisées à la souris après avoir minutieusement repéré les actions à accomplir.

Mon problème d'insertion des données automatiquement à partir d'un fichier ".txt" reste entier.

Je ne suis pas sûr que l'on puisse avoir 300 points dans la colonne et n'en prendre que 75 pour calculer la surface (je vais faire un test).

En tout cas merci pour ton aide, tu m'as donné une nouvelle piste à exploiter .... Mais si tu peux m'aider au niveau de la programmation de ce bazar ça serait vraiment cool ...

@+
Messages postés
2966
Date d'inscription
mardi 20 janvier 2009
Statut
Contributeur
Dernière intervention
20 décembre 2016
859
Salut le forum

Pastinfleur, pour joindre un fichier, tu envois ton fichier
(sans données confidentielles) sur https://www.cjoint.com/ ,
et tu recopies le lien obtenu à ton prochain message.

Mytå
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

OK, merci pour l'info, je poste ça rapidement ;-)

Tu pourrais m'aider ?????
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Re bonjour,

Voici :

le lien concernant mon ébauche :
https://www.cjoint.com/?BIlq7JgSK2J

le lien concernant les données :
https://www.cjoint.com/?BIlrcitLhZJ

le lien donnant un exemple des résultats à obtenir :
https://www.cjoint.com/?BIlrddKkm1L

Je reste dispo pour plus d'infos

@ bientôt et merci encore
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

La fonction (macro) AirePolygone(X,Y) suppose que les plages de coordonnées se terminent par le 1° point (pour fermer le polygone)


Je ne suis pas sûr que l'on puisse avoir 300 points dans la colonne et n'en prendre que 75 pour calculer la surface

dans ce cas voir la fonction suivante

Public Function AirePoly(X As Range, Y As Range) 
Dim k As Long, a As Double, n As Long 
Dim tx, ty 
' nombre de points 
n = X.Rows.Count 
' dimension des tableaux de coordonnées 
ReDim tx(1 To n + 1) 
ReDim ty(1 To n + 1) 
' remplissage tx et ty 
For k = 1 To n 
  tx(k) = X(k) 
  ty(k) = Y(k) 
Next k 
tx(n + 1) = X(1) 
ty(n + 1) = Y(1) 
' calcul de l'aire 
a = 0 
For k = 1 To n 
  a = a + (tx(k) * ty(k + 1) - tx(k + 1) * ty(k)) 
Next k 
AirePoly = 0.5 * Abs(a) 
End Function


RQ. Attention, le polygone ne doit toujours pas avoir de côtés qui se croisent
bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

Merci pour tout, je fais un test et je te tiens au courant
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
un essai sur tes données

https://www.cjoint.com/?3ImkKAkl2bQ

bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

Je suis désolé mais la macro ne marche pas chez moi :-(
Peut être à cause de ma version d'Excel (97) ?
En tous cas c'est vraiment sympa d'avoir essayé ...

Je joint un fichier copie d'écran du message d'erreur : https://www.cjoint.com/?BInjXfpwsIQ

Merci encore
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

2) Remplir directement le tableau en sélectionnant le fichier ".txt" (et non : l'ouvrir dans excel puis copier et coller les valeurs dans mon tableau).
https://www.cjoint.com/?3ImmgkGArgG

3) Le calcul nécessite de désigner l'ordre d'apparition des points (le parcours du périmètre du polygone). J'ai donc prévu à cet effet une colonne "N° d'Ordre".
Y-a-t'il une possibilité de remplir cette colonne à la souris ? En prévoyant un retour au point précédent en cas d'un clic hasardeux (très ennuyeux de tout recommencer quand on en est au 98ième point ....)

je ne comprends pas bien comment tu compte t'y prendre

bonne suite
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

un début de réponse à la dernière question
https://www.cjoint.com/?3ImpOGj4KnO

bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Merci, Merci

Je vais tester ça tout de suite, mais je crois que c'est exactement ce que je voulais ...
Je te tiens au courant
@ bientôt
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Désolé, mais toujours le même problème d'erreur de compilation, pour le bouton "Import".
En revanche la sélection à la souris, c'est super top ....

Rem : merci pour l'astuce concernant la création de boutons :-)
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

J'ai bien avancé sur le projet suite à tes conseils. Il ne reste plus qu'un petit soucis à régler ;-)
Grâce à ton premier message j'ai fais un peu changé la philosophie de mon fichier. A présent j'effectue le calcul à partir des données qui sont contenues dans un onglet dédié. En inscrivant simplement les N° de points dans l'onglet de saisie

Mon seul soucis reste l'import des données dans cet onglet ...

J'aimerai créer un petit bouton import en lui associant une macro qui ferait une importation dans mon onglet "Listing NXY" (préalablement nettoyé) avec dans la colonne A les numéros de points, dans les colonne B et C les coordonnées des points.

En bref, un peu la même chose qu'hier, mais certainement beaucoup plus simple ;-)

Le plus souvent les fichiers de données ont un séparateur "espace", mais j'aimerais ne pas être bloqué à ce niveau si le séparateur est ";" ou "tabulation".

Je joint mon nouveau fichier, si tu peux y jeter un coup d'oeil ....j'ai mis un onglet expliquant comment je fais sans ton aide :-)

https://www.cjoint.com/?BInrhImxY4t


En tout cas merci beaucoup pour ton aide, sans toi j'en serai encore au boulier :-)

@+
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
pour la fonction split, on peut s'arranger autrement
quelle est l'erreur sur le bouton import (je crains que ce soit sur l'objet OpenDialog, là il faudra oublier la boite de dialogue et donner le nom du fichier "à la main" )
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

après quelques recherches sur le forum (merci eric, patrice, michel), cette version devrait être supportée par 97
si ça fonctionne il faudra faire un brin de ménage dans le code (j'ai tout gardé)

https://www.cjoint.com/?3InqKPcl3ho

bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Aïe,

Dès l'ouverture du fichier dans excel, j'ai un nouveau message d'erreur de compilation TypaActive X non généré dans Visual Basic

Cf copie écran ci-joint : https://www.cjoint.com/?BInsnkGKRH2

Ca sent le gaz non ???? :-(

As-tu regardé mon nouveau fichier ???

Ca sera peut être plus facile avec ce 2ième essaie
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

1. j'ai reprogrammé la fonction split qui devrait passer avec excel 97
https://www.cjoint.com/?3InvlXfJiwV
j'ai profité du voyage pour faire le grand ménage dans le code

2. j'ai vu ton fichier modifié
si je comprends bien tes questions "Comment je fais" toutes les manips se font "à la main" et il n'y a plus grand chose à programmer si ce n'est le nettoyage des feuilles avant nouvelle session, et la maj des échelles du graphique

3. au fait, tu as mis un mot de passe sur la feuille Table que je ne peux pas supprimer, peux tu me donner ce mdp

bonne soirée
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

le mdp : c'est ma bière préférée "heineken" ;-)
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
re

un début
https://www.cjoint.com/?3IokQjujWd3

bonne suite
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

Tu as bien compris la nouvelle philosophie du fichier :-)
En fait je souhaite automatiser les tâches 1), 2), 3) et 5)
En plus, je viens de remarquer qu'après avoir importé les données dans l'onglet "Listing NXY", il faut que je fasse un tri par rapport à la première colonne, sinon la fonction recherche plante .... Mais ça, je crois que c'est de mon domaine de compétence ;-)

J'ai remarqué que dans ta modif, tu à mis les numéros de points sur le graphe, mais il sont numéroté 1, 2, 3, ... Serait-il possible de donner les n° des points ?

En tout cas, ça prend forme et je t'en remercie.

@ bientôt
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Re coucou,

En fait, je crois que cette solution est plus proche de mon désir final ;-)
Mon premier essai était une ébauche sympa, mais tu m'as ouvert les yeux sur un nouveau type de calcul (Merci)
Mon soucis, à présent, est de finaliser ce nouveau projet en arrivant à créer une macro associée à un bouton "import de données" ....
Apparemment les test d'import ne fonctionne pas à cause de fonctions non reconnues par excel 97, mais c'est la seule version utilisée au boulot :-(

Merci encore pour ton aide, je garde sous le coude ta macro pour l'incrémentation à la souris qui devrait me servir sur un autre projet. J'espère simplement arriver à déplacer le tout dans un nouveau fichier. Un simple copier/coller suffira-t-il???

@ très bientôt
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
pour l'importation
as tu essayé (correctement) le fichier du post #20

1- tes fichiers ont tous un début de nom générique à modifier dans le code
Const DebNomFic = "calcul_surface_nxy"

2- tu dois mettre en G3 le nom du dossier où se trouvent tes fichiers .txt
(sans le \ à la fin)
cellule nommée nomdossier

3- si oui, est ce que dans la feuille Table1, la liste des fichiers apparait en M2:Mxx
cette liste a été nommée ListeFichiers

4- si oui en F5 (feuille Surface) cellule nommée nomfichiervois tu la liste déroulante de ces fichiers

5- si oui, sur quelle ligne du code ça plate ?
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Salut,

Tout se passe bien jusqu'à l'étape 4
Par contre, pour le test j'ai mis simplement 3 fichiers dans un dossier dédié qui se situe sur le disque C et j'ai une liste déroulante avec 4 fichiers nommés "D:\calcul_surface_nxy-01.txt" ; "D:\calcul_surface_nxy-02.txt" ; "D:\calcul_surface_nxy-03.txt " et "D:\calcul_surface_nxy-04.txt" ????
Du coup quand je clique sur importer les données, ça bugge

J'ai mis les 3 fichiers à la racine de D; mais toujours le même bug

Ci-joint les copies d'écran du plantage :

https://www.cjoint.com/?BIpnrFTJc79
https://www.cjoint.com/?BIpnr3daWwP

Merci pour tous tes efforts. Je suis vraiment perdu depuis bien longtemps, mais j'essaie de m'accrocher :-)

@ bientôt
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

J'ai oublié de te dire une chose importante : le nom du fichier n'est pas générique. :-(
Le format est quasiment toujours le même, le séparateur est "espace" à 95%, mais le nom change tout le temps
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Le dossier change également tout le temps, souvent au nom de l'opérateur.
Le fichier change également tout le temps, le plus souvent nommé en fonction de la date à laquelle l'opérateur a réalisé son travail .

Au final, je reçois par mails des trucs du style :
dossier "TOTO"
fichier "20120516.txt"

Donc, il faudrait que le bouton "import de données" ouvre une fenêtre dans laquelle il serait possible de "parcourir" ... Sinon, si je dois couper les fichiers, les renommer ....etc, autant effectuer l'opération manuelle décrite dans l'onglet "comment je fais".

Je suis désolé si j'en demande beaucoup, il se peut que cette fonction ne soit pas réalisable dans excel 97, en tout cas je ne voudrais pas abuser de ta patience, je comprendrai très bien que tu laisse tomber :-(

En tout cas, si tu décide de poursuivre tes efforts, il vaut mieux se focaliser sur le deuxième projet, car j'ai vraiment très peur d'une chose : que tu réussisses à finaliser le projet et qu'ensuite je sois incapable de le transposer dans le nouveau fichier :-(
Pour mémoire je suis vraiment très nul en excel, mais ça, tu l'a certainement déjà remarqué :-)
Enfin, tu pourras certainement le faire en 2 clics de souris ... Désolé, mais je stresse à mort
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
1. la fonction Replace semble inconnue de vba 97, je l'ai ré-écrite
2. comment sont nommés tes fichiers texte, donnes moi un exemple
3. s'ils n'ont pas les mêmes noms que les miens (ceux que tu as dans Table1), il y a un pb quelque part, donc on va faire un essai
3.1. tu mets tes fichiers dans C:\ (la racine de C)
3.2 dans G3 (feuille surface) tu mets C:
dans la feuille Table1, si le reste du code passe, tu dois voir la liste de TES fichiers texte
4. si oui, en F5 tu dois les voir dans la liste de choix
si oui Importer un des fichiers de la liste déroulante
5. tu me racontes

https://www.cjoint.com/?3IpqAwxZxMV

RQ. il faut trouver jusqu'où descendre pour se mettre au niveau d'excel 97 !!
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Désolé, j'ai fais "répondre" au lieu d'ajouter un commentaire
Tu vois, même sur les forums j'ai du mal ;-)

https://www.cjoint.com/?BIprjc0BBjU
https://www.cjoint.com/?BIprjzajHEG
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Toujours le même pb

https://www.cjoint.com/?BIpq5XCnXEq

Mais je crois que tu a laissé la fonction "replace"

Par contre, ça avance : maintenant, j'ai la bonne liste, par contre, j'ai l'impression que la liste s'incrémente. J'ai fait un test avec les fichiers déposés dans différents dossiers, placés dans C ou D. Dans la liste, j'ai tous les chemins qui apparaissent, ceux sur C + ceux sur D.
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
1. il vaut mieux faire répondre, comme ça on a les messages dans l'ordre chronologique
2. un bug corrigé
3. nettoyage de l'ancienne liste
https://www.cjoint.com/?3IpsEN3e4WK

tu racontes comment se passe (la tentative) l'importation
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Super, ça marche :-)
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
tu as bien importé le fichier?

bon, maintenant il va falloir implanter l'importation dans ta version à toi.

une question à laquelle tu n'as pas répondu (post #25)
1- tes fichiers ont ils tous un début de nom générique ?
si oui, on peut n'afficher que ces fichiers là dans la liste (ça revient à faire un filtre sur le nom)
exemple chez moi tous les fichiers étaient nommés
calcul_surface_nxy suivi d'un numéro suivi de .txt
ce n'est pas une obligation
Messages postés
132
Date d'inscription
jeudi 9 février 2012
Statut
Membre
Dernière intervention
11 mars 2015

Par contre,
quand je fais la sélection à la souris j'ai ce message :

https://www.cjoint.com/?BIpsRXMOXGk

Je clic sur et l'incrémentation se poursuit, le calcul se fait correctement, bref c'est Top.
Messages postés
9703
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 avril 2021
2 081
il faudrait cliquer du deboguer et me montrer la ligne de code qui coince