Condividi:        

EXCEL + VBA Formattazione condizionale

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

EXCEL + VBA Formattazione condizionale

Postdi mark64 » 10/03/10 04:39

Salve a tutti sono un nuovo utente del forum. Ho un problema con VBA. Devo scrivere un codice che mi permetta di formattare un intervallo di celle, quando viene selezionata da un elenco un determinato valore. Per spiegarmi aggiungo una immagine:

Immagine

Nelle celle della colonna A ho degli elenchi. Quando ne seleziono uno si deve colorare la riga corrispondente per un certo intervallo (A:J nel mio caso). Ho già utilizzato le tre formattazioni condizionali messe a disposizione nel foglio excel e quinidi sono costretto ad usare VBA.
Su internet ho trovato questo codice che praticamente fa quello che voglio io, ma mi formatta tutta la riga e non un intervallo.
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Range([A5], [A29]), Target) Is Nothing Then Exit Sub
r = Target.Row
If Target.Value = "Attesa Esito" Then
Rows(r).EntireRow.Cells.Interior.ColorIndex = 45
Else
Rows(r).EntireRow.Cells.Interior.ColorIndex = 6
End If
End Sub


Ho fatto mille prove ma non riesco a risolvere questo problema.
Una seconda domanda: come posso resettare le celle e riportarle tutte con la scritta "Da giocare" con sfondo giallo. Credo che bisogna usare una macro.

Grazie
mark64
Utente Junior
 
Post: 14
Iscritto il: 10/03/10 03:55

Sponsor
 

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 10/03/10 17:31

Ciao mark64 e benvenuto nel forum.

Prova con questa modifica:
Codice: Seleziona tutto
Dim LastMod As Single
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Range([A5], [A29]), Target) Is Nothing Then Exit Sub
R = Target.Row
If Target.Value = "Attesa Esito" Then
Range(Cells(R, 1), Cells(R, 10)).Interior.ColorIndex = 45
Range(Cells(LastMod, 1), Cells(LastMod, 10)).Interior.ColorIndex = 6
LastMod = R
Else
Range(Cells(R, 1), Cells(R, 10)).Interior.ColorIndex = 6
End If
End Sub

Fai in modo che la Dim sia la prima linea di codice nel modulo.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi mark64 » 10/03/10 20:53

Grazie Anthony47. Il tuo codice funziona ma mi dava il seguente messaggio:

"Errore di run-time '1004:
Errore definito dall'applizazione o dall'oggetto"

Ho tolto queste due righe:

Range(Cells(LastMod, 1), Cells(LastMod, 10)).Interior.ColorIndex = 6
LastMod = R

e ora funziona alla perfezione.
Grazie mille.
mark64
Utente Junior
 
Post: 14
Iscritto il: 10/03/10 03:55

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 11/03/10 02:02

Con le due istruzioni tolte pero' non rimetti sul giallo le celle precedentemente colorate; ma sono io che ho dimenticato di inserire una istruzione:
Codice: Seleziona tutto
Dim LastMod As Single
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Intersect(Range([A5], [A29]), Target) Is Nothing Then Exit Sub
R = Target.Row
If Target.Value = "Attesa Esito" Then
Range(Cells(R, 1), Cells(R, 10)).Interior.ColorIndex = 45
On Error Resume Next            '<<< AGGIUNGERE
Range(Cells(LastMod, 1), Cells(LastMod, 10)).Interior.ColorIndex = 6
LastMod = R
Else
Range(Cells(R, 1), Cells(R, 10)).Interior.ColorIndex = 6
End If
End Sub
Il Resume Next evita che alla prima esecuzione il codice si blocchi perche' LastMod e' ancora a zero.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi biancocandido55 » 31/03/12 23:55

Ciao ragazzi,
eeehhhhmmmm, chiedo scusa, a volte ritornano :D :D , stavo cercando di trovare qualcosa di specifico sull'argomento in questione per usarlo sullo Spreadsheet dell' UserForm ed eccomi qui.
Nelle opzioni dello spreadsheet, la formattazione condizionale non esiste, ma spero comunque che si possa applicare tramite VBA allo spread, riprendendo l'ultimo codice riportato sopra con modifiche personali ho scritto questi 2 codici:
Codice: Seleziona tutto
Private Sub Spreadsheet2.Worksheet_Calculate()
Application.CalculateFull
End Sub
Private Sub Spreadsheet2.Worksheet_Change(ByVal Target As Range)
If Intersect(Range([m9], [v19]), Target) Is Nothing Then Exit Sub
If Target.Value = ?????????? Then
Target.Font.ColorIndex = 3
Target.Interior.ColorIndex =2
Else
Target.Interior.ColorIndex = xlNone
End If
End Sub

dove ho messo i punti interrogativi vorrei specificare la condizione valori duplicati, che non sono riuscito a trovare nel WEB e non so cosa fare, potete aiutarmi,
come sempre GRAZIE
bianco55 Immagine
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 02/04/12 09:39

