› Excel e gli applicativi Microsoft Office › cella per ricerca e selezione elenco
-
AutoreArticoli
-
Buongiorno al forum.
Vi allego un esempio, dove da C4 in giù ho un elenco di nomi.
Nella cella J1 vorrei che iniziando a scrivere le lettere che compongono un nome, l'elenco nella colonna C4 iniziasse a ridursi fino a che tutte le alternative, mano a mano che inserisco nuovi caratteri in J1, non si esauriscono e rimane quindi la scelta, sempre che la trovi. Sarebbe possibile?
Allegati:
You must be logged in to view attached files.Ciao #nicopana
Credo che il risultato che vorresti sia ottenibile con una macro (nemmeno così banale)!
Ciao
Paolo
Capisco, allora non posso che appellarmi alla bontà di qualcuno perchè non so scrivere molto bene in VBA. Esiste magari un esempio che potrei ad esempio riadattare in maniera semplice al mio foglio?
Ciao #nicopana
Come già detto più volte, la soluzione è mettersi lì e studiare il VBA!
Le anime buone ormai scarseggiano...
Ciao
Paolo
Ciao
prova questa
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j1")) Is Nothing Then
Dim strCriteria As String
strCriteria = Cells(1, 10)
If Len(Trim(strCriteria)) > 0 Then
strCriteria = strCriteria & "*" 'criterio contiene
Else
Range("$c$4:$c$7000").AutoFilter Field:=1
Exit Sub
End If
Range("$c$4:$c$7000").AutoFilter Field:=1 ' toglie il criterio se c'è
Range("$c$4:$c$7000").AutoFilter Field:=1, Criteria1:=strCriteria, _
Operator:=xlAnd
End If
End SubPrivate Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("j1")) Is Nothing Then
Dim strCriteria As String
strCriteria = Cells(1, 10)
If Len(Trim(strCriteria)) > 0 Then
strCriteria = strCriteria & "*" 'criterio contiene
Else
Range("$c$4:$c$7000").AutoFilter Field:=1
Exit Sub
End If
Range("$c$4:$c$7000").AutoFilter Field:=1 ' toglie il criterio se c'è
Range("$c$4:$c$7000").AutoFilter Field:=1, Criteria1:=strCriteria, _
Operator:=xlAnd
End If
End Subgrazie innanzitutto. Non riesco a capire però come lanciarla e tenerla attiva: l'ho registrata in un nuovo modulo del file in VBA, ma non mi da segni di vita se scrivo qlc in J1
ciao
Private Sub Worksheet_Change(ByVal Target As Range)
va sul foglio non su un modulo
Ho provato ad esportare la macro su un altro file. La struttura dei dati è pressocchè simile, volevo spostare la cella di ricerca in J4 (da J1), e quindi ho cambiato il riferimento nel testo della macro.
Lasciandolo per in J1, nel nuovo file non mi trova nessuno dei riferimenti relativi alle lettere che ho isnerito, anzi, mi crea una selezione, chiaramente vuota, che si chiude sempre al rigo 973, e non capisco il perchè
Allego qui il file originale dove mi succede quello che ho scritto nel post appena sopra
Allegati:
You must be logged in to view attached files.Ho provato ad esportare la macro su un altro file. La struttura dei dati è pressocchè simile, volevo spostare la cella di ricerca in J4 (da J1), e quindi ho cambiato il riferimento nel testo della macro.
ho risolto il fatto di spostare il riferimento di cella in cui scrivere le lettere che mi interessano, quindi nel caso dell'esempio, spostarlo da j1 a j4 senza più problemi.
Non riesco invece a risolvere il fatto che mi riduce la selezione dal rigo 972 in poi, quindi è come se non mi trova nulla
Allegati:
You must be logged in to view attached files.A me sembra che il filtro debba essere in colonna 3.... Range("$c$4:$c$1000").AutoFilter Field:=3
punto A
hai J3 non j4
a me funziona
se proprio vuoi
metti sopra alla macro
Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
ecc.....
e ascolta
nel tuo file metti
metti field 3
nella parte superiore alla tua macro, e nera una precedente che mi permetteva, alla scrittura di un valore nella colonna L (quindi quando acquistavi un giocatore), di formattare di colore grigio e barrato la riga corrispondente, quindi per escludere il giocatore a vista dalla lista.
Se per caso commetto un errore, e cancello solo il valore economico nella colonna L tutto ok, la riga ritorna con la formattazione normale. Se per caso invece per velocità cancello entrambi i valori, cioè nella colonna L e K (quindi anche la squadra aggiudicataria dell'acquisto), parte il debug della macro, e mi evidenzia in giallo la riga Case is <> ""
Come mai secondo te?
ciao
prova così
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo E
If Not Intersect(Target, Range("L4:L1000")) Is Nothing Then
If Target.Rows.Count > 1 Then Exit Sub
Select Case Target.Value
Case Is <> ""
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Interior.ColorIndex = 16
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Font.Strikethrough = True
Case Is = ""
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Interior.ColorIndex = xlNone
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Font.Strikethrough = False
End Select
E:
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Interior.ColorIndex = xlNone
Exit Sub
End If
If Not Intersect(Target, Range("j3")) Is Nothing Then
Dim strCriteria As String
strCriteria = Cells(3, 10)
If Len(Trim(strCriteria)) > 0 Then
strCriteria = strCriteria & "*" 'criterio contiene
Else
Range("$c$4:$c$1000").AutoFilter Field:=3
Exit Sub
End If
Range("$c$4:$c$1000").AutoFilter Field:=3 ' toglie il criterio se c'è
Range("$c$4:$c$1000").AutoFilter Field:=3, Criteria1:=strCriteria, _
Operator:=xlAnd
End If
End Subil
If Not Intersect(Target, Range("
non permette cancellazioni multiple
le devi gestire
ma io il VBA
lo conosco poco
sono un formuladipendente
No cosi, no, la riga non resta grigia ma solo con il barrato del testo.
ciao
senti mica ho capito cosa vuoi fare
primo consiglio non cancellare due celle assieme.
secondo gestire l'errore
On Error GoTo E
E:
........................................................Exit Sub
su puntini metti cosa vuoi che succeda al colore
oppure lascia che esca dalla macro e il colore rimane
devi anche metterci del tuo eh!
diciamo che quando faccio la doppia selezione e cancello, il testo dovrebbe ritornare pulito, quindi non grigrio e non barrato.
ho provato anche da solo a mettere dopo la E queste due stringhe:
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Interior.ColorIndex = xlNone
Range(Cells(Target.Row, "A"), Cells(Target.Row, "H")).Font.Strikethrough = Falsema sembra che la macro vada subito a finire come se stesse facendo girare il controllo dopo la E, anche se io non cancello. quindi se inserisco i due valori in L e K, la riga resta normale, quindi nè grigia ne barrata
Il fatto che ogni volta che lancio la macro la selezione mi porti via un pò di tempo, in base al pc su cui uso il file excel, esce sotto "calcolo in corso.." a 4 o 8 thread, dipende dalle potenzionalità del pc? O si riesce per caso a snellire la macro per evitare questi secondi di attesa? In effetti me lo chiedevo anche perchè già la macro non mi sembra per niente complicata, è già di per se snella, e non mi spiegavo questa attesa.(è anhce vero che il mio pc su cui gira non è il massimo)
-
AutoreArticoli
