Author Topic: VBA- Lezione 2 - Come far interagire foglio-codice  (Read 32144 times)

0 Members and 1 Guest are viewing this topic.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
VBA- Lezione 2 - Come far interagire foglio-codice
« on: 30 April , 2012, 22:41:23 PM »
In questo secondo esempio mi propongo di mostrare come fare interagire un codice con un foglio strutturato in un ben determinato modo.

Posizione del problema:

sia data una palificata composta da "np" pali di diametro "dp" i cui centri sono posizionati nei punti di coordinate (Xpi; Ypi).
Fissiamo come numero massimo 20 pali.
I pali siano collegati in testa da un plinto sufficientemente rigido da poter considerare i pali vincolati alla rotazione nella loro sezione di testa.
Il peso del plinto dovrà essere determinato dall'utente e sommato col coefficiente di combinazione adeguato al sistema di azioni agenti allestradosso del plinto (oltre ai momenti di trasporto nel baricentro della palificata). Sia quindi dato lo spessore del plinto "Hpl" necessario per il trasporto dei tagli sul piano di testa pali.

Sia quindi dato un sistema di carichi derivanti da una combo che denominiamo "nCombo" costituito dalla sei componenti Tx, Ty, Tz, Mx, My, Mz affetti dai coefficienti di combinazione della combo in esame e che tengono conto del peso del plinto e degli eventuali momenti di trasporto del peso del plinto dal baricentro del plinto al baricentro della palificata.

Il sistema di riferimento xyz è tale che xy determina il piano orizzontale mentre z è verticale positivo verso l'alto. Il sistema sia levogiro.

Ci proponiamo:
- strutturare un semplice foglio di calcolo che esegua la distribuzione dei carichi sui pali di fondazione
- costruire una tabella delle combinazioni derivanti da una serie di combinazioni di carico

- a questo punto scrivere del codice che in automatico sostituisca le sollecitazioni lette dalla tabella delle combinazioni  nelle corrispondenti celle del foglio che esegue la distribuzione sui pali,
- far costruire al codice una tabella in cui riassumiamo per ciascuna combinazione, lo sforzo normale massimo sul palo, lo sforzo normale minimo sul palo, il taglio alla testa ed il momento flettente massimo sul palo.

Strada facendo potremo decidere di aggiungere altro che verrà in mente con ovvia modifca del codice.

E' naturale che prima di iniziare a comporre/strutturare fogli occorre avere chiaro il problema e sopratutto avere chiaro il procedimento di calcolo e come eseguire la distribuzione degli sforzi sui pali.




« Last Edit: 02 May , 2012, 13:19:33 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #1 on: 01 May , 2012, 21:24:23 PM »
Complichiamo il problema. Il plinto sia definito da una poligonale di cui conosciamo le coordinate dei suoi vertici. Occorrerà, pertanto, far calcolare l'area del plinto per poi, moltiplicato per la densità e per lo spessore, determinarne il peso. Inoltre occorrerà determinarsi la posizione del baricentro del plinto per poter poi eseguire il trasporto del peso del plinto nel punto baricentrico della palificata. Nella tabella delle combinazioni dovremo quindi inserire il coefficiente per cui moltiplicare il peso del plinto per rendere questa sollecitazione congruente con il tipo di combo dei carichi.
Iniziamo quindi a predisporci questo foglio.

Esso dovrà contenere una parte dove sia possibile dare in input i seguenti dati:
numero dei vertici della poligonale del plinto
spessore del plinto
area del plinto
densita del materiale cui è composto il plinto
una tabella di input delle coordinate della poligonale

poi occorrerà predisporre due celle atte a contenere le coordinate del baricentro del plinto
e le celle per depositarvi:
il coefficiente di combinazione del peso del plinto
il peso del plinto
i due momenti di trasporto dal baricentro del plinto al baricentro della palificata
per adesso credo non serva piu altro. Strada facendo vedremo se aggiungere altro.

La seconda sezione invece sara dedicata alla definzioone della geometria della palificata e per questo sarà necessario prevedere:
numero dei pali
diametro del palo
tabella delle coordinate dei pali
poi ci serviranno celle dove determinare :
l'area del singolo palo e dell'intera palificata
le coordinate del baricentro della palificata
le inerzie del palo singolo
le inerzie dell'intea palificata rispetto agli assi baricentrici
per adesso basta