Raccomando vivamente di non usare Range([m9], [v19]) per indicare l' intervallo M9:V19; la rappresentazione [M9] infatti significa "Evaluate("M9")", quindi e' un miracolo se restituisce la cella stessa e non il suo contenuto.
Per quanto riguarda la domanda, mi pare che essa sia: come identificare su un oggetto Spreadsheet un valore duplicato? la risposta e': conta devi contare quante volte quel valore e' presente nel range di tuo interesse. Ad esempio questa ti restituisce in MyCnt quante volte il valore della cella selezionata e' presente nel range A1:M10 dello spreadsheet
Codice: Seleziona tutto
MyCnt=0
For Each kkk In Spreadsheet1.Range("A1:M10")
If kkk.Value = Spreadsheet1.ActiveCell.Value Then MyCnt = MyCnt + 1
Next kkk

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi biancocandido55 » 04/04/12 09:43

Ciao Anthony,
per evidenziare i numeri uguali mi avevi suggerito di contare quante volte il numero compare in un range, quindi ho dedotto che devo trasformare la funzione conta.se in vba, l' ho già usata in passato come condizione di formula nella formattazione condizionale ( =conta.se(m9:v19;m9)>1), purtroppo mai usata in vba e conoscendo il mio scarsissimo livello di studio in vba, ho provato a scrivere questo codice:
Codice: Seleziona tutto
Sub Spreadheet2_Button4_Click(ByVal Target As Range)
Dim Target As Integer
Set Target = spreadsheet2.worksheet.Range("m9:v19")
If Application.WorksheetFunction.CountIf("m9:v19", "m9") > 1 Then
Target.Interior.ColorIndex = 2
Target.Font.ColorIndex = 3
End If
End Sub

non l'ho ancora applicata allo spread del form e come era già prevedibile,
mi dà errore :( :( , - argomento non facoltativo -,
puoi correggerla e spiegarmi l'errore, GRAZIE infinite.
Un abbraccio
bianco55
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 04/04/12 14:56

Dissento dal tuo modo di procedere: lavorando in excel ha gia' poco senso inserire uno spreadsheet in una form, non ha nessun senso inserire un pulsante nello spreadsheet.
Nel codice postato non ci sono due righe in fila di istruzioni corrette; quindi piu' che da correggere e' da buttare.
E poi, perche' non hai usato le righe di codice che ti avevo dato?
Ma soprattutto, dopo questo post non ho capito che cosa hai bisogno di fare.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi biancocandido55 » 05/04/12 14:05

Ciao Anthony,
grazie per la critica, come detto già nel post precedente sapevo a priori che la macro postata valeva uno 0 in vba,
sul tuo dissenso per il mio modo di procedere, nulla da dire, per quello che riguarda la mia richiesta, mi serve una macro che "evidenzia" nello spread "tutti i numeri uguali", usando solo un colore per il fondo ed uno per il carattere,
in contrasto con i colori della tabella.
Come sempre GRAZIE, un abbraccio
bianco55
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 06/04/12 18:49

Ad esempio questo codice cerca nel range A1:M10 e colora in giallo le celle che hanno almeno un doppione (altre celle nel range con lo stesso valore).
Codice: Seleziona tutto
Spreadsheet1.Range("A1:M10").Interior.Color = RGB(255, 255, 255)
For Each jjj In Spreadsheet1.Range("A1:M10")
    myCnt = 0
    For Each kkk In Spreadsheet1.Range("A1:M10")
        If kkk.Value = jjj.Value Then myCnt = myCnt + 1
    Next kkk
If myCnt > 1 Then jjj.Interior.Color = RGB(255, 255, 0)
Next jjj

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi biancocandido55 » 07/04/12 00:36

Ciao Anthony,
la macro è perfetta, questa evidenzia tutti i numeri che compaiono minimo 2 volte nel quadro estrazionale.
Mi occorre, ora una variante della macro, deve evidenziare tutti quei numeri che sono usciti nello stesso posto estrazionale (ISOTOPI) minimo 2 volte , come da immagine:
Immagine
colgo con questo, l'occasione di porti i migliori Auguri di una Buona Pasqua e Pasquetta a te e Famiglia.
Un abbraccio
bianco55 Immagine

P.S.
BUONA PASQUA A TUTTI GLI AMICI DEL FORUM
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15

Re: EXCEL + VBA Formattazione condizionale

Postdi Anthony47 » 07/04/12 14:22

Non sono riuscito a incrociare le tue affermazioni con le mie reminiscenze di fisica e chimica, ma credo che per la tua bisogna possa servire questa variante:
Codice: Seleziona tutto
        If kkk.Value = jjj.Value And kkk.Column = jjj.Column Then myCnt = myCnt + 1

Serene feste a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19215
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL + VBA Formattazione condizionale

Postdi biancocandido55 » 09/04/12 20:44

Ciao Anthony,
grazie per la modifica,
un abbraccio.
bianco55
biancocandido55
Utente Senior
 
Post: 305
Iscritto il: 03/03/06 10:15


Torna a Applicazioni Office Windows


Topic correlati a "EXCEL + VBA Formattazione condizionale":


Chi c’è in linea

Visitano il forum: Nessuno e 31 ospiti