Rileva formattazione da cella
Hai un problema con Excel? 
Rileva formattazione da cella
di gerry65 (utente non iscritto) data: 29/08/2017 15:31:13
Salve a tutti, dovrei formattare delle celle in una tabella, la formattazione deve essere rilevata da alcune celle in base a un codice, provo a spiegare, oltre ad allegare un file esempio. da tenere presente che la versione di excel e la 2003, ho creato due tabelle assegando un nome la prima si chiama TB_Dati, dove si inseriscono dei dati la prima colonna e nominata Codice, la seconda tabella e con il nome TB_Formato, dove la prima colonna è nominata formato, ora se nella tabella TB-Dati inserisco un codice tipo Ve spostamdomi di cella tramite VBA rilevare il codice dalla TB_Fomato ed applicare il formato trovato alla stesso codice nella TB_Dati. Il formato deve essere sia per il bordo colore e al testo.
di gerry65 (utente non iscritto) data: 29/08/2017 21:00:25
chiedo scusa, qualcuno sa se si puo realizzare la macro in descrizione.
Spero che qualcuno mi possa aiutare!
di cromagno data: 30/08/2017 10:56:45
Ciao,
ma hai provato ad usare il "registratore di macro" per ottenere le varie formattazioni?
Il lavoro che chiedi (visto che nel file non c'è traccia di codici da te provati) non è complicato quanto lungo.
Usa il registratore, come detto prima, ed otterrai le giuste proprietà da poter assegnare ad una determinata cella sfruttando l'evento "Worksheet_Change" del foglio.
Ciao
Tore
di gerry65 (utente non iscritto) data: 30/08/2017 12:09:17
Ciao cromagno grazie per aver risposto, non ho provato con il registratore di macro per i seguenti motivi:
1 le tabelle sono dinamiche, ed hanno un nome
2 non so il riferimento di cella a cosa può essere utile data che la formattazione deve avvenire in base al codice assegnato alla colonna codice, praticamente a codice uiguale assega la formattazione, copia da tabella TB_Formato, e incolla alla Tabella TB_Dati.
Scasa ma non ho idea di come si possa fare, Grazie
di cromagno data: 30/08/2017 12:19:28
Il registratore ti serve per ottenere le proprietà per la formattazione da assegnare alla cella (indipendentemente che la selezioni o rispetti certi criteri o altro).
Una volta ottenute quelle proprietà, se hai una conoscenza almeno di base del VBA, sarà uno scerzo creare il codice ad hoc.
Se invece vuoi che ti venga dato il codice e basta, allora basta dirlo chiaramente (forse è per questo che molti non hanno risposto).
In ogni caso, prima di stasera non potrò "applicarmici".
di gerry65 (utente non iscritto) data: 03/09/2017 20:36:18
cia cromagno ho provato con il registratore di macro per copiare il formato, mi ha dato il seguento codice, solo che non riesco a confrontare i codici delle due tabelle e a codice uguale incollare il formato.
spero che mi puoi dare una mano grazie
Sub CopiaFormato()
Range("P14:AB14").Select
Selection.Copy
Range("P38").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub |
di gerry65 (utente non iscritto) data: 04/09/2017 17:03:46
cercando sul web e legendo sono riuscito a mettere insieme il seguente codice per confrontare i valori, solo che non riesco a completare il tutto,
1 dovri assegnare il nome delle tabelle per la ricerca, e non ci riesco,
2 non riesco a copiare il formato dalla 1 cella all'ultima cella della tabella, idem per icollare il formato.
3 il codice mi da l'impreesione che non si ferma continua anche dopo aver incollato il formato.
4 dovrei far partire il codice all'vento cange.
Allego il codice con la speranza che qualcuno mi possa aiutare.
Sub confronta_Copia_Formato()
For Each cella2 In Worksheets("Foglio1").Range("A8:A30")
For Each cella1 In Worksheets("Foglio1").Range("P9:P30")
If cella2.Value = cella1.Value Then
cella1.Range("b1:n1").Copy
cella2.Range("b1").Select
Selection.PasteSpecial Paste:=xlPasteFormats
End If
Next
Next
End Sub |
di Luca73 data: 04/09/2017 17:28:01
Ciao
Alcune domande per capire
1) Cit "dovri assegnare il nome delle tabelle per la ricerca, e non ci riesco," Perchè dovresti dare un nome alle tabelle di ricerca?
Alcuni suggerimenti alla cieca
1) For Each cella2 In Worksheets("Foglio1").Range("A8:A30")
Con questa istruzione assegni alla variabile cella2 una per una tutte le variabili dell'intervallo Range("A8:A30") pertanto cella 2 sara A8 il ciclo dopo A9, A10,... e analogamente per cella1
Pertanto la riga cella1.Range("b1:n1").Copy non ha significato. Secondo me tu vuoi copiare semplicemente cella1
2) se vuoi che il codici si fermi glielo devi dire altrimenti lui cicla fino alla fine.
Esiste il comando exit for da inserire all'interno dell'if per il primo ciclo. Per il secondo io creerei una variabile aggiuntiva
Ho provato a correggere ma non ho testato
Ciao
Luca
Sub confronta_Copia_Formato()
Dim cella2 as Range
Dim cella1 as Range
Dim Trovata as boolean
trovata = false
For Each cella2 In Worksheets("Foglio1").Range("A8:A30")
For Each cella1 In Worksheets("Foglio1").Range("P9:P30")
If cella2.Value = cella1.Value Then
cella1.Copy
cella2.Select
Selection.PasteSpecial Paste:=xlPasteFormats
trovata = true
exit for
End If
Next
if trovata then exit for
Next
End Sub |
di gerry65 (utente non iscritto) data: 04/09/2017 20:44:23
Ciao Luca73, grazie per aver risposto, all'inizio della discussione, ho allegato un foglio di esempio senza codice, se lo puoi aprire, e provi a selezionare le tabelle vedrai che nel quadratino sopra la barra delle formule ti apparirà il nome per le due tabella, la prima e TB_Dati, la seconda è TB_Formato, dove la prima colonna di ogni tabella e codice, se io inserisco un codice nella TB_Dati appena mi sposto della cella deve iniziare il confronto con la TB_Formato se il codice esiste copia il formatto dell'inera riga e lo incolla nella TB_Dati.
Dato che il nome alle tabelle c'è come posso fare invece di usare il range di ricerca assegare il nome tabella e far la ricerca sulla colonna codicè?
Il codice da te modificato mi copia solo la cella con il codice mentre a me serve che copi tutta la riga della tabella.
Allego il file con il codice, prova a fare una prova.
Altro probela e che mi trova solo il primo codice mentre non trova gli altri codici, nella tabella ci sono più codici.
di Luca73 data: 05/09/2017 09:20:47
Se ho capito bene la Macro sotto dovrebbe funzionare.
Devi copiarla nel foglio.
Si attiva quando modifiche il foglio.
Ciao
Luca
Private Sub Worksheet_Change(ByVal Target As Range)
With Application
.EnableEvents = False
End With
If Target.Column > 1 Then Exit Sub
If Target.Row < 9 Then Exit Sub
Dim CellaW As Range
For Each CellaW In Worksheets("Foglio1").Range("P9", Cells(Rows.Count, Range("P9").Column).End(xlUp))
If Target.Value = CellaW.Value Then
Range(CellaW, CellaW.Offset(0, 12)).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Target.Offset(1, 0).Select
Application.CutCopyMode = False
Exit For
End If
Next
With Application
.EnableEvents = True
End With
End Sub |
di gerry65 (utente non iscritto) data: 05/09/2017 17:54:43
Ciao Luca73 ho provato il codice adesso funziona, solo che c'è un problema, la tabella formati è sempre la stessa, ma ci posso essere più taballe da formattare sullo stesso foglio, esempio oltre alla tabella già inserita c'è un altra in questo range di cella AE11:AQ12, naturalmente la prima colonna è quella codice, come posso fare per formattare anque questa?
Da tener conto che potrei inserirne altre.
di Luca73 data: 06/09/2017 11:10:43
Ciao
Modifiva la macro come sotto
Al posto delle Celle A8 e P8 inserisci le celle in alto a sinistra delle tue tabelle dove vuoi incollare i valori
Se le tabelle fossero più di 2 basta aggiungere all'interno di UNION un altro range del tipo
Range("P8", Range("P8").End(xlDown))
Tale range è la prima colonna (di valori continui) di una tabella che cmincia in P8
CIao
Luca
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union(Range("A8", Range("A8").End(xlDown)), Range("P8", Range("P8").End(xlDown)))) Is Nothing Then Exit Sub
With Application
.EnableEvents = False
End With
Dim CellaW As Range
For Each CellaW In Worksheets("Foglio1").Range("P9", Cells(Rows.Count, Range("P9").Column).End(xlUp))
If Target.Value = CellaW.Value Then
Range(CellaW, CellaW.Offset(0, 12)).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Target.Offset(1, 0).Select
Application.CutCopyMode = False
Exit For
End If
Next
With Application
.EnableEvents = True
End With
End Sub
|
di gerry65 (utente non iscritto) data: 06/09/2017 19:07:44
Grazie Luca73, ho provato il codice e funziona tutto, solo che dovrei copiare pure l'altezza della riga, e la larghezza si può fare? ho provato a vedere col il registratore di macro ma per l'altezza non è possibile, c'è un sistema per poterlo fare?
Grazie ancora
di Luca73 data: 07/09/2017 09:05:19
Ciao
prova con la modifica sotto priportata.
Attenzione che se modifiche l'altezza della riga cambia tutta la riga e pertanto se sulla stessa riga hai dei dati che usi come modello allora cambia anche quello
Per la larghezza assumo che hai capito come fare.
Ciao
Luca
Private Sub Worksheet_Change(ByVal Target As Range)
[...]
If Target.Value = CellaW.Value Then
Range(CellaW, CellaW.Offset(0, 12)).Copy
Target.PasteSpecial Paste:=xlPasteFormats
Target.Offset(1, 0).Select
Application.CutCopyMode = False
Target.RowHeight = CellaW.RowHeight
Exit For
End If
[...]
End Sub |
di gerry65 (utente non iscritto) data: 08/09/2017 12:45:16
Ciao Luca73, ho provato il codice, funziona tutto, ultimo accargimento se vorrei separare la tabella formato dalle altre tabelle, tipo tabella formato nel foglio3,
mentre le altre tabelle nel foglio1 e foglio2, come posso fare.
di gerry65 (utente non iscritto) data: 10/09/2017 21:20:33
Dopo varie prove sono riuscito a risolvere con il segente rigo di codice modificato
For Each CellaW In Worksheets("Foglio3").Range("E5", Worksheets("Foglio3").Cells(Rows.Count, Worksheets("Foglio3").Range("E5").Column).End(xlUp))
di gerry65 (utente non iscritto) data: 11/09/2017 20:29:35
Risolto
Vuoi Approfondire?