Occorrerà pure una parte dedicata a riassumere:
la combo esaminata
le sollecitazioni derivanti dalla struttura sovrastante il plinto per quella specifica combo
le sollecitazioni sul piano passante per la testa dei pali.
Poi penso ci servirà qualche altra cella per la distribuzione del momento torcente e qualche altra cella col parametro Kh per la determinazione del massimo momento flettente sul palo.


Intanto iniziamo a formare lo scheletro del foglio.

NB. Non metterò a disposizione alcun file excel nè in corso di composizione di questo 3d e nemmeno alla fine. Chiunque volesse seguire lo sviluppo di questo esempio dovrà comporsi il foglio da se.
« Last Edit: 02 May , 2012, 13:22:28 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #2 on: 01 May , 2012, 21:58:12 PM »
nella immagine che segue riporto la maniera in cui ho pensato di strutturare la parte riguardante l'input dei dati del plinto



Uploaded with ImageShack.us

Da notare che
- ho dato il nome "NV" alla cella relativa al numero dei vertici della poligonale del plinto. Questo per facilitare la scrittura delle formule nelle celle e per poter accedere a questa cella eventualmente da VBA.
- ho gia distinto le celle che devono essere di input con il colore di sottofondo verdino mentre ho gia attribuito il valore 25.00 kN/m³ alla densità del materiale cui è costituito il plinto. Ma volendo lo si puo imporre come un dato di input cioè che deve inserire l'utente.

In questa struttura vi sono due errori che ovviamente correggerò. Il primo è proprio l'unità di misura della densità [kN/m²] anzichè [kN/m³] ed il secondo consiste nel fatto che ho indicato con lo stesso simbolo sia la densità che il coefficiente di combinazione. Penso di correggere chiamando questo secondo con gamma.f.

« Last Edit: 02 May , 2012, 13:24:12 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #3 on: 01 May , 2012, 22:51:16 PM »
La tabella delle coordinate deve essere tale che la poligonale sia chiusa, ciò significa che occorrerà informare l'utilizzatore che nella composizione della tabella faccia coincidere l'ultimo vertice col vertice iniziale.  Lo faremo mettendo una nota da qualche parte sul foglio o una nota in una cella (4p docet)

Adesso ci si presentano i primi problemi.
Come calcolare l'area della sezione a partire dalle coordinate dei vertici della poligonale?
Stessa domanda vale per le coordinate del baricentro.

Sappiamo che esistono delle formule che ci danno tutte le caratteristiche geometriche di una sezione definita dalle cordinate dei suoi vertici che coinvolgono delle sommatorie.

Per esempio l'area della sezione è definita da:

