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 :

Calculer la surface d'une shape sur Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Par défaut Calculer la surface d'une shape sur Excel
    Bonjour,
    J'ai dessiné un polygone sur excel et je souhaiterais calculer sa surface. Avez-vous une idée du mode opératoire ?
    Merci de vos idées.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Excel (ou VBA) ne sait pas le faire seul. Ce n'est pas une CAO.

    VBA te permet de connaitre les points de ton polygone grâce à la propriété Nodes.
    Ensuite, c'est une question de mathématiques.

  3. #3
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut
    bonjour,

    Par curiosité je viens de chercher les coordonnées des sommets (nodes) d'un polygone, cela peut te servir à calculer la surface ...

    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
    Sub essai()
    Dim p As Shape
    Dim nodes As ShapeNodes
     
    For Each p In Feuil1.Shapes
     
    If p.Type = msoFreeform Then Set nodes = p.nodes
    Range("A1") = p.Name
    For i = 1 To nodes.Count 'sommet 1 = sommet 6 (polygone 5 côtés)
        Cells(i + 1, 1) = "Sommet " & Str(i)
        Cells(i + 1, 2) = nodes(i).Points(1, 1)
        Cells(i + 1, 3) = nodes(i).Points(1, 2)
    Next i
    Next p
    End Sub
    Nom : poly.jpg
Affichages : 4691
Taille : 36,2 Ko

    mais après il faut calculer la surface!! ...

    cordialement

    geogeo

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    polygone convexe/concave ?

    ça ne sera pas la même méthode je pense suivant le cas.
    il faudra probablement découper la shape en triangles et additionner les surfaces

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu imagine un carré qui couvre le polygone, tu imbriquer deux boucle qui parcours en x,y la surface du carré avec un pas significatif. Le point du carré testé est ou n'est pas dans le polygone alors tu additionne du pas si il est st dedans!

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132

  7. #7
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Moi, quand je lis tout cela, je me dis que sans boule de cristal, c'est impossible de répondre. Cela veut dire quoi l'aire d'un polygone dans la tête du demandeur ?

    Une aire en pixels sur l'écran ?
    Une aire en centimètres carrés, en espérant obtenir la même chose à l'impression ? De toutes façons c'est pratiquement impossible d'avoir une correspondance absolue. Cela dépend de trop de facteurs, incluant les résolutions de l'écran et de l'imprimante.
    Une aire à l'échelle d'une aire réelle, Dieu sait où ?
    Et puis, même s'il trouve les sommets de son polygone, cela ne sert absolument à rien. Tout ce qu'il va obtenir ce sont des longueurs de traits, en pixels peut-être, ou en twips ou en points, je ne sais plus trop. S'il n'a aucune idée à quoi correspond sa longueur transposée en unité de mesure connue, cela ne sert à rien de perdre du temps là-dessus.

    C'est une autre histoire de vouloir faire installer une prothèse de la hanche par un microbiologiste.

    Il me semble avoir déjà vu quelque part une sorte d'Autocad en logiciel libre.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui trouver un algorithme pour modéliser des figure géométriques bonjour.
    La solution que j'ai proposé n'est qu'un palliatif pour toutes les raisons que tu évoque.

    AutoCad par exemple lui a une propriété qui retour la surface d'un polygone!

    Moi j'utilise AutoCAD tous les jours mais je pense que visio le fait, sens pour autant être gratuit il existe dans beaucoup de société et il est relativement facile à ce procurer!

    Autodesk il y a déjà quelques temps avait publié une version ultra lite d'AutoCAD gratuit.
    Dernière modification par Invité ; 09/03/2016 à 22h34.

  9. #9
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Re, les unités n'ont aucune importance, pour info : un exe autonome sorti des décombres ( Delphi7 )
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  10. #10
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut
    Bonsoir,

    J'ai poursuivi mon calcul, je vois que vous avez des idées, moi j'ai utilisé la sommes des aires des trapèzes (projection des côtés sur l'axe des abscisses) ce qui donne :
    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
    Sub essai()
     
    Dim Nodes As ShapeNodes
    Dim Points(10, 1) As Double
    Dim i As Integer
    Dim Aire As Double
     
    ' recherche des sommets
    Set Nodes = Shapes("poly").Nodes
     
    Range("A1") = "poly"
    'Affichage des "coordonnées"
    For i = 1 To Nodes.Count
        Cells(i + 1, 1) = "Sommet " & Str(i)
        Cells(i + 1, 2) = Nodes(i).Points(1, 1) 'Abscisse
        Cells(i + 1, 3) = Nodes(i).Points(1, 2) 'Ordonnée
    Next i
     
    'Mise en tableau des coordonnées
    For i = 1 To Nodes.Count
        Points(i - 1, 0) = Nodes(i).Points(1, 1)
        Points(i - 1, 1) = Nodes(i).Points(1, 2)
    Next i
     
    'additions des aires des trapèzes sur chaque vecteur
    Aire = 0 '(Grande base+Petite base)*hauteur/2 !!!
    For i = 0 To Nodes.Count - 2
        Aire = Aire + (Points(i + 1, 0) - Points(i, 0)) * (Points(i + 1, 1) + Points(i, 1)) / 2
    Next i
    'les trapèzes blancs sont en moins
    Range("K10") = Aire
    End Sub
    Nom : poly2.jpg
Affichages : 5060
Taille : 73,0 Ko

    Cordialement

    geogeo

  11. #11
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut
    une petite dernière en créant une fonction appelée sur feuille : airepoly(nom_du_poly),

    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
    Function Airepoly(ByVal nom As String) As Double
     
    Dim Nodes As ShapeNodes
    Dim Points() As Double
    Dim i As Integer
     
    Application.Volatile
    If Not (ActiveSheet.Shapes(nom) Is Nothing) Then
        Set Nodes = ActiveSheet.Shapes(nom).Nodes
        ReDim Points(Nodes.Count, 1)
        'Mise en tableau des coordonnées
        For i = 1 To Nodes.Count
            Points(i - 1, 0) = Nodes(i).Points(1, 1)
            Points(i - 1, 1) = Nodes(i).Points(1, 2)
        Next i
        'additions des aires des trapèzes sur chaque vecteur
        Airepoly = 0 '(Grande base+Petite base)*hauteur/2 !!!
        For i = 0 To Nodes.Count - 2
            Airepoly = Airepoly + (Points(i + 1, 0) - Points(i, 0)) * (Points(i + 1, 1) + Points(i, 1)) / 2
        Next i
        Airepoly = Abs(Airepoly)
    Else
        Airepoly = 0
    End If
    'la feuille n'est pas recalculée lors d'un changement de la forme
    'donc F9 pour recalculer
    End Function
    bonsoir
    cordialement
    geogeo

  12. #12
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2019
    Messages : 1
    Par défaut Divers
    Bonjour,
    Je patine un peu, avez-vous avez le ficher excel complet.
    Merci d'avance

Discussions similaires

  1. Forcé l'ouverture d'une feuille sur Excel
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2006, 15h41
  2. VB6 - Definir le format d une cellule sur Excel
    Par Zaal dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/07/2006, 14h22
  3. Réponses: 2
    Dernier message: 19/05/2006, 18h42
  4. [VBA-E]Filtre via une macro sur Excel
    Par jamal.b dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/04/2006, 15h35
  5. Sortie d'une facture sur excel
    Par ShortcutZ dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/01/2006, 17h07

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