Comment programmer un calcul de surface ?
Résoluccm81 Messages postés 11033 Statut Membre -
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 ;-)
- Tableau excel calcul 1/120
- Tableau word - Guide
- Trier un tableau excel - Guide
- Alcohol 120 - Télécharger - Émulation & Virtualisation
- Imprimer un tableau excel - Guide
- Liste déroulante excel - Guide
120 réponses
Calculer et vérifier la surface de polygones à partir de listings de points X et Y fournis dans des fichiers texte, avec import direct et ordre des points déterminant le périmètre.
Pour cela, il est recommandé de fermer le polygone en répétant le point initial et d’utiliser une méthode robuste comme l’algorithme du shoelace qui donne l’aire absolue quelle que soit l’orientation.
Une solution pratique avancée est une fonction VBA AirePoly qui prend des plages X et Y, ferme le polygone en ajoutant le premier point à la fin, puis calcule l’aire via la somme croisée et renvoie le résultat positif.
Des échanges portent également sur l’importation du fichier txt (et non un collage), l’optimisation de l’interface et l’ajout d’une colonne « N° d’Ordre » pour tracer l’ordre des points, avec des outils pour éviter les retours en arrière.
Enfin, des conseils soulignent l’importance de prévenir les arêtes croisées et d’assurer des coordonnées cohérentes afin d’éviter des résultats incohérents.
2. j'ai fait le ménage dans la feuille Listing
https://www.cjoint.com/?3IAjuiXC9js
3. en ce qui concerne la liste des dossiers DA sous 97, peux tu m'envoyer une copie d'écran de l'arborescence des dossiers
bonne journée
Salut,
Avec 2010 TOUT MARCHE A MERVEILLE :-)
Il reste juste quelques petits détails d'ergonomie, mais à première vue tout fonctionne très bien.
1. "Saisie manuelle des données" devrait également vider J5, J7 et J9
2. Le message "erreur" pour la saisie manuelle des coordonnées (cas d'une double entrée) fonctionne super. Pourrait-il être un peu plus explicite, du style "Le point N° xxx a déjà été saisi !"
3. "RAZ" devrait activer la cellule A2 de l'onglet "Listing NXY"
4. "Fin de saisie manuelle" devrait renvoyer en B3 de l'onglet saisie
5. Le choix d'un nouveau sous-dossier DA devrait lancer "Nouvelle Sélection" et "RAZ"
6. L'étiquette du premier N° Point n'est pas bonne
Cf. https://www.cjoint.com/?BIAkQw6Hcou
7. Serait-il possible qu'une saisie dans la cellule B3 de l'onglet "Saisie" active la cellule A8 pour inviter directement l'opérateur à la saisie ?
Je teste avec 97 et je te dis :-)
pour 5 j'ai étendu la modif à toutes les cellules
6- je n'ai pas l'erreur chez moi
https://www.cjoint.com/?3IAl7PZAxbx
pour 97, et la saga des dossiers DA tu tentes de les mettre à la main dans la liste
bonne suite
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe suis sur le coup "point d'arrêt". Je suis en train d'effectuer le pas à pas et de mettre en commentaire les différentes valeurs. Je te transmets le fichier dès que j'ai fini les boucles :-)
https://www.cjoint.com/?BIAmRR3ZUsb
RQ : si j'avais su j'aurai mis moins de sous-dossiers dans le répertoire 2012 09 19 :-)
l'arborescence est celle données précédemment, mais au cas où :
https://www.cjoint.com/?BIAmTGLANgC
A la fin de mon test en pas à pas, j'ai remarqué que la liste s'était incrémentée dans la colonne K (alors qu'en automatique ça ne marche pas ... bizarre !!!), mais quand j'ai sélectionné un sous-dossier DA, c'est la liste des fichiers qui était cette fois inactive (rien dans colonne I de l'onglet "Listing NXY")
RQ : j'ai vu que la liste des sous-dossiers DA qui s'est créée par "miracle" après le pas à pas, n'était pas triée, ça peut jouer pour la suite ??? Et au passage, y-a-t-il un moyen de la trier (plus esthétique pour la sélection)
J'ai relancé le fichier.
A nouveau, même pb avec sous-dossiers DA (normal).
J'ai copié les noms manuellement dans la colonne K, les sous-dossiers sont alors bien dans la liste J7 de l'onglet "Saisie" (selon tes conseils du post #132), MAIS <gras>la liste des fichiers ne se crée pas</gras> :-(
J'ai alors copié les noms des fichiers manuellement dans la colonne I de l'onglet "Listing NXY", la liste des fichiers apparaît donc dans la liste J9 de l'onglet "Saisie".
Je lance l'importation du fichier : OUF !! TOUT MARCHE ensuite comme sur des roulettes :-)
Je teste ton nouveau fichier cet aprem (post #132) pour les corrections 1-2-3-4-5-7, pour 6. c'est effectivement très surprenant, mais il me semble que j'ai toujours eu le problème ....
@ cet aprem si t'es dispo :-)
MERCI
peut être faut il se placer dans la feuille listing avant de faire la liste
j'ai rajouté ça dans les procédures Lister---
' on se place dans la feuille Listing Sheets(nomFL).Select
2. pour ce qui est de ton pb d'étiquettes, dans ton envoi, avec la feuille saisie vide, il y a une étiquette dans le point (552), ce qui n'est pas normal
quand tu fais Nouvelle Sélection, le point doit se "vider"
https://www.cjoint.com/?3IAnOM3BFB9
https://www.cjoint.com/?BIAn3tJhsvV
Je teste ton nouvel envoi
@ tout à l'heure ;-)
Quand je mets "D:\Test" en J3, je suis renvoyé sur l'onglet "Listing NXY" et je vois que la liste des "sous-dossiers dates" s'est bien créée.
Je retourne dans l'onglet "Saisie" et je sélectionne 2012 09 19, là, pas de renvoie comme ci-dessus, je vais voir ce qu'il se passe dans "Listing NXY" et je vois que la liste des "sous-dossiers DA" ne s'est pas créé :-(
Cf. https://www.cjoint.com/?BIAoicNhV89
1. Mais, en plus, j'ai remarqué (après avoir correctement importé un fichier de données avec remplissage manuel des colonne I et K et effectué un calcul) que si je clic en J9 pour choisir un autre fichier : Excel plante :-(
2. Petit détails, il serait agréable d'avoir un petit message (du même style que quand on saisie un point qui n'est pas dans le listing) quand on saisie 2 fois un même n° de point
on recommence la vérification pas à pas avec le point d'arret dans
Public Sub Lister_SousDossier_DA()
sur l'instruction
Sheets(nomFL).Select
pas la peine ne noter, tu vois si ça correspond
normalement quand tu lances en validant une date dans la feuille Saisie
- tu te retrouves sur le point d'arret
-F8 tu dois te retrouver dans la feuille Listing
- tu reviens éventuellement dans le code
- tu déroules avec F8
les deux premiers nf sont '..' et '.' et li ne bouge pas
ensuite
nf prend les noms des dossiers DA et li augmente
et ..... la colonne K devrait se remplir gentiment !
2. pour on erreur à la 2° importation as tu essayé de ressaisir le même fichier (au cas où erreur de frappe sur le nom ..)
Je te renvoie ton dernier fichier sans faire de saisie manuelle. Il faudrait peut-être que tu créé la même arborescence que moi
fichier : https://www.cjoint.com/?BIAo3dNDzxo
les données : Données 1.txt ; Données 1bis.txt ; Données 2.txt ; Plan.txt ; Plan2.txt
sont dans le sous-dossier : 189 DA 123
qui lui est contenu dans le sous-dossier 2012 09 19
qui se trouve dans D:\Test
2. En fait dès que je clic sur la cellule, ça plante, je n'ai pas le temps de choisir . Je viens également de faire un test sur un micro portable (également sous 97, mais avec un chemin d'accès aux données différent)
Toujours le même problème évidemment, mais cette fois l'import ne marche pas, quand je clic sur "importer le fichier des données", j'ai le message :
"le point n° 0 a déjà été saisi"
et excel plante (je ne peux plus cliquer nulle part :-)
J'arrive alors dans Public Sub Lister_DossiersDate() que l'on passe rapidement (rien de bizarre à signaler mais je sais pas trop ce que je cherche ...)
j'arrive sur Private Sub Worksheet_Change(ByVal Target As Range) et là par contre il me semble qu'il y a un truc suspect, à voir :
https://www.cjoint.com/?BIApIYJ5EfP
suis ensuite renvoyé sur
Sheets(nomFS).Range(csdosDA).ClearContents où j'ai l'impression que l'on nettoie la colonne des DA ce qui pourrait expliquer qu'au final la liste soit vide non ?
Après, j'ai l'impression qu'il y a beaucoup de nettoyage, mais les variables qui concernent les nom de sous-dossiers DA ou les noms de fichier n-y sont plus.
Je ne sais pas si tu arriveras à comprendre le soucis car je passe peut-être à côté de choses importantes :-(
Je dois filer,
Merci et à bientôt
dans ton post #134 fichier cs-id07-retour.xls
A la fin de mon test en pas à pas, j'ai remarqué que la liste s'était incrémentée dans la colonne K (alors qu'en automatique ça ne marche pas ... bizarre !!!)
tu as bien vu passer la liste des dossiers DA et les bons numéros de lignes (li = 2, 3 ...) de la colonne K
il était normal que le choix d'un de ces dossiers DA ne produise pas la liste des txt
il aurait fallu aussi l'exécuter pas a pas avec un point d'arret dansz la procedure lister_fichiers pour l'obtenir
je pense qu'il y a un pb au niveau de l'accès à la feuille Listing
on revient sur la version 08.xls
dans les deux procedures Lister_DossierDA et Lister_fichiers
tu mets un point d'arret devnat repertoire =
tu effaces à la main les données de la feuille Listing
feuille saisie - dossier de travail - ici ça marchait bien pour la liste des dates (tu controles)
feuille saisie - dossier date - çà lance le pas a pas - tu vérifies les nf et les li jusqu'au bout
tu vois si la liste des DA est affichée dans la feuille Listing comme #134
feuille saisie - dossier DA - idem pour les fichiers txt
si tout va bien
feuille saisie - la liste des txt est elle proposée
si oui tu tentes une choix-puis une importation
tu dis
RQ. on est en train d'exploser le nombre de réponses
on va continuer avec les messages personnels (en haut à droite à coté de ton identifiant)