A = somma [(x.i - x.(i-1))*(y.i + y.(i-1))/2

in cui la somma è estesa da 2 ad NV

Allora possiamo pensare di aggiungere alla tabella delle coordinate altre tre colonne in cui, a partire dalla seconda riga, riportiamo:
nella prima colonna aggiuntiva: la differenza della x con la x precedente, 
nella seconda colonna aggiuntiva: la somma dellla y e la y precedente, 
nella terza colonna aggiuntiva: il semiprodotto dei due valori delle due colonne precedenti

infine in coda all'ultima delle colonne aggiuntive eseguiamo la somma di tutti i termini della terza colonna aggiuntiva. Questo dovrebbe essere l'area del plinto. MA a questo punto, dato che avevamo gia dedicato una cella destinata a contenere l'area del poligono, potremmo mettere proprio lì questa somma.

Proverò ad aggiungere tutto ciò nel progetto del foglio anche se vi anticipo che, in vista delle operazioni necessarie per la determinazione delle coordinate del baricentro, è opportuno ricorrere a qualche codice che eviti di imbrattare il foglio con numeri che alla fine non interessa nemmeno presentare.

Ecco un primo passo:



Uploaded with ImageShack.us

Come potete vedere ho aggiunto le colonne che avevo descritto ed ho inserito una "geometria di lavoro" per poter controllare i risultati delle formule che via via inserisco.

qui annoto quanto segue:
- siamo solo agli inizi col semplice calcolo dell'area ed abbiamo gia una tabella con dati che tutto sommato sono praticamente inutili da presentare. A noi poco importano i calcoli intermedi ma importa solo l'area. Qui sarebbe pertanto utilissima una funzione che prenda in pasto quella tabella e che ci dia solo l'area (per adesso). Ma andiamo avanti. Aggiungo solamente che quando non conoscevo a fondo le potenzialita di excel o quando questo non era potente come adesso (e mi riferisco ai tempi in cui excel era dotato solo di un rudimentale linguaggio macro) non mi fermavo di certo di fronte alla mole di numeri che avrebbero accompagnato le mie relazioni. Poi risolvevo il problema facendo fare i conti in fogli diversi che poi non stampavo.
- abbiamo fornito una tabella di input, le coordinate certamente le abbiamo ricavate da uno schema grafico che magari abbiamo davanti, siamo anche certi di non aver commesso errori, tuttavia quella serie di numeri snocciolati in tabella sono aridi e nulla dicono della forma effettiva della poligonale. Sarebbe utile poter visualizzare la forma. Questo con scopi multipli tra cui il controllo in diretta di errori di digitazioni e la presentazione di un eleborato elegante. Farò questo inserendo un diagramma a dispersioni di punti.

- purtroppo l'area calcolata è errata. Questo è dovuto alla presenza di termini nelle colonne aggiuntive e nel primo rigo oltre l'ultima coppia di coordinate; basterebbe pertanto cancellare proprio questi elementi indesiderati per ottenere il risultato corretto. Ma questo cancellerebbe anche le formule ivi inserite e in un successivo uso dovremmo ricordarci di ripristinare le formule. Penso che questo sia poco accettabile e dovremo trovare una soluzione per superare questo problema.
Una soluzione sarebbe quella di imporre all'utilizzatore di posizionare il primo vertice della poligonale nell'origine del sistema di riferimento (il risultato sarebbe corretto, provare per credere). Questa soluzione non è poi tanto cattiva. In alternativa dovremo trovare una formula che dia risultato nullo se le coordinate o il numero sequenziale del vertice non sono dati.

 

« Last Edit: 02 May , 2012, 13:28:08 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #4 on: 02 May , 2012, 21:41:47 PM »
Passiamo adesso alla determinazione delle coordinate del baricentro della poligonale.

Da geometria delle masse sappiamo che le coordinate del baricentro sono pari a:


xc = Sy / A

yc = Sx / A

In cui si sono indicati con Sx ed Sy il momento statico rispetto agli omologhi assi mentre con A si è indicata l'area della poligonale (che gia abbiamo calcolato anche se ancora errata, ma la correggeremo poi)

Se non ricordo male Zax ha riportato le formule che danno, a partire dalla tabella delle coordinate dei vertici, Sx ed Sy.
Non voglio ricorrere alla lettura del post di zax e, non ricordandole a memoria ,intendo ricavarmele da solo.
Per questo considero nel quadrante positivo il generico lato della poligonale che va dal vertice "i" al vertice "i+1" con valori crescenti sia delle x che delle y (nel senso che il punto "i+1" sta a destra ed in alto del vertice "i") e questo per poter trovare una formula che non dipenda dal segno, cioè, una formula in cui il segno del risultato derivi solo da una diversa posizione reciproca dei vertici rispetto a quella da me assunta che è positiva.

Conviene che prepari una figura esplicativa.

« Last Edit: 02 May , 2012, 22:39:58 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #5 on: 02 May , 2012, 22:05:47 PM »
ecco l'immaginetta:



Uploaded with ImageShack.us

Il momento statico della figura sottesa dal lato del poligono con l'asse delle y, calcolato rispetto all'asse delle y, è la somma algebrica dei momenti statici delle due figure colorate, il rettangolo in rosso ed il triangolo in blu. Nella figura sono riportate tutte le grandezze necessarie per il calcolo espresse in funzione delle coordinate dei due vertici.

Syi = [y(i+1) -y.i]*x.i²/2 + [y(i+1) - y.i]*[x(i+1)-x.i]/2*[x.i+[x(i+1)-x.i]/3]

Il momento statico dell'intera poligonale rispetto all'asse y è ottenuto sommando algebricamente i momenti statici rispetto allo stesso asse di tutte le aree sottese da ciascun lato della poligonale con l'asse delle y. Trattasi quindi di eseguire una sommatoria che varia da 1 a NV-1

Mi chiederete perche non fino a NV?. Semplice: perchè il vertice nv+1 non esiste e la formula cadrebbe in errore quando i vale NV.

Stesso ragionamento per ricavare Sx ma stavolta le aree da considerare sono quellle sottese dai lati della poligonale con l'asse delle x.

Scrivere quel papello di somme in unica cella è parecchio noioso ma l'alternativa, cioe quella di spezzettare la formula nelle sue parti componenti e poi eseguire i prodotti, sarebbe forse piu noiosa . Armiamoci di pazienza, aggiungiamo due colonne atte a ricevere Sxi e Syi in fondo alle quali inseriremo la somma dei singoli termini.
Ricordiamo anche che finquando non risolviamo il problema dei termini presenti e non desiderati, sia il calcolo dell'area che quella dei momenti statici sara errato.

Una nota post scriptum: dato che per il calcolo dell'area la sommatoria l'abbiamo considerata a partire da 2 fino a NV, conviene che anche le somme per i momenti statici abbiano stessi indici di sommatoria. Questo significa che dovremo modificare la formula dei momenti statici semplicemente sostituendo all'indice "i" il suo precedente, cioè "i-1" , e ad "i+1" l'indice "i". Non abbiamo fatto altro che una traslazione di indice, in questo modo la sommatoria e' estesa da 2 a NV. Spero sia chiaro questo escamotage
« Last Edit: 02 May , 2012, 22:10:57 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #6 on: 03 May , 2012, 19:40:13 PM »
Prima di andare avanti inseriamo il grafico a dispersione di punti che ci permetta di visualizzare la forma. IL primo passo è quello di scegliere da menu la voce "inserisci grafico" oppure dlla barra degli strumenti:



Uploaded with ImageShack.us

Dal dialogo che ci propone excel, selezioniamo il tipo di grafico a dispersione di punti e poi il sottotipo "con coordinate unite da linee senza indicatore". Premiamo su avanti



Uploaded with ImageShack.us

Nel secondo dialogo scegliamo la linguetta "Serie" quindi diamo il nome alla serie che intendiamo aggiungere, per esempio "Plinto" e selezioniamo per i valori delle ascisse la colonna della tabella contenenti le ascisse della poligonale e per le ordinate l'altra colonna. Premiamo quindi "fine". A Questo punto è inutile continuare col processo guidato che ci proporrà altri due dialoghi Conviene , una volta inserito il grafico, che ce lo personalizziamo noi modificando le proprieà dei vari componenti del grafico.

Avremo una cosa del genere:



Uploaded with ImageShack.us

Ognuno personalizzerà il grafico a proprio piacimento. IO tolgo subito il titolo della serie dato che penso che questo grafico conterrà anche il disegno dei pali e di altro che riterrò opportuno. Tolgo anche la legenda poiche non interessa e toglie spazio utile al disegno, poi imposto lo sfondo del grafico a "nessuno", faccio disegnare le linee della poligonale con tratto piu spesso e di colore rosso, inserisco le graduazioni secondarie e le griglie ed infine ridimensiono il grafcio. Ottengo una cosa simile:



Uploaded with ImageShack.us

adesso posso continuare con le formule relative ai momenti statici.

Per adesso annoto che sviluppando la formula che ho gia scritto per Sy ottengo la seguente:

Sy = 1/6* somma[(x².(i-1) + x.(i-1)*x.i +x².i) * (y.i - y.(i-1)]

mentre per Sx ho:

Sx = 1/6* somma[(y².(i-1) + y.(i-1)*y.i +y².i) * (x.i - x.(i-1)]
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #7 on: 03 May , 2012, 19:54:41 PM »
Inseriamo adesso due colonne, arricchendo la tabella delle coordinate, atte a contenere i valori parziali di Sxi ed Syi e a seguire scriviamo le formule relative partendo dal rigo della seconda coppia di cordinate:



Uploaded with ImageShack.us

Copiamo (trascinando) la formula nelle celle sottostanti. L'operazione va ripetuta anche per Sy.

Qui occorre ancora una volta ricordare che i valori ottenuti per A, per Sx e per Sy sono errati a causa delle presenza di termini indesiderati nel rigo settimo, cioè il primo rigo dopo l'ultima coppia di coordinate ed inoltre che palesemente il segno di Sy è errato (dovrebbe essere positivo). Vedremo poi perchè, intanto occupiamoci di risolvere il problema degli intrusi indesiderati.
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #8 on: 03 May , 2012, 21:04:55 PM »
Come togliere i termini indesiderati?

Possiamo pensare di scrivere le formule relative ai termini delle aree e dei momenti statici antecedendole con IF che fa riferimento al numero della riga:
=SE(numerodellariga<>0, allora scrivi il risultato della formula; altrimenti scrivi zero)

POsizioniamoci pertanto nella cella G14 che per adesso contiene la formula  =E14-E13 e scriviamo la formula =SE(D14<>0;E14-E13;0) come nella figura seguente:



Uploaded with ImageShack.us

Copiamo trascinando la cella nelle celle sottostanti. Vedremo sparire il primo termine indesiderato.

Facciamo stessa cosa per la cella H14 che per adesso contiene la formula =F14+F13. La formula sostitutiva sarà =SE(D14<>0;F14+F13;0). Copiamo trascinando. Sparisce anche il secondo termine indesiderato e con esso anche quello relativo all'area dato che questa è il semiprodotto dei primi due.

Facciamo stessa cosa nelle celle J14 e K14. Evito di dettagliarlo qui.

Alla fine di queste operazioni i termini indesiderati sono spariti e resta solo di capire perche il momento statico Sy è negativo mentre ce lo aspettiamo positivo.


Gia che ci siamo inseriamo nelle cellette che avevamo dedicato a contenere xg e yg le formule  per determinarli dato che adesso abbiamo tutto.

Otteniamo questo:



Uploaded with ImageShack.us

E' quasi bello.
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #9 on: 05 May , 2012, 10:09:17 AM »
Nel mio "esempio di lavoro" ho numerato i vertici della poligonale percorrendola in senso orario. IL senso della numerazione dà il segno dei tre termini A, Sx ed Sy; una numerazione antioriara darebbe come risultati gli stessi valori ma cambiati di segno.

Fissata la numerazione oraria, il momento statico  della figura rispetto all'asse delle y determinato con la formula che ho dato, risulta negativo. Il motivo è immediato da comprendere considerando un semplice rettangolo.

Il lato 1-2 piu prossimo e parallelo all'asse delle y determina un contributo positivo al momento statico con valore:
Sy(1-2)=(y2-y1)*x1²/2

mentre il lato 3-4, piu lontanno e paralleo all'asse delle y determina un contributo negativo al momento statico, con valore:
Sy(3-4)=(y4-y3)*x2²/2

essendo x4-x3= - (y2-y1)
abbiamo
Sy(3-4)=-(y2-y1)*x2²/2

quindi:

Sy = (y4-y3)*x1²/2 -(y2-y1)*x2²/2 = (y2-y1)*(x1²-x2²)/2

ed essendo x2>x1 il risultato è negativo.

Per correggere il nostro foglio basta pertanto cambiare il segno ad ogni contributo del momento statico rispetto all'asse y e ricordarsi di inserire una nota per l'utilizzatore con l'avviso di numerare i veritici in senso orario.

Adesso diamo un input allo spessore H del plinto e possiamo aggiungere anche la formula per il calcolo del peso.

Otteniamo quanto segue:


Uploaded with ImageShack.us

Per adesso avremmo finito con la parte relativa ai dati del plinto. Torneremo ad aggiungere i due momenti di trasporto quando avremo determinato il baricentro della palificata e conosceremo quindi le eccentricità.

Iniziamo adesso la parte relativa alla palificata



P.S.: Nella formula del calcolo del peso ho commesso un errore che consiste nell'averlo inserito positivamente mentre avevo definito positivo l'asse delle z rivolto verso l'alto. Questa è una leggerezza, battutaccia, nel senso che questo errore avrebbe alleggerito i pali del doppio del peso del plinto.
« Last Edit: 05 May , 2012, 11:06:38 AM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #10 on: 05 May , 2012, 10:25:48 AM »
Predisponiamo le celle necessarie per la parte relativa ai pali. POtremmo decidere di cambiare foglio e costruirci li la struttura che ci serve, ma dato che in qualsiasi istante possiamo sempre fare un bel taglio-incolla, per adesso continuiamo a lavorare sempre nello stesso foglio.
Ci servono le seguenti celle:
- numero dei pali
- diametro del palo
- area singolo palo
- inerzia singolo palo
- coordinate baricentro palificata
- area totale della palificata
- inerzia totale rispetto ad ase x-x baricentrico
- inerzia totale rispetto ad asse y-y- baricentrico
- tabella dove inserire le coordinate di ciascun palo.

Io ho pensato di strutturare questi dati nel modo seguente:


Uploaded with ImageShack.us

Nello schema che ho proposto, ho predisposto una tabella atta a contenere una decina di pali, ma questa tabella potra essere estesa in futuro. Inoltre, anche se non mostrato nella figura, ho attribuito il nome "NP" alla cella che contiene il dato del numero dei pali ed il nome "DP" alla cella che contiene il diametro del palo. altri nomi, se necessari, li attribuiò nel seguito.

Ovviamente ognuno puo strutturalo in qualsiasi altro modo salvo ad apportare le correzioni in corso d'opera derivanti da quello che servira nel seguito.
« Last Edit: 05 May , 2012, 10:28:53 AM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #11 on: 05 May , 2012, 10:58:57 AM »
Continuiamo inserendo dei dati di input di lavoro (per poter controllare/visualizzare i risultati delle formule che andremo ad inserire). Diamo sia il numero dei pali che il loro diametro e riempiamo la tabella con le coordinate di 9 pali immaginando di mettere un palo al centro, un palo prossimo ad ogni vertice della poligonale ed infine un palo nei punti medi dei lati lunghi.
Avendo sia il il numero dei pali che il diametro possiamo gia inserire le formule per il calcolo dell'area del singolo palo, della sua inerzia e l'area dell'intera palificata:



Uploaded with ImageShack.us

Scriviamo quindi:
nella cella F30 la formula: =PI.GRECO()*DP^2/4
nella cella G30 la formula: =PI.GRECO()*DP^4/64
nella cella J30 la formula: =NP*F30

« Last Edit: 05 May , 2012, 14:41:29 PM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #12 on: 05 May , 2012, 13:42:58 PM »
Le coordinate del baricentro della palificata le calcoliamo al solito con la formula:

xg = somma(Ai*xi)/somma(Ai)
yg = somma(Ai*yi)/somma(Ai)

ma essendo Ai=Ao =costante, le formule si semplificano in:

xg = Ao*somma(xi)/(Ao*NP) = somma(xi)/NP
yg = Ao*somma(yi)/(Ao*NP) = somma(yi)/NP

In pratica le coordinate del baricentro della palificata altro non sono che i valori medi delle coordinate.

Posizioniamoci quindi in H30 e digitiamo la formula SOMMA(E35:E44)/NP e nella cella I30 la formula =SOMMA(F35:F44)/NP


Ragioniamo adesso sulle inerzie totali della palificata:

Jtotx= NP*Jo + somma[Ao*(yg-yi)²) = NP*Jo + Ao*somma[(yg-xi)²]

similmente per il momento di inerzia secondo l'altro asse.

Jtoty= NP*Jo + somma[Ao*(xg-xi)²) = NP*Jo + Ao*somma[(xg-xi)²]

Ci servono quindi due colonne dove far calcolare i termini (xg-xi)² e (yg-yi)². Queste due colonne le mettiamo accanto alla tabella delle coordinate ottendo una cosa simile alla seguente:



Uploaded with ImageShack.us

In questa immagine noterete che ho gia inserito la prima formula nella cella G35:  =($H$30-E35)^2 che successivamente copierò trascinando la cella sulle celle sottostanti.
Il riferimento utilizzato per la celle H30 (che contiene xc) è assoluto. Questo significa che excel nella copia della formula di una cella in una qualsiasi altra cella non cambierà mai questo riferimento mentre tutti gli altri saranno adattati alla posizione relativa della cella di destinazione.
Faremo la stessa cosa nei riguardi di Jy ed alla fine della copia delle formule nelle celle sottostanti ci aspetteremo di trovare qualche termine indesiderato nelle righe dove non abbiamo definito alcuna coordinata. MA per superare questo problema sappiamo già come procedere.





« Last Edit: 20 May , 2012, 00:25:12 AM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #13 on: 05 May , 2012, 14:07:29 PM »
Riassumendo quanto gia composto, dovremmo avere qualcosa di simile ala figura che segue:



Uploaded with ImageShack.us

Ho già apportato le correzioni per evitare gli elementi indesiderati (notate gli zeri nei termini di Jxi e Jyi).
Adesso siamo in grado di calcolarci i due momenti di strasporto che avevamo lasciato indietro.

Ricordatevi che, per evitare errori nella scrittura di queste due formule, dovrete ipotizzare la forza positiva e l'eccentricità anch'essa positiva.
Cosi facendo abbiamo:

Mx = P*(Yg.plinto- Yg.pali)
My= - P*(Xg.plinto- Xg.pali)

Ovviamente il segno effettivo dei momenti di trasporto dipenderà poi dal segno effettivo dell'azione P e dal segno della differenza entro parentesi.
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

Offline afazio

  • Veterano del forum
  • ****
  • Posts: 663
  • Karma: 273
  • dovizio mi delizio
    • CI si vede al Bar
Re: VBA- Lezione 2 - Come far interagire foglio-codice
« Reply #14 on: 12 May , 2012, 09:59:11 AM »
Prima di andare avanti, vediamo di inserire anche il disegno dei pali nel grafico in cui avevamo già disegnato la forma del plinto ed iniziamo a dare dei nomi alla tabella.

Diamo un nome di tipo dinamico alla tabella delle coordinate dei pali, cioè il nome deve riferirsi ad un range di celle le cui dimensioni dipendono proprio dal numero dei pali.
Per fare questo selezioniamo dal menu "Inserisci" la voce "nome" e quindi la voce definisci. Si apre il dialogo per la definizione dei nomi con la proposta di attribuire un nome alla cella selezionata.
Per dare un nome di tipo dinamico dobbiamo fare ricorso alla funzione "scarto".
La sintassi è la seguente:

= scarto(cella_di_riferimento; spostamento_righe; spostamento_colonne; num_righe_tabella; num_colonne_tabella)

Procediamo quindi con la selezione della voce del menu per l'inserimento di un nuovo nome, otteniamo il seguente dialogo:



Uploaded with ImageShack.us
definiamo il nome "Tab_coord_Pali" e nella box di input "riferitoa" iniziamo a scrivere la funzione scarto. Indichiamo come cella di riferimento prima cella della tabella che intendiamo definire. Nel nostro caso intendiamo definire una tabella contenente il numero del palo e le sue coordinate, quindi la cella di riferimento è la cella con il numero del primo palo.

Completiamo la funzione scarto aggiungendo gli "scarti" rispetto alla cella di riferimento per avere la cella di inizio del range, (nel nostro caso saranno 0;0, ma se avessimo scelto come cella di riferimento altra cella piu distante, avremmo dovuto dare i valori di spostamento necessari per arrivare dalla cella di riferimento alla cella iniziale), completiamo la funzione scarto inserendo le dimensioni della nostra tabella (nel nostro caso sono NP righe e 3 colonne). Otteniamo la seguente;



Uploaded with ImageShack.us

Se adesso provate a selezionare, dal dialogo di definizione dei nomi, il nome "Tab_coord_Pali" e cliccate sull'icona di selezione delle celle, vedrete evidenziare proprio la tabella che abbiamo definito.
Inoltre, se dal foglio provate a cambiare il numero dei pali e tornate a visualizzare il range a cui si riferisce il nome "Tab_coord_Pali" vedrete adattare il range alle nuove dimensioni.
Questo modo di definire un range viene indicato con "range dinamici" e potrete intuire la potenza di questi nomi se poi gestiti da un qualche codice dato che gia il range col suo nome ha in se definiti anche le sue dimensioni accessibili da codice tramite i metodi .rows.count e columns.count

« Last Edit: 12 May , 2012, 10:18:30 AM by afazio »
« Ogni qualvolta una teoria ti sembra essere l’unica possibile, prendilo come un segno che non hai capito né la teoria né il problema che si intendeva risolvere. »
K.P.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24