Scrivere in posizioni precise all'interno di una cella

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Pagine: [1], 2
picavi
00domenica 6 agosto 2017 18:49
Buongiorno a tutti,
nell'esempio che allego, nella cella unita gialla, ho scritto digitando degli spazi tra la prima e la seconda e tra la seconda e terza parola.
In questo modo, Fiore inizia in posizione 1, Frutto inizia in posizione
34 e Foglia in posizione 66 (se non sbaglio contare).
E' possibile bloccare questa "formattazione" in più celle identiche, in modo che se dovessi scrivere parole più lunghe o più corte, queste inizino sempre nelle stesse posizioni 1, 34 e 66?
Mille grazie e saluti,
Piero.
dodo47
00domenica 6 agosto 2017 19:00
ciao
perché non utilizzare tre celle ?, il problema non si porrebbe.

saluti



patel45
00domenica 6 agosto 2017 19:12
a cosa serve ? occorre poi un carattere a larghezza fissa.
la domanda mi ricorda il Fortran
picavi
00domenica 6 agosto 2017 19:47
Il problema è che con più di una cella, i menu a tendina non funzionano.
Io ho 6 celle con caratteristiche di determinati articoli, e mi devo portare dietro tutte le 6 caratteristiche. Se avessi una sola cella, nel scegliere dal menu a tendina, vedrei subito tutte le specifiche.
Con menu a tendina concatenati. indice/confronta ecc ecc, io sceglio l'articolo, la prima e la seconda specifica, ma non oltre. Per cui devo effettuare una scelta e se non va bene farne una seconda e così via.
Mi servirebbe una sola cella, dove posso vedere subito, prima della conferma, tutte le specifiche, ma dove devo anche poter scrivere con un certo ordine.
Cosa intendi per un carattere a larghezza fissa? Che una i occupi uno spazio identico a una m? In passato io usavo (altri problemi) mi pare Courier New per avere la medesima larghezza in tutti i caratteri.
Grazie comunque per le risposte così veloci.
tanimon
00domenica 6 agosto 2017 20:00
ciao a tutti

non sò se ho capito,
ma sul foglio interessato, potresti provare con una casella combinata (activeX)

con le seguenti proprietà:

ColumnCount: 3

ListFillRange: tuo range sorgente dati

Ciao
Frank

Ps.
Consiglio:
evita per quanto possibile le celle unite, c'è sempre una alternativa [SM=g27811]
picavi
00domenica 6 agosto 2017 20:14
Tanimon grazie per aver risposto.
Concordo sul cercare di evitare celle unite.
Purtroppo quello che mi suggerisci va decisamente oltre le mie capacità. Io cerco di arrangiarmi in qualche modo con le formule e non riesco a dedicarmi come vorrei al VBA. Spero nelle ferie.
Hai tempo di spiegarmi un pochino?
tanimon
00domenica 6 agosto 2017 20:27
ho 2007 e non conosco 2010, ma non credo ci siano troppe differenze:

dal foglio interessato,


menu Sviluppo
(se non disponibile in rete trovi sicuramente come poterlo utilizzare)

menu Sviluppo > Inserisci

Iserisci > Casella Combinata activeX
(nella parte bassa della finestra che si è aperta)

una volta selezionata,
disegnarla con il mouse sul foglio.

dopo aver selezionato la casella combinata appena disegnata,

tasto destro > proprietà;

aggiorna le proprietà dette nel post precedente

E' più facile farlo che dirlo/scriverlo
[SM=x423029] [SM=x423037] [SM=x423038]

picavi
00domenica 6 agosto 2017 20:30
Ok, mille grazie.
Ci provo
tanimon
00domenica 6 agosto 2017 20:35
Re:
Ovviamente,
risolvi solo la richiesta seguente

picavi, 8/6/2017 7:47 PM:


Mi servirebbe una sola cella, dove posso vedere subito, prima della conferma, tutte le specifiche.




ma è un primo passo,
poi si vede il seguente..........
dodo47
00lunedì 7 agosto 2017 09:47
Ciao
prima leggi con attenzione quanto scritto da Tanimon (saluti).

