Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]-Ordinare anche il formato celle Opzioni
aetio
Inviato: Thursday, November 17, 2011 8:00:29 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
devo risolvere questo problema, altrimenti dovrò ahimè agire manualmente in centinaia di celle...
mi aiuto con un paio di immagini:

devo ordinare i dati di col.B in base all'inversione della colonna di fede A da AZ a ZA, ma purtroppo Excel non ha l'opzione di ordinare anche i formati delle celle, come invece avviene col colore, infatti l'ordinamento restituisce la situazione

E' possibile ovviare alla limitazione mediante una macro?
Grazie assai e buona giornata,
eZio
Sponsor
Inviato: Thursday, November 17, 2011 8:00:29 AM

 
a10n11
Inviato: Thursday, November 17, 2011 10:48:24 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
l'istruzione ordina, non ha effetto sui bordi delle celle.
Se alcune celle hanno un bordo si deve supporre che ci sia una condizione perchè ciò avvenga. Si potrebbe pertanto pensare di applicare i bordi utilizzando una formattazione condizionale oppure replicare le condizioni via macro dopo aver rimosso tutte le formattazioni.
saluti
Giap

aetio
Inviato: Thursday, November 17, 2011 12:06:57 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
temevo molto che fosse così...!! purtroppo non ho alternative.
Ma avrebbero dovuto già da tempo porre rimedio a questa grave limitazione, perché come hai giustamente sottolineato
Commenta:
Se alcune celle hanno un bordo si deve supporre che ci sia una condizione perchè ciò avvenga.
va da sé che se una cella contenete un valore è stata bordata, per logica elementare dovrebbe essere possibile trasferire questa sua caratteristica insieme a tutto il contenuto della cella stessa(valore, stile, colore, etc.). Uno non si mette a bordare celle per sport o o per passione... Misteri della mente umana...
Grazie assai e buona giornata
eZio
aetio
Inviato: Thursday, November 17, 2011 5:19:45 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
chiedo anticipatamente scusa per le molto probabili castronerie che scriverò qui sotto, ma la mia conoscenza della Disciplina del VBA è davvero assai limitata... :)
Sto cercando di escogitare una via praticabile per "gabbare" l'eccellenza della macchina che tuttavia, e per fortuna, ha dei limiti rispetto all'elasticita del pensiero della mente umana. Osservando le immagini sopra facciamo alcune semplici riflessioni:
- la cella B1 è adiacente alla cellaA1, la cella B2 alla cella A2, e via dicendo fino alla fine dei valori della colonna B arrivando alla situazione Bn adiacente alla cella An
- se noi riuscissimo a fare seguire alla cella B1 le sorti della cella A1...che so legandole alla stessa riga di appartenenza includendo nelle istruzioni della macro i parametri delle bordature, forse si riuscirebbe ad evitare di dovere rifare tutto da capo
Commenta:
replicare le condizioni via macro dopo aver rimosso tutte le formattazioni

l'unica operazione che si dovrebbe fare sarebbe quella di lanciare la macro dopo avere copiato nella col.B di un foglio dedicato la colonna da ordinare in base all'istruzione di ordinare per ZA il range selezionato in base alla col.A. Si lavorerebbe cioè solo sulle col.A e B in base al Range A1:Bn
E' un'ipotesi praticabile?
Grazie assai per la pazienza e buona serata,
eZio


.
a10n11
Inviato: Thursday, November 17, 2011 6:54:52 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
la tua soluzione, prevede di duplicare la tabella ed eseguire un ciclo di comparazione.( troppo poco pratico ed elegante).

La domanda che ti ho posto sopra non ha avuto risposta. la ripeto: Qual'è la condizione che applica il bordo alla cella??
non è possibile applicare la condizione all'interno di una formattazione condizionale??


Se proprio vuoi una macro (mi vergogno solo a presentarla!!) prova quella che segue:

Option Base 1
Sub Bordi()
Dim Bord()
cont = 1
Set area = Range("a1", Range("a" & Range("A" & Cells.Rows.Count).End(xlUp).Row))
For n = 1 To area.Rows.Count
ReDim Preserve Bord(cont)
If Cells(n, 2).Borders.LineStyle = xlContinuous Then
Bord(cont) = Cells(n, 1)
cont = cont + 1
End If
Next
With Columns("B:B").Borders
.LineStyle = xlNone
End With
Range("A1").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlDescending
For i = LBound(Bord) To UBound(Bord)
For Each cl In area
If Bord(i) = cl.Value Then
cl.Offset(0, 1).Borders.LineStyle = xlContinuous
End If
Next cl
Next i
Set area = Nothing
End Sub


il codice dopra descritto, controlla se in cella di colonna B è applicato un bordo, se lo trova, scrive il valore di
cella A all'interno di una matrice- finito il ciclo di controllo, cancella tutti i bordi di colonna B , esegue l'ordinamento, e riassocia i bordi.

saluti
Giap


aetio
Inviato: Thursday, November 17, 2011 8:24:10 PM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
Commenta:
Qual'è la condizione che applica il bordo alla cella??

sono parecchie, a seconda delle tabelle... sarebbe troppo complicato elencarle e intervenire in ciascuna di esse
Commenta:
non è possibile applicare la condizione all'interno di una formattazione condizionale??

per lo stesso motivo scritto sopra è una strada praticamente impraticabile...

Commenta:
Se proprio vuoi una macro (mi vergogno solo a presentarla!!)

assolutamente nessuna vergogna... Anzi!! la macro è perfetta e in un baleno esegue tutto alla perfezione. Tieni presente che questa mia specifica applicazione è essenzialmente atta a risolvere dei problemi operativi, "terra-terra" da un punto di vista di eleganza (cosa che invece a me personalmente interessa eccome!!). Di questo ti chiedo scusa. :))
Un'ultima cosa, la "ciliegina sulla torta": qual'è l'esatta sintassi da inserire nella macro per farle riscrivere i bordi con le specifiche
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3

?
Grazie infinite e buona serata,
eZio
a10n11
Inviato: Friday, November 18, 2011 10:07:30 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
ecco la parte del codice da modificare:


.....
If Bord(i) = cl.Value Then
With cl.Offset(0, 1).Borders
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = 3
End With
End If
......

saluti
Giap

aetio
Inviato: Friday, November 18, 2011 11:28:58 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
non riuscivo a collocare in modo corretto With e End With, che col senno di poi vanno chiaramente rispettivamente scritti prima della parte di istruzione
cl.Offset(0, 1).Borders
e dopo l'ultimo parametro dell'istruzione stessa.
Grazie infinite, mi hai risolto un problema pratico assai rilevante... perdonami se ti ho chiesto di scrivermi un'eresia
Commenta:
Se proprio vuoi una macro (mi vergogno solo a presentarla!!)
... me ne assumo totalmente la responsabilità:)
sei davvero un sincero e grande Amico
Nella triste realtà in cui siamo immersi purtroppo spesso bisogna scendere a compromessi (e qui col pensiero vado a Jean Baptiste Corot...).
Grazie assai e buona giornata,
eZio


.
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.