Resto comunque con la curiosità e, prima di fornirti una soluzione (poche righe di codice sull'evento change del foglio mirato alle celle interessate)che comunque comporta l'uso obbligatorio di un carattere a larghezza fissa (tipo Currier), ti domando di nuovo perché non vanno bene tre celle e a cosa ti serve questa cella unita con tale modalità di formattazione.
Potrebbe esserci un'altra soluzione per ovviare a questo.

Comunque (per la macro) dovranno essere "singole" parole più o meno lunghe.

saluti



picavi
00sabato 12 agosto 2017 21:05
Ciao a tutti,

chiedo scusa per non essermi fatto vivo prima, ma per lavoro sono assente tutta la settimana e solo oggi pomeriggio ho potuto tornare sull'argomento.
Ricapitolando, avrei bisogno di un menu a tendina che:
- prelevi da un elenco "largo" 7 celle, "fornitore" più 6 specifiche
(se necessario ogni singola cella può essere singola o derivante da
unione,)e
- riporti i dati in 7 celle (in questo caso però le celle sono
obbligatoriamente delle unioni come nel foglio "scheda"
dell'esempio).
Sarebbe importante, nel momento in cui si attiva il menu a tendina, poter vedere e quindi selezionare immediatamente tutte le 7 celle (fornitore più le 6 specifiche). Se si deve scegliere una specifica dopo l'altra, è sempre possibile l'errore.
Con convalida dati ecc. non sono riuscito, e inoltre oggi ho provato a unire le 7 scelte in una unica cella, distribuendo i dati manualmente (dodo con questo forse sono riuscito a chiarirti perchè mi serviva una formattazione automatica).
Ma anche così non funziona. Probabilmente activeX suggerito da Tanimon (mille grazie) è la soluzione giusta, ma io mi sono perso e non riesco a metterlo in pratica.
Avete suggerimenti usando formule? Tanimon avresti 5 min per applicare activeX nell'esempio che allego, così da poter vedere?
Ciao e di nuovo mille grazie a tutti, Piero.
tanimon
00sabato 12 agosto 2017 23:08
ciao,
ho visionato il tuo file e siccome ti era stato sconsigliato,
lo hai lasciato zeppo di celle unite [SM=x423043]

Non contento,

hai nascosto le formule nella barra.........

ed hai strutturato il foglio in modo tale di non potere
lavorare sulla larghezza delle colonne mettendo in verticale dati di natura diversa.............

Mi è toccato crearmelo il tuo file.
Grazie
[SM=x423032]

Te lo allego,
dacci un'occhiata e se è quello che cerchi adegua il tuo.


Ciao
Frank
picavi
00domenica 13 agosto 2017 00:28
Ciao Tanimon,
grazie per il lavoro fatto.
Ma come ho fatto a nascondere le formule nella barra? Ho solo creato e nominato gli elenchi e poi convalida dati-elenco ecc., creando i menu a tendina.
Per le celle unite, sono in una situazione obbligata, come ho scritto nel mio messaggio precedente "- riporti i dati in 7 celle (in questo caso però le celle sono obbligatoriamente delle unioni come nel foglio "scheda" dell'esempio)"
E questo perchè si tratta di una parte di un file molto vasto.
Funzionerebbe ugualmente celle unite o sai già che è una strada non percorribile?
Mi sembra di capire che tu abbia creato una macro e non hai utilizzato activeX, giusto?
Domani farò qualche prova per trasferire questo sistema nel file originale.
Ti farò sapere.
Per ora mille grazie.
Ciao, Piero
tanimon
00domenica 13 agosto 2017 01:15
ciao,
nel file allegato, troverai un altro risultato:

NON sono celle unite!

una volta effettuata la selezione dalla ComboBOX,
nella cella in colonna A trovi concatenate le voci della ComboBox.

Per una grafica ottimale,
il numero di spazi tra una parola e l'altra dipende dalla larghezza
delle colonne del tuo file e pertanto lascio a te il compito di
ottimizzarlo.


Ho utilizzato una ComboBox Controllo ActiveX, alla quale ho impostato le proprietà di cui al mio post #5,
ed ho inserito alcune istruzioni in un paio di suoi Eventi.

per vedere queste istruzioni,
dal foglio premi ALT + PF 11

NON utilizzerei celle unite per i range su cui ho necessita di intervenire per aggiornamenti MAI ed in nessun caso,
ma lo  farei SOLO per celle i cui valori non DEVONO/POSSONO variare. 




Ciao
Frank
patel45
00domenica 13 agosto 2017 06:16
Complimenti Tanimon per l'ottimo lavoro, con conoscevo la possibilità del multicolumn, mi sono permesso di fare qualche modifica al codice per inserire i dati direttamente nelle varie celle del foglio1
Private Sub ComboBox1_Click()
Dim ur As Long
ur = Sheets("Foglio1").Range("a" & Rows.Count).End(xlUp).Row + 1
Dim area As Range
Set area = Range("a" & ur)
For i = 0 To 6
  area = area & ComboBox1.Column(i) & " "
Next
area.TextToColumns Destination:=area, DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
        Array(7, 1)), TrailingMinusNumbers:=True
  
Range("a3").Activate
End Sub
tanimon
00domenica 13 agosto 2017 08:50
Re:
Ciao Patel,
grazie per i complimenti  

il Testo in colonne è una buona soluzione in alternativa all'imputare
colonna per colonna i valori della ComboBox nelle colonne del foglio,  

purtroppo mi sà che ti è scappato quello che chiede Picavi,
che diciamo, è vincolante per MOTIVI PERSONALI.....


picavi, 13/08/2017 00.28:


Per le celle unite, sono in una situazione obbligata, come ho scritto nel mio messaggio precedente "- riporti i dati in 7 celle (in questo caso però le celle sono obbligatoriamente delle unioni come nel foglio "scheda" dell'esempio)"
E questo perchè si tratta di una parte di un file molto vasto.
Ciao, Piero



Se dai un'occhiata al suo ultimo file,
ti renderai conto che quanto ho evidenziato dal suo post è in netto contrasto:

dal suo file,
io ho capito che vuole avere la possibilità di visionare le colonne di dati da selezionare in unica tendina,
di cui i valori devono essere scritti in UNICA cella, ma spaziati come da larghezza delle colonne per un fatto grafico/estetico.

Ma forse ha cambiato idea e sarebbe stato meglio che ce lo dicesse.

Si potrebbero fare fare conti su conti,
contare la lungheza totale della combo, delle singole parole, e con Mid(ComboBox) riempire la cella...............

ma non ho tempo e voglia......  

Vediamo che dice Picavi


Ciao e buona giornata
Frank
dodo47
00domenica 13 agosto 2017 12:20
ciao a tutti
questo quanto ho capito:

picavi vuole selezionare uno dei fornitori presenti nel foglio DBASE con la possibilità di vedere nella combo le 7 colonne di ciascun fornitore, e questo è stato risolto dalla combo di tanimon.

Poi però ho capito che lui ha l'esigenza di trascrivere i valori scelti nel foglio SCHEDA, rispettando alcune celle unite e che la sua richiesta di "tutto in una cella rispettando gli spazi" altro non era che un escamotage per avere incolonnati i valori.

Quindi sfruttando la cbo di cui sopra, è possibile inserire nelle celle volute (anche se unite) i vari valori.

Nell'allegato, la cbo viene caricata dinamicamente ogni volta che in DBASE si aggiunge un fornitore, fruttando l'evento Activate di SCHEDA.
Pertanto ogni volta che si aggiungerà un nominativo in DBASE questo verrà riportato nella combo.

Nota: si sarebbe potuto creare un nome dinamico per i fornitori in DBASE, ed assegnare il relativo valore alla cbo, ma questo avrebbe comportato problemi all'evento click della cbo, pertanto ho preferito alimentare la cbo con l'union dei 7 range del foglio DBASE (vedi macro foglio2).
Sull'open del documento viene eseguito l'evento activate del foglio SCHEDA.

Mancano tutte le dim...mettile tu....sempre che sia quello che volevi.

saluti



tanimon
00domenica 13 agosto 2017 13:47
Ciao Domenico,
sicuramente il tuo file è meglio rifinito del mio [SM=g27811]

Inizialmente anch'io avevo predisposto l'aggiornamento
delle colonne del foglio SCHEDA uguali alle colonne della combo,
ma l'insistenza di Picavi sul fatto che la riga da compilare
avesse TUTTE le "celle unite" come nel suo file di esempio al post #11,
mi ha "spiazzato".

Non ho pensato di unire le celle per "gruppi di colonne"
ed hai risolto la tabulazione
[SM=x423047]

Speriamo sia quello che cercava

Edit:
nel caso,
bisogna riconoscere che risolveva anche la soluzione di Testo in colonne, proposta da Patel


ciao
Frank
dodo47
00domenica 13 agosto 2017 16:20
ciao
che dire, io l'ho interpretata così...

Si, certo, anche l'impostazione di Patel andrebbe bene in questo caso.

cari saluti


picavi
00domenica 13 agosto 2017 17:40
Ciao a tutti,

in effetti l'interpretazione di dodo è esatta. Io sono vincolato a usare, come destinazione, delle celle unite, parte di un file esistente, molto vasto e praticamente non modificabile sotto questo aspetto.
Non ho cambiato idea, ma nella mia scarsa conoscenza delle formule di excel e totale ignoranza del vba, strada facendo ho pensato prima a un semplice menu a tendina (ma non funziona con celle unite), poi a menu a tendina concatenati (ma, nel mio caso, di fatto inapplicabili).
Ho provato con 7 menu a tendina indipendenti, ben conscio che in ambiente lavorativo avrebbe lasciato grandi possibilità di errori, soluzione che comunque non funziona con celle unite.
Ho provato con una unica macrocella unita, che non ha funzionato, e che presenta il problema di allineare in verticale i vari dati.
Poi è arrivata la cavalleria (voi) che ha risolto il problema.
Proverò a fondo e poi trasferirò la soluzione nel file originale.
Mi sono ripromesso, in queste due settimane di ferie, di iniziare a studiarmi il vba. Ho già scaricato un tutorial di una certa Alexandra,
speriamo in bene.
Che dire, posso solo ringraziare tutti voi, sempre molto disponibili e veloci. Vorrei veramente anch'io dare un aiuto e non solo sempre chiedere.
Grazie ancora, a tutti.
Ciao,Piero
picavi
00lunedì 14 agosto 2017 20:12

Come faccio a dire al combobox dove scrivere?
Ho inserito nel file originale (ne allego uno stralcio) i codici e il combobox, ma non riesco a farlo scrivere.
Dov'è l'errore?
tanimon
00lunedì 14 agosto 2017 20:48
non sò che dire,
a me funziona

Ho guardato il file e mi sembra tu abbia incollato bene il codice.




Ciao
Frank
picavi
00lunedì 14 agosto 2017 20:52
E' vero, ora funziona anche a me.
Meglio cosi.
Ciao Tanimon.
tanimon
00lunedì 14 agosto 2017 21:23
c'è solo una correzione da fare,
ma quando la riscontrerai,
sono certo che sarà alla tua portata.


ciao
Frank
picavi
00lunedì 14 agosto 2017 21:33
Ho modificato "Range (A1) in (A30), così non mi rimbalza ogni volta in alto a sinistra, poi ho modificato

Uni0n(wk.Range("A2:A" & ur), wk.Range("B2:B" & ur), _
wk.Range("C2:C" & ur), wk.Range("D2:D" & ur), wk.Range("E2:E" & ur), _
wk.Range("F2:F" & ur), wk.Range("G2:G" & ur)).Value

in A3, B3 ecc per non includere anche la riga di intestazione (fornitore ecc).
Inoltre ho dovuto modificare
Cells(ur, 1) = ComboBox1.Column(0)
Cells(ur, 3) = ComboBox1.Column(1)
Cells(ur, 6) = ComboBox1.Column(2)
Cells(ur, 7) = ComboBox1.Column(3)
Cells(ur, 8) = ComboBox1.Column(4)
Cells(ur, 9) = ComboBox1.Column(5)
Cells(ur, 10) = ComboBox1.Column(6)
perche ho una cella unita da 3 invece che da 4.
Altro non mi ricordo.
Però, dove viene detto al combobox dove deve scrivere?


tanimon
00lunedì 14 agosto 2017 21:44
nelle itruzioni del suo evento ComboBox1_Click

se hai fatto o fai delle modifiche,
cerca PRIMA di capirne le conseguenze....


Per poterlo fare, devi almeno sapere...... leggere il codice

[SM=x423018]
picavi
00lunedì 14 agosto 2017 22:00
Beh, con un poco di attenzione si intuisce che inizia a leggere in A2, A3 ecc, poi scrive nelle colonne 1,3,6 ecc..
Per il Range A1 ==> A30 qui non ho capito bene, ma mi mandava in A1 e c'era solo un A1; con la modifica è andato tutto a posto.
Non riesco però a trovare il nesso che _Click() indirizza proprio in quella cella e non in una piu sotto o sopra, ad esempio. Qui bisogna solo cocnoscere il linguaggio di programmazione.
Se riuscirò, nei giorni prossimi inizierò con vba.
Ciao tanimon, e grazie per il supporto.
tanimon
00lunedì 14 agosto 2017 22:15
Re:
picavi, 8/14/2017 10:00 PM:


Non riesco però a trovare il nesso che _Click() indirizza proprio in quella cella e non in una piu sotto o sopra, ad esempio.




al verificarsi dell'Evento click sulla combo (quando clicchi sulla combo),

esegue le istruzioni all'interno dell'Evento click.

Sono le istruzioni ad effetture le modifiche al file.


[SM=g27811]
picavi
00martedì 15 agosto 2017 11:54
Ciao tanimon,

ho inserito i codici nel file definitivo, però il combobox
non scrive nella riga 32, ma nella 269.
Credo di capire che sia dovuto alla ultima riga utilizzata
in questo foglio. Però, non conoscendo il vba, non ne esco.
E' corretta la mia interpretazione?
Cosa devo fare per risolvere?

Ciao, Piero
(e buon ferragosto)
dodo47
00martedì 15 agosto 2017 12:00
Piero
come suggerito, se non ti sforzi nel capire le righe delle istruzioni, non ne uscirai mai.
Nella Private Sub ComboBox1_Click(), l'istruzione:

ur = Range("A" & Rows.Count).End(xlUp).Row + 1

individua la prima riga libera sulla quale scrivere, il resto (da aggiustare) non fa altro che copiare i dati della cbo (che ti ricordo partono da 0=1^ colonna, 1=2^ colonna....) nelle varie colonne.

Ora se devi riportare anche le "note" di col. H di "DB Bottoni", devi aggiungere tale colonna (H) al caricamento della combobox1:
....
.List = Uni0n(wk.Range("A3:A" & ur), wk.Range("B3:B" & ur), _
wk.Range("C3:C" & ur), wk.Range("D3:D" & ur), wk.Range("E3:E" & ur), _
wk.Range("F3:F" & ur), wk.Range("G3:G" & ur), wk.Range("H3:H" & ur)).Value
....

Le note non le vedrai nella combobox1, ma non credo sia un problema. Se invece le vuoi vedere anche nella combobox1, devi modificare nelle sue proprietà la voce ColumnCount portandola da 7 a 8.

Mi auguro inoltre che sotto la tabella "Accessori: bottoni" non vi siano altre tabelle, altrimenti c'è da modificare l'individuazione della riga su cui scrivere (ur) che prevede appunto che la suddetta tabella sia l'ultima del foglio, in quanto così come è impostata quell'istruzione cerca la prima riga libera della col. A di Scheda Consumi.
Quindi, se per ipotesi l'ultima riga scritta di Scheda Consumi è la A100, la routine scriverà in A101.

Spero di esser stato chiaro.

saluti


Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 07:55